Пример #1
0
def sql_preprocessor(temp_db_conn, tmp_path, monkeypatch, table_factory):
    table_factory('country_name', 'partition INT', ((0, ), (1, ), (2, )))
    cfg = Configuration(None, SRC_DIR.resolve() / 'settings')
    cfg.set_libdirs(module='.', osm2pgsql='.', php=SRC_DIR / 'lib-php',
                    sql=tmp_path, data=SRC_DIR / 'data')

    return SQLPreprocessor(temp_db_conn, cfg)
Пример #2
0
def test_get_libpq_dsn_convert_libpq(monkeypatch):
    config = Configuration(None, DEFCFG_DIR)

    monkeypatch.setenv('NOMINATIM_DATABASE_DSN',
                       'host=localhost dbname=gis password=foo')

    assert config.get_libpq_dsn() == 'host=localhost dbname=gis password=foo'
Пример #3
0
def test_get_int_empty():
    config = Configuration(None, DEFCFG_DIR)

    assert config.DATABASE_MODULE_PATH == ''

    with pytest.raises(UsageError):
        config.get_int('DATABASE_MODULE_PATH')
Пример #4
0
def def_config():
    cfg = Configuration(None, SRC_DIR.resolve() / 'settings')
    cfg.set_libdirs(module='.', osm2pgsql='.',
                    php=SRC_DIR / 'lib-php',
                    sql=SRC_DIR / 'lib-sql',
                    data=SRC_DIR / 'data')
    return cfg
Пример #5
0
def test_get_int_bad_values(monkeypatch, value):
    config = Configuration(None, DEFCFG_DIR)

    monkeypatch.setenv('NOMINATIM_FOOBAR', value)

    with pytest.raises(UsageError):
        config.get_int('FOOBAR')
Пример #6
0
def test_get_libpq_dsn_convert_php_special_chars(monkeypatch, val, expect):
    config = Configuration(None, DEFCFG_DIR)

    monkeypatch.setenv('NOMINATIM_DATABASE_DSN',
                       'pgsql:dbname=gis;password={}'.format(val))

    assert config.get_libpq_dsn() == "dbname=gis password={}".format(expect)
Пример #7
0
def test_get_import_style_intern(monkeypatch):
    config = Configuration(None, DEFCFG_DIR)

    monkeypatch.setenv('NOMINATIM_IMPORT_STYLE', 'street')

    expected = DEFCFG_DIR / 'import-street.style'

    assert config.get_import_style_file() == expected
Пример #8
0
def sql_preprocessor(temp_db_conn, tmp_path, monkeypatch, table_factory):
    monkeypatch.setenv('NOMINATIM_DATABASE_MODULE_PATH', '.')
    table_factory('country_name', 'partition INT', (0, 1, 2))
    cfg = Configuration(None, SRC_DIR.resolve() / 'settings')
    cfg.set_libdirs(module='.', osm2pgsql='.', php=SRC_DIR / 'lib-php',
                    sql=tmp_path, data=SRC_DIR / 'data')

    return SQLPreprocessor(temp_db_conn, cfg)
Пример #9
0
def def_config(src_dir):
    cfg = Configuration(None, src_dir / 'settings')
    cfg.set_libdirs(module='.',
                    osm2pgsql='.',
                    php=src_dir / 'lib-php',
                    sql=src_dir / 'lib-sql',
                    data=src_dir / 'data')
    return cfg
Пример #10
0
def sql_preprocessor_cfg(tmp_path, table_factory, temp_db_with_extensions):
    table_factory('country_name', 'partition INT', ((0, ), (1, ), (2, )))
    cfg = Configuration(None, SRC_DIR.resolve() / 'settings')
    cfg.set_libdirs(module='.',
                    osm2pgsql='.',
                    php=SRC_DIR / 'lib-php',
                    sql=tmp_path,
                    data=SRC_DIR / 'data')
    return cfg
Пример #11
0
 def get_test_config(self):
     cfg = Configuration(Path(self.website_dir.name), self.src_dir / 'settings',
                         environ=self.test_env)
     cfg.set_libdirs(module=self.build_dir / 'module',
                     osm2pgsql=self.build_dir / 'osm2pgsql' / 'osm2pgsql',
                     php=self.src_dir / 'lib-php',
                     sql=self.src_dir / 'lib-sql',
                     data=self.src_dir / 'data')
     return cfg
Пример #12
0
def project_env(src_dir, tmp_path):
    projdir = tmp_path / 'project'
    projdir.mkdir()
    cfg = Configuration(projdir, src_dir / 'settings')
    cfg.set_libdirs(module='.',
                    osm2pgsql='.',
                    php=src_dir / 'lib-php',
                    sql=src_dir / 'lib-sql',
                    data=src_dir / 'data')
    return cfg
