def sync_icus(self): self.prepare() icus_df = self._shdb.get_icus() icus_df.rename(columns={'icu_name': 'name'}, inplace=True) for _, icu in icus_df.iterrows(): icu_dict = icu.to_dict() icu_name = icu_dict["name"] region = icu_dict.pop('region', None) db_icu = self._icus.get(icu_name, None) # Maybe create region first. if region is not None: if region not in self._regions: region_id = self._store.add_region( self._default_admin, store.Region(name=region)) self._regions[region] = region_id logging.info("Adding Region {}".format(region)) icu_dict['region_id'] = self._regions[region] # Update icu now if db_icu is not None: manager = self._managers.get(db_icu.icu_id, self._default_admin) self._store.update_icu(manager, db_icu.icu_id, icu_dict) logging.info("Updating ICU {}".format(icu_name)) else: new_icu = store.ICU(**icu_dict) icu_id = self._store.add_icu(self._default_admin, new_icu) self._store.assign_user_as_icu_manager( self._default_admin, self._default_admin, icu_id) logging.info("Adding ICU {}".format(icu_name))
def post(self): values = self.parse_from_body(store.Region) id_key = 'region_id' region_id = values.pop(id_key, '') try: if not region_id: region_id = self.db.add_region( self.user.user_id, store.Region(**values)) else: self.db.update_region(self.user.user_id, region_id, values) except Exception as e: logging.error(f'Cannot save region {e}') values[id_key] = region_id return self.do_render(store.Region(**values)) return self.redirect(ListRegionsHandler.ROUTE)
def populate_db(self): self.admin_id = self.db.add_default_admin() r1 = self.db.add_region(self.admin_id, store.Region(name='IDF')) r2 = self.db.add_region(self.admin_id, store.Region(name='PACA')) self.db.add_icu( self.admin_id, store.ICU(name='icu1', region_id=r1, dept='75', city='Paris', telephone='+65123')) self.db.add_icu( self.admin_id, store.ICU(name='icu2', region_id=r1, dept='75', city='Paris')) self.db.add_icu( self.admin_id, store.ICU(name='icu3', region_id=r1, dept='92', city='Clamart')) self.db.add_icu( self.admin_id, store.ICU(name='icu4', region_id=r1, dept='93', city='Bobigny')) self.db.add_icu( self.admin_id, store.ICU(name='icu5', region_id=r1, dept='93', city='Saint-Denis')) self.db.add_icu( self.admin_id, store.ICU(name='icu6', region_id=r1, dept='94', city='Vitry')) self.db.add_icu( self.admin_id, store.ICU(name='icu7', region_id=r1, dept='94', city='Creteil')) self.db.add_icu( self.admin_id, store.ICU(name='icu8', region_id=r1, dept='94', city='Creteil')) self.db.add_icu( self.admin_id, store.ICU(name='icu9', region_id=r2, dept='13', city='Marseille')) self.icus = self.db.get_icus() self.regions = self.db.get_regions() self.insert_time = datetime.datetime(2020, 4, 8, 11, 13) # Adding bedcounts: here we cheat a bit since we insert zeros counts # to have those bedcounts on the map and simplify the maths. for icu in self.icus: count = store.BedCount(icu_id=icu.icu_id, create_date=self.insert_time) self.db.update_bed_count_for_icu(self.admin_id, count)
def do_render(self, region): region = region if region is not None else store.Region() self.render( "region.html", region=region, error=False, list_route=ListRegionsHandler.ROUTE )
def setUp(self): super().setUp() self.config = config.Config('resources/test.toml') self.server = server.BackOfficeServer(self.config, port=8889) self.app = self.server.make_app() self.request = tornado.httpserver.HTTPRequest( method='GET', uri=bedcounts.ListBedCountsHandler.ROUTE, headers=None, body=None) self.request.connection = MockConnection() self.handler = bedcounts.ListBedCountsHandler(self.app, self.request) self.handler.initialize() self.admin_id = self.handler.db.add_default_admin() rid = self.handler.db.add_region(self.admin_id, store.Region(name='myregion')) self.icuid = self.handler.db.add_icu( self.admin_id, store.ICU(name='iuc1', region_id=rid))
def sync_icus(self, icus_df, force_update=False): self.prepare() # pandas sometimes maps missing values (for example in CSV files) to NA # but NA values are rejected by our SQL layer, so we replace them with None icus_df = icus_df.replace({pd.NA: None}) for _, icu in icus_df.iterrows(): icu_dict = icu.to_dict() icu_name = icu_dict["name"] region = icu_dict.pop('region', None) db_icu = self.db.get_icu_by_name(icu_name) if db_icu is not None and not force_update: continue # Maybe create region first. if region is not None: regions = {x.name: x.region_id for x in self.db.get_regions()} if region not in regions: self.db.add_region(self._default_admin, store.Region(name=region)) logging.info("Adding Region {}".format(region)) icu_dict['region_id'] = self.db.get_region_by_name( region).region_id # If an ICU exists with the same name, update: if db_icu is not None: manager = self._managers.get(db_icu.icu_id, [ self._default_admin, ])[0] logging.info(manager) self.db.update_icu(manager, db_icu.icu_id, icu_dict) logging.info("Updating ICU {}".format(icu_name)) # Or insert new ICU: else: new_icu = store.ICU(**icu_dict) icu_id = self.db.add_icu(self._default_admin, new_icu) self.db.assign_user_as_icu_manager(self._default_admin, self._default_admin, icu_id) logging.info("Adding ICU {}".format(icu_name))
def sync_icus(self, icus_df, force_update=False): self.prepare() for _, icu in icus_df.iterrows(): icu_dict = icu.to_dict() icu_name = icu_dict["name"] region = icu_dict.pop('region', None) db_icu = self._store.get_icu_by_name(icu_name) if db_icu is not None and not force_update: continue # Maybe create region first. if region is not None: regions = { x.name: x.region_id for x in self._store.get_regions() } if region not in regions: region_id = self._store.add_region( self._default_admin, store.Region(name=region)) logging.info("Adding Region {}".format(region)) icu_dict['region_id'] = self._store.get_region_by_name( region).region_id # If an ICU exists with the same name, update: if db_icu is not None: manager = self._managers.get(db_icu.icu_id, self._default_admin)[0] logging.info(manager) self._store.update_icu(manager, db_icu.icu_id, icu_dict) logging.info("Updating ICU {}".format(icu_name)) # Or insert new ICU: else: new_icu = store.ICU(**icu_dict) icu_id = self._store.add_icu(self._default_admin, new_icu) self._store.assign_user_as_icu_manager(self._default_admin, self._default_admin, icu_id) logging.info("Adding ICU {}".format(icu_name))
def migrate_icus(self): icus_df = self.old_db.get_icus() logging.info('migrating {} icus'.format(icus_df.shape[0])) regions = dict() for _, icu_row in icus_df.iterrows(): icu_dict = icu_row.to_dict() # We cannot set the id old_icu_id = icu_dict.pop('icu_id') # TODO(olivier): remove this! region_name = icu_dict.pop('region', 'Grand-Est') if region_name is not None and region_name not in regions: region = store.Region(name=region_name) region_id = self.new_db.add_region(self.admin_id, region) regions[region_name] = region_id region_id = regions.get(region_name, None) if region_id is not None: icu_dict['region_id'] = region_id else: logging.error(f"Unknown region {region_name}.") name = icu_dict.pop('icu_name', '-') icu_dict['name'] = name self.new_db.add_icu(self.admin_id, store.ICU(**icu_dict)) logging.info(f'adding icus {name}')
def add_region(self, name="region"): return self.db.add_region(self.sync._default_admin, store.Region(name=name))