def patch()

in patches/4.0.0/main.py [0:0]


def patch(tinydb_root: Path, mongo_uri: str, mongo_database: str,
          secret_key: str, logging_filename: Path | None = None) -> None:
    if logging_filename:
        h = logging.FileHandler(logging_filename)
        h.setFormatter(logging.Formatter(LOG_FORMAT))
        _LOG.addHandler(h)
    os.environ[Env.MONGO_DATABASE.value] = mongo_database
    os.environ[Env.MONGO_URI.value] = mongo_uri
    os.environ[Env.SECRET_KEY.value] = secret_key
    os.environ[Env.MODE.value] = ServiceMode.ONPREM.value

    if not tinydb_root.is_dir() or not tinydb_root.exists():
        _LOG.error(f'{tinydb_root} must be a directory that exists')
        sys.exit(1)

    for filename in tinydb_root.iterdir():
        try:
            db_type = DBType(filename.stem)
        except ValueError:
            _LOG.warning(f'Not known db name: {filename.stem}')
            continue
        _LOG.info(f'Going to patch {filename.stem}')
        try:
            with open(filename, 'r') as fp:
                data = json.load(fp)
        except json.JSONDecodeError:
            _LOG.warning('Invalid JSON inside. Skipping')
            continue
        try:
            patch_collection(data, db_type)
        except Exception:
            _LOG.exception('Unexpected exception occurred. Ending patch')
            sys.exit(1)
        _LOG.info('Collection was patched')