def prepare_jsons(self, user_id=None, center_icu=None, level='dept'): # TODO(olivier): all the icus on map ? or restrict somehow ? tree = icu_tree.ICUTree() tree.add_many(self.db.get_icus(), self.db.get_latest_bed_counts()) data = self.to_map_data(tree, level) anchor = center_icu if center_icu is not None else tree center = {'lat': anchor.lat, 'lng': anchor.long} return json.dumps(data), json.dumps(center)
def test_as_dict(self): tree = icu_tree.ICUTree(level='region') tree.label = 'label' tree.occ = 12 tree.free = 4 node_dict = tree.as_dict() self.assertIsInstance(node_dict, dict) self.assertEqual(node_dict['free'], tree.free)
def test_extract_below(self): tree = icu_tree.ICUTree() tree.add_many(self.icus, self.db.get_latest_bed_counts()) level = 'dept' nodes = tree.extract_below(level) self.assertEqual(len(nodes), 5) self.assertIsInstance(nodes[0], tuple) self.assertEqual(nodes[0][0].level, level) self.assertFalse(nodes[0][0].is_leaf) self.assertIsInstance(nodes[0][1], list) self.assertTrue(nodes[0][1][0].is_leaf)
def build_data(icus, bedcounts, num_users): tree = icu_tree.ICUTree(level='icu') # No clustering tree.add_many(icus, bedcounts) result = [] result.append(make_info(len(icus), 'icus', 'hospital-symbol', 'primary')) result.append(make_info(num_users, 'users', 'user-md', 'secondary')) keys = ['occ', 'free', 'death', 'healed'] labels = ['Occupied', 'Free', 'deceased', 'Healed'] icons = ['bed', 'check', 'times', 'chart-line'] colors = ['info', 'success', 'danger', 'warning'] for key, lab, i, c in zip(keys, labels, icons, colors): result.append(make_info(getattr(tree, key, 0), lab, i, c)) return result
def test_add(self): example = self.icus[7] insert_time = self.insert_time + datetime.timedelta(seconds=1) self.db.update_bed_count_for_icu( self.admin_id, store.BedCount(icu_id=self.icus[1].icu_id, n_covid_occ=12, n_covid_free=4, create_date=insert_time)) self.db.update_bed_count_for_icu( self.admin_id, store.BedCount(icu_id=example.icu_id, n_covid_occ=1, n_covid_free=19, create_date=insert_time)) tree = icu_tree.ICUTree() icus = self.db.get_icus() bedcounts = self.db.get_latest_bed_counts() tree.add_many(icus, bedcounts) self.assertEqual(tree.level, 'country') self.assertGreater(len(tree.children), 0) self.assertIn(example.region.name, tree.children) self.assertEqual(tree.occ, 13) self.assertEqual(tree.free, 23) self.assertEqual(tree.total, 36) self.assertFalse(tree.is_leaf) idf = tree.children[example.region.name] self.assertEqual(len(idf.children), 4) self.assertFalse(idf.is_leaf) self.assertIn(example.dept, idf.children) vdm = idf.children[example.dept] self.assertEqual(len(vdm.children), 2) self.assertFalse(vdm.is_leaf) self.assertIn(example.city, vdm.children) creteil = vdm.children[example.city] self.assertEqual(len(creteil.children), 2) self.assertFalse(creteil.is_leaf) self.assertIn(example.name, creteil.children) icu8_node = creteil.children[example.name] self.assertTrue(icu8_node.is_leaf) self.assertEqual(icu8_node.total, 20)
def prepare_jsons( self, user_id: Optional[int] = None, center_icu: Optional[store.ICU] = None, regions: Optional[List[int]] = None, level: str = 'dept', ): data = {} center = { 'lat': center_icu.lat, 'lng': center_icu.long } if center_icu else None for covid in [True, False]: tree = icu_tree.ICUTree(covid=covid) icus = self.db.get_icus() if regions: icus = [icu for icu in icus if icu.region_id in regions] tree.add_many(icus, self.db.get_latest_bed_counts()) data[covid] = self.to_map_data(tree, level) if center is None: center = {'lat': tree.lat, 'lng': tree.long} return json.dumps(data), json.dumps(center)
def test_extract_below(self): tree = icu_tree.ICUTree() tree.add_many(self.icus, self.db.get_latest_bed_counts()) level = 'dept' nodes = tree.extract_below(level, keep_empty=True) self.assertEqual(len(nodes), 5) self.assertIsInstance(nodes[0], tuple) self.assertEqual(nodes[0][0].level, level) self.assertFalse(nodes[0][0].is_leaf) self.assertIsInstance(nodes[0][1], list) self.assertTrue(nodes[0][1][0].is_leaf) nodes = tree.extract_below(level, keep_empty=False) self.assertEmpty(nodes[0][1]) # Only two regions in our data nodes = tree.extract_below('region', keep_empty=True, max_nodes=40) self.assertEqual(len(nodes), 2) # If we limit the number of nodes, this will split the Paris region into # depts (4 of them) nodes = tree.extract_below('region', keep_empty=True, max_nodes=5) self.assertEqual(len(nodes), 5)
def test_set_basic_information(self): icu = self.icus[0] tree = icu_tree.ICUTree() tree.set_basic_information(icu) self.assertEqual(tree.label, icu.name)
def test_account_for_beds(self): tree = icu_tree.ICUTree() bd = store.BedCount(n_covid_occ=34, n_covid_free=6) tree.account_for_beds(bd) self.assertEqual(tree.total, 40)
def test_level_name(self): icu = self.icus[0] self.assertEqual(icu.region_id, self.regions[0].region_id) tree = icu_tree.ICUTree(level='region') self.assertEqual(tree.get_level_name(icu), self.regions[0].name)
def test_get_next_level(self): tree = icu_tree.ICUTree(level='region') self.assertEqual(tree.get_next_level(), 'dept') tree = icu_tree.ICUTree(level='icu') self.assertIsNone(tree.get_next_level())
def test_get_leaves(self): tree = icu_tree.ICUTree() tree.add_many(self.icus, self.db.get_latest_bed_counts()) nodes = tree.get_leaves() self.assertEqual(len(nodes), 9)