Пример #13
0
def test_prefer_project_setting_over_default(val, tmp_path):
    envfile = tmp_path / '.env'
    envfile.write_text('NOMINATIM_DATABASE_WEBUSER={}\n'.format(val))

    config = Configuration(Path(tmp_path), DEFCFG_DIR)

    assert config.DATABASE_WEBUSER == 'apache'
Пример #14
0
def test_prefer_project_setting_over_default():
    with tempfile.TemporaryDirectory() as project_dir:
        with open(project_dir + '/.env', 'w') as envfile:
            envfile.write('NOMINATIM_DATABASE_WEBUSER=apache\n')

        config = Configuration(Path(project_dir), DEFCFG_DIR)

        assert config.DATABASE_WEBUSER == 'apache'
Пример #15
0
    def write_nominatim_config(self, dbname):
        """ Set up a custom test configuration that connects to the given
            database. This sets up the environment variables so that they can
            be picked up by dotenv and creates a project directory with the
            appropriate website scripts.
        """
        dsn = 'pgsql:dbname={}'.format(dbname)
        if self.db_host:
            dsn += ';host=' + self.db_host
        if self.db_port:
            dsn += ';port=' + self.db_port
        if self.db_user:
            dsn += ';user='******';password='******'NOMINATIM_DATABASE_DSN']:
            return  # environment already set uo

        self.test_env = dict(self.default_config)
        self.test_env['NOMINATIM_DATABASE_DSN'] = dsn
        self.test_env['NOMINATIM_FLATNODE_FILE'] = ''
        self.test_env['NOMINATIM_IMPORT_STYLE'] = 'full'
        self.test_env['NOMINATIM_USE_US_TIGER_DATA'] = 'yes'
        self.test_env['NOMINATIM_DATADIR'] = str(
            (self.src_dir / 'data').resolve())
        self.test_env['NOMINATIM_SQLDIR'] = str(
            (self.src_dir / 'lib-sql').resolve())
        self.test_env['NOMINATIM_CONFIGDIR'] = str(
            (self.src_dir / 'settings').resolve())
        self.test_env['NOMINATIM_DATABASE_MODULE_SRC_PATH'] = str(
            (self.build_dir / 'module').resolve())
        self.test_env['NOMINATIM_OSM2PGSQL_BINARY'] = str(
            (self.build_dir / 'osm2pgsql' / 'osm2pgsql').resolve())
        self.test_env['NOMINATIM_NOMINATIM_TOOL'] = str(
            (self.build_dir / 'nominatim').resolve())

        if self.server_module_path:
            self.test_env[
                'NOMINATIM_DATABASE_MODULE_PATH'] = self.server_module_path
        else:
            # avoid module being copied into the temporary environment
            self.test_env['NOMINATIM_DATABASE_MODULE_PATH'] = str(
                (self.build_dir / 'module').resolve())

        if self.website_dir is not None:
            self.website_dir.cleanup()

        self.website_dir = tempfile.TemporaryDirectory()
        cfg = Configuration(None,
                            self.src_dir / 'settings',
                            environ=self.test_env)
        refresh.setup_website(
            Path(self.website_dir.name) / 'website', self.src_dir / 'lib-php',
            cfg)
Пример #16
0
def test_prefer_os_environ_over_project_setting(monkeypatch, tmp_path):
    envfile = tmp_path / '.env'
    envfile.write_text('NOMINATIM_DATABASE_WEBUSER=apache\n')

    monkeypatch.setenv('NOMINATIM_DATABASE_WEBUSER', 'nobody')

    config = Configuration(Path(tmp_path), DEFCFG_DIR)

    assert config.DATABASE_WEBUSER == 'nobody'
Пример #17
0
def test_prefer_os_environ_over_project_setting(monkeypatch):
    with tempfile.TemporaryDirectory() as project_dir:
        with open(project_dir + '/.env', 'w') as envfile:
            envfile.write('NOMINATIM_DATABASE_WEBUSER=apache\n')

        monkeypatch.setenv('NOMINATIM_DATABASE_WEBUSER', 'nobody')

        config = Configuration(Path(project_dir), DEFCFG_DIR)

        assert config.DATABASE_WEBUSER == 'nobody'
