def birthday_search(self, state): if isinstance(state, DateQueryState): if state.date: return Individual.get_birthday_query(state.date) elif isinstance(state, DateIntervalQueryState): if state.start and state.end: return Individual.get_birthday_query(state.start, state.end) else: raise AssertionError
def birthday_search(self, state): """ Returns a birthday query suitable for search filters. This should be assigned on search_column when you want to filter for birth day. e.g.: SearchColumn('birth_date', search_column=self.birthday_search) """ if isinstance(state, DateQueryState): if state.date: return Individual.get_birthday_query(state.date) elif isinstance(state, DateIntervalQueryState): if state.start and state.end: return Individual.get_birthday_query(state.start, state.end) else: raise AssertionError
def birthday_search(self, state): """ Returns a birthday query suitable for search filters. This should be assigned on search_column when you want to filter for birth day. e.g.: SearchColumn('birth_date', search_column=self.birthday_search) """ if isinstance(state, DateQueryState): if state.date: return Individual.get_birthday_query(state.date) elif isinstance(state, DateIntervalQueryState): if state.start and state.end: return Individual.get_birthday_query(state.start, state.end) else: raise AssertionError
def test_get_birthday_interval_query(self): start = localdatetime(2000, 3, 1) end = localdatetime(2000, 3, 25) query = Individual.get_birthday_query(start, end) start_year = DateTrunc(u'year', Date(start)) age_in_year = Age(Individual.birth_date, DateTrunc(u'year', Individual.birth_date)) test_query = ( start_year + age_in_year + Case(condition=age_in_year < Age(Date(start), start_year), result=Interval(u'1 year'), else_=Interval(u'0 year'))) test_query = And(test_query >= Date(start), test_query <= Date(end)) self.assertEquals(query, test_query) individuals = list(self.store.find(Individual, test_query)) self.assertEquals(len(individuals), 0) client1 = self.create_client(u'Junio C. Hamano') client1.person.individual.birth_date = localdate(1972, 10, 15) client2 = self.create_client(u'Richard Stallman') client2.person.individual.birth_date = localdate(1989, 3, 7) client3 = self.create_client(u'Linus Torvalds') client3.person.individual.birth_date = localdate(2000, 3, 4) client4 = self.create_client(u'Guido van Rossum') client4.person.individual.birth_date = localdate(2005, 3, 20) individuals = list(self.store.find(Individual, test_query)) self.assertEquals(len(individuals), 3) self.assertTrue(client2.person.individual in individuals) self.assertTrue(client3.person.individual in individuals) self.assertTrue(client4.person.individual in individuals)
def test_get_birthday_date_query(self): start = localdate(2000, 3, 4) query = Individual.get_birthday_query(start) start_year = DateTrunc(u'year', Date(start)) age_in_year = Age(Individual.birth_date, DateTrunc(u'year', Individual.birth_date)) test_query = ( start_year + age_in_year + Case(condition=age_in_year < Age(Date(start), start_year), result=Interval(u'1 year'), else_=Interval(u'0 year')) ) test_query = (test_query == Date(start)) self.assertEquals(query, test_query) individuals = list(self.store.find(Individual, test_query)) self.assertEquals(len(individuals), 0) client1 = self.create_client(u'Junio C. Hamano') client1.person.individual.birth_date = localdate(1972, 10, 15) client2 = self.create_client(u'Richard Stallman') client2.person.individual.birth_date = localdate(1989, 3, 4) client3 = self.create_client(u'Linus Torvalds') client3.person.individual.birth_date = localdate(2000, 3, 4) client4 = self.create_client(u'Guido van Rossum') client4.person.individual.birth_date = localdate(2005, 3, 4) individuals = list(self.store.find(Individual, test_query)) self.assertEquals(len(individuals), 3) self.assertTrue(client2.person.individual in individuals) self.assertTrue(client3.person.individual in individuals) self.assertTrue(client4.person.individual in individuals)