def test_get_records_week(self): handler = SQLDataHandler(sqlite3.Connection(DATABASE_PATH)) subjects = 'a b c d e'.split(' ') for s in subjects: handler.new_category(s) categories = handler.active_categories start_date = dt.datetime(2000, 5, 1, 4, 30) for i in range(500): handler.start(random.choice(list(categories)), start_date) duration = dt.timedelta(seconds=random.randint(30, 60) * 60) handler.complete(start_date + duration) advance = dt.timedelta(seconds=random.randint(0, 60) * 60) start_date = start_date + advance + duration day = dt.datetime(2000, 5, 1, 6, 0) tuesday = data_analysis.get_records_on_day(handler, day + dt.timedelta(days=1)) thursday = data_analysis.get_records_on_day(handler, day + dt.timedelta(days=3)) actuals = data_analysis.get_records_on_week(handler, day_start=day) self.assertEqual(actuals[1], tuesday) self.assertEqual(actuals[3], thursday)
def test_category_persistence(self): handler = SQLDataHandler(sqlite3.Connection(DATABASE_PATH)) self.assertEqual(handler.active_categories, ()) handler = SQLDataHandler(sqlite3.Connection(DATABASE_PATH)) self.assertEqual(handler.active_categories, ()) categories = 'AP Bio,AP Chem,Physics 2,Biology 101,CS 61A'.split(',') for subject in categories: handler.new_category(subject) self.assertEqual(set(handler.active_categories), set(categories)) handler = SQLDataHandler(sqlite3.Connection(DATABASE_PATH)) self.assertEqual(set(handler.active_categories), set(categories))
def test_get_records_day(self): handler = SQLDataHandler(sqlite3.Connection(DATABASE_PATH)) subjects = 'a b c'.split(' ') for s in subjects: handler.new_category(s) start0 = dt.datetime(2002, 4, 6, 3, 0) end0 = dt.datetime(2002, 4, 6, 10, 0) start1 = dt.datetime(2002, 4, 6, 11, 0) end1 = dt.datetime(2002, 4, 6, 12, 0) start2 = dt.datetime(2002, 4, 6, 13, 0) end2 = dt.datetime(2002, 4, 6, 13, 30) start3 = dt.datetime(2002, 4, 7, 1, 0) end3 = dt.datetime(2002, 4, 7, 8, 0) day1 = dt.datetime(2002, 4, 5, 6, 0) day2 = dt.datetime(2002, 4, 6, 6, 0) day3 = dt.datetime(2002, 4, 7, 6, 0) starts = [start0, start1, start2, start3] ends = [end0, end1, end2, end3] categories = handler.active_categories cats = 'a c a a'.split(' ') for c, s, e in zip(cats, starts, ends): handler.start(c, s) handler.complete(e) day_one_stats = list(data_analysis.get_records_on_day(handler, day1)) day_two_stats = list(data_analysis.get_records_on_day(handler, day2)) day_three_stats = list(data_analysis.get_records_on_day(handler, day3)) self.assertEqual(len(day_one_stats), 1) self.assertEqual(len(day_two_stats), 3) self.assertEqual(len(day_three_stats), 0) record_0 = Record('a', start0, end0) record_1 = Record('c', start1, end1) record_2 = Record('a', start2, end2) record_3 = Record('a', start3, end3) self.assertEqual(day_one_stats[0], record_0) self.assertEqual(day_two_stats[0], record_1) self.assertEqual(day_two_stats[1], record_2) self.assertEqual(day_two_stats[2], record_3) '''
def test_category_activation(self): handler = SQLDataHandler(sqlite3.Connection(DATABASE_PATH)) categories = 'AP Bio,AP Chem,Physics 2,Biology 101,CS 61A'.split(',') for subject in categories: handler.new_category(subject) handler.set_category_activation('AP Bio', False) handler.set_category_activation('CS 61A', False) expected = [False, True, True, True, False] active_categories = handler.active_categories for e, cat in zip(expected, categories): with self.subTest(e=e, cat=cat): self.assertEqual(cat in active_categories, e, cat) all_categories = handler.all_categories for cat in categories: with self.subTest(cat=cat): self.assertTrue(cat in all_categories) with self.assertRaises(ValueError): handler.set_category_activation(-1, False)
def test_basic_session(self): start = dt.datetime(2015, 4, 5, 2, 0) end = dt.datetime(2015, 4, 5, 3, 30) handler = SQLDataHandler(sqlite3.Connection(DATABASE_PATH)) categories = 'AP Bio,AP Chem,Physics 2,Biology 101,CS 61A'.split(',') for cat in categories: handler.new_category(cat) with self.assertRaises(RuntimeError): handler.complete() with self.assertRaises(ValueError): handler.start(-5, dt.datetime.now()) handler.start('AP Bio', start) self.assertTrue(handler.is_active_session()) handler.complete(end) self.assertFalse(handler.is_active_session()) range_begins = [ dt.datetime(2015, 4, 5, 1, 0), dt.datetime(2015, 4, 5, 1, 0), dt.datetime(2015, 4, 5, 1, 0), dt.datetime(2015, 4, 5, 2, 0), dt.datetime(2015, 4, 5, 3, 0) ] range_ends = [ dt.datetime(2015, 4, 5, 1, 3), dt.datetime(2015, 4, 5, 2, 0), dt.datetime(2015, 4, 5, 2, 30), dt.datetime(2015, 4, 5, 2, 30), dt.datetime(2015, 4, 5, 4, 00) ] expected_record = Record('AP Bio', start, end) successful_findings = [False, False, True, True, False] for rb, re, sf in zip(range_begins, range_ends, successful_findings): with self.subTest(rb=rb, re=re, sf=sf): result = list(handler.get_records_between(rb, re)) if sf: self.assertEqual(result[0], expected_record) else: self.assertEqual(result, [])
def test_multiple_sessions(self): start1 = dt.datetime(2010, 1, 1, 10, 10) end1 = dt.datetime(2010, 1, 1, 12) start2 = dt.datetime(2010, 1, 1, 13, 0) end2 = dt.datetime(2010, 1, 1, 15, 0) handler = SQLDataHandler(sqlite3.Connection(DATABASE_PATH)) categories = 'AP Bio,AP Chem,Physics 2,Biology 101,CS 61A'.split(',') for cat in categories: handler.new_category(cat) handler.start('AP Chem', start1) self.assertTrue(handler.is_active_session()) with self.assertRaises(RuntimeError): handler.start('Biology 101') handler.complete(end1) self.assertFalse(handler.is_active_session()) handler.start('Biology 101', start2) self.assertTrue(handler.is_active_session()) handler.complete(end2) self.assertFalse(handler.is_active_session()) range_begins = [ dt.datetime(2010, 1, 1, 10, 0), dt.datetime(2010, 1, 1, 10, 0), dt.datetime(2010, 1, 1, 10, 20), dt.datetime(2010, 1, 1, 13, 5) ] range_ends = [ dt.datetime(2010, 1, 1, 10, 11), dt.datetime(2010, 1, 1, 13, 14), dt.datetime(2010, 1, 1, 13, 14), dt.datetime(2010, 1, 1, 13, 10) ] er1 = Record('AP Chem', start1, end1) er2 = Record('Biology 101', start2, end2) expecteds = [[er1], [er1, er2], [er2], []] for rb, re, expected in zip(range_begins, range_ends, expecteds): with self.subTest(rb=rb, re=re, expected=expected): result = list(handler.get_records_between(rb, re)) self.assertEqual(expected, result)
def test_category_creation(self): handler = SQLDataHandler(sqlite3.Connection(DATABASE_PATH)) self.assertEqual(handler.active_categories, ()) with self.assertRaises(ValueError): handler.new_category('') categories = 'AP Bio,AP Chem,Physics 2,Biology 101,CS 61A'.split(',') added_categories = set() for i, subject in enumerate(categories, 1): with self.subTest(subject=subject): handler.new_category(subject) added_categories.add(subject) self.assertEqual(set(handler.active_categories), added_categories) with self.assertRaises(ValueError): handler.new_category(' ') for subject in categories: with self.subTest(subject=subject): with self.assertRaises(RuntimeError): handler.new_category(subject) self.assertEqual(set(handler.active_categories), added_categories) handler.new_category(' decal \t') self.assertTrue('decal' in handler.active_categories)
def test_cancel(self): start = dt.datetime(2002, 4, 6, 5, 6) handler = SQLDataHandler(sqlite3.Connection(DATABASE_PATH)) handler.new_category('Test') handler.start('Test', start) self.assertTrue(handler.is_active_session()) handler.cancel() self.assertFalse(handler.is_active_session()) records = handler.get_records_between(dt.datetime(2002, 4, 6, 5, 0), dt.datetime(2002, 4, 6, 5, 10)) self.assertEquals(records, [])
def test_rename(self): handler = SQLDataHandler(sqlite3.Connection(DATABASE_PATH)) handler.new_category('AP Bio') handler.new_category('AP French') handler.new_category('CS 50') handler.rename_category('AP Bio', 'AP Biology') categories = handler.active_categories self.assertTrue('AP Biology' in categories) self.assertFalse('AP Bio' in categories) self.assertTrue('AP French' in categories) self.assertTrue('CS 50' in categories) with self.assertRaises(ValueError): handler.rename_category('apple', 'banana')
def set_up(): file_management.create_anpy_dir_if_not_exist() handler = SQLDataHandler(sqlite3.Connection(file_management.DATABASE_PATH)) return handler
get_path(path) elif 'LogFile' not in config['Paths']: print('Invalid config file.') create_config(path) get_path(path) else: return config['Paths']['LogFile'] prompt_date = get_datetime if __name__ == '__main__': # DATABASE_FILE = 'data.db' # CONFIG_FILE = 'config.ini' file_management.create_anpy_dir_if_not_exist() handler = SQLDataHandler(sqlite3.Connection(file_management.DATABASE_PATH)) if not handler.active_categories: create_categories(handler) path = get_path(file_management.CONFIG_PATH) table, headers = table_generator.create_table_iterable_and_headers( data_handler=handler) print(tabulate(table, headers=headers)) while True: if handler.is_active_session(): active_session(handler, path)