Пример #1
0
  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))
Пример #2
0
  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)
Пример #3
0
    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)
Пример #4
0
 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
   )
Пример #5
0
    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))
Пример #6
0
    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))
Пример #7
0
    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))
Пример #8
0
    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}')
Пример #9
0
 def add_region(self, name="region"):
     return self.db.add_region(self.sync._default_admin,
                               store.Region(name=name))