Пример #18
0
    def run(self, **kwargs):
        """ Parse the command line arguments of the program and execute the
            appropriate subcommand.
        """
        args = NominatimArgs()
        self.parser.parse_args(args=kwargs.get('cli_args'), namespace=args)

        if args.subcommand is None:
            self.parser.print_help()
            return 1

        for arg in ('module_dir', 'osm2pgsql_path', 'phplib_dir', 'sqllib_dir',
                    'data_dir', 'config_dir', 'phpcgi_path'):
            setattr(args, arg, Path(kwargs[arg]))
        args.project_dir = Path(args.project_dir).resolve()

        if 'cli_args' not in kwargs:
            logging.basicConfig(stream=sys.stderr,
                                format='%(asctime)s: %(message)s',
                                datefmt='%Y-%m-%d %H:%M:%S',
                                level=max(4 - args.verbose, 1) * 10)

        args.config = Configuration(args.project_dir,
                                    args.config_dir,
                                    environ=kwargs.get('environ', os.environ))
        args.config.set_libdirs(module=args.module_dir,
                                osm2pgsql=args.osm2pgsql_path,
                                php=args.phplib_dir,
                                sql=args.sqllib_dir,
                                data=args.data_dir)

        log = logging.getLogger()
        log.warning('Using project directory: %s', str(args.project_dir))

        try:
            return args.command.run(args)
        except UsageError as exception:
            if log.isEnabledFor(logging.DEBUG):
                raise  # use Python's exception printing
            log.fatal('FATAL: %s', exception)

        # If we get here, then execution has failed in some way.
        return 1
Пример #19
0
    def __init__(self, config):
        self.build_dir = Path(config['BUILDDIR']).resolve()
        self.src_dir = (Path(__file__) / '..' / '..' / '..' / '..').resolve()
        self.db_host = config['DB_HOST']
        self.db_port = config['DB_PORT']
        self.db_user = config['DB_USER']
        self.db_pass = config['DB_PASS']
        self.template_db = config['TEMPLATE_DB']
        self.test_db = config['TEST_DB']
        self.api_test_db = config['API_TEST_DB']
        self.api_test_file = config['API_TEST_FILE']
        self.server_module_path = config['SERVER_MODULE_PATH']
        self.reuse_template = not config['REMOVE_TEMPLATE']
        self.keep_scenario_db = config['KEEP_TEST_DB']
        self.code_coverage_path = config['PHPCOV']
        self.code_coverage_id = 1

        self.default_config = Configuration(None, self.src_dir / 'settings').get_os_env()
        self.test_env = None
        self.template_db_done = False
        self.api_db_done = False
        self.website_dir = None
Пример #20
0
def test_get_import_style_intern(monkeypatch, value):
    config = Configuration(None, DEFCFG_DIR)

    monkeypatch.setenv('NOMINATIM_IMPORT_STYLE', value)

    assert str(config.get_import_style_file()) == value
Пример #21
0
def test_get_libpq_dsn_convert_default():
    config = Configuration(None, DEFCFG_DIR)

    assert config.get_libpq_dsn() == 'dbname=nominatim'
Пример #22
0
def def_config():
    return Configuration(None, SRC_DIR.resolve() / 'settings')
Пример #23
0
def test_no_project_dir():
    config = Configuration(None, DEFCFG_DIR)

    assert config.DATABASE_WEBUSER == 'www-data'
Пример #24
0
 def _mk_config(project_dir=None):
     return Configuration(project_dir, src_dir / 'settings')
Пример #25
0
def test_get_bool_empty():
    config = Configuration(None, DEFCFG_DIR)

    assert config.DATABASE_MODULE_PATH == ''
    assert config.get_bool('DATABASE_MODULE_PATH') == False
Пример #26
0
def test_get_os_env_add_defaults(monkeypatch):
    config = Configuration(None, DEFCFG_DIR)

    monkeypatch.delenv('NOMINATIM_DATABASE_WEBUSER', raising=False)

    assert config.get_os_env()['NOMINATIM_DATABASE_WEBUSER'] == 'www-data'
Пример #27
0
def test_get_os_env_prefer_os_environ(monkeypatch):
    config = Configuration(None, DEFCFG_DIR)

    monkeypatch.setenv('NOMINATIM_DATABASE_WEBUSER', 'nobody')

    assert config.get_os_env()['NOMINATIM_DATABASE_WEBUSER'] == 'nobody'
Пример #28
0
 def _mk_config():
     (tmp_path / 'project').mkdir()
     (tmp_path / 'config').mkdir()
     conf = Configuration(tmp_path / 'project', src_dir / 'settings')
     conf.config_dir = tmp_path / 'config'
     return conf
Пример #29
0
def test_get_bool(monkeypatch, value, result):
    config = Configuration(None, DEFCFG_DIR)

    monkeypatch.setenv('NOMINATIM_FOOBAR', value)

    assert config.get_bool('FOOBAR') == result