Changeset 833

Show
Ignore:
Timestamp:
08/11/07 14:53:01
Author:
dokai
Message:

Added more command line options to make it easier to reuse the script in
other buildouts.

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • buildout/pcl.buildout/trunk/init_postgresql.py

    r818 r833  
    1111from optparse import OptionParser 
    1212 
    13 container = os.getcwd() 
    14 PGDATA = os.path.join(container, 'var', 'postgresql') 
    15 PGROOT = os.path.join(container, 'parts', 'postgresql') 
    1613PGDBNAME = 'pcl_test' 
    17 POSTGIS = os.path.join(container, 'parts', 'postgis') 
    18 DATASET = os.path.join(container, 'parts', 'worldborders', 'world_borders.shp') 
    1914 
    20 wrapper_script = os.path.join(container, 'bin', 'pg_ctl') 
     15wrapper_script = os.path.join(os.getcwd(), 'bin', 'pg_ctl') 
    2116wrapper_script_tmpl = """\ 
    2217#!/bin/sh 
     
    2621test_env_tmpl = """\ 
    2722[test-environment] 
    28 PCLCORE_DSN = host=localhost dbname=pcl_test port=%(port)s 
     23PCLCORE_DSN = host=localhost dbname=%(dbname)s port=%(port)s 
    2924""" 
    3025 
     
    3328        raise RuntimeError('Error running command: %s' % cmd) 
    3429 
    35 def initpg(port): 
     30def initpg(port, datadir, postgresprefix, postgisprefix, worldborders): 
    3631    """Initializes a test PostgreSQL server.""" 
    3732    # Shut down the server if it is running 
    38     PIDFILE = '%s/postmaster.pid' % PGDATA 
     33    PIDFILE = '%s/postmaster.pid' % datadir 
    3934    if os.path.exists(wrapper_script) and os.path.exists(PIDFILE): 
    4035        print 'Shutting down PostgreSQL server...' 
     
    4439 
    4540    # Clean up existing parts 
    46     if os.path.exists(PGDATA): 
    47         shutil.rmtree(PGDATA
     41    if os.path.exists(datadir): 
     42        shutil.rmtree(datadir
    4843 
    49     assert not os.path.exists(PGDATA
    50     os.makedirs(PGDATA
     44    assert not os.path.exists(datadir
     45    os.makedirs(datadir
    5146 
    5247    # Initialize the database 
    53     system('%s/bin/initdb --auth=trust -D %s' % (PGROOT, PGDATA)) 
     48    system('%s/bin/initdb --auth=trust -D %s' % (postgresprefix, datadir)) 
    5449 
    5550    # Create a wrapper script for pg_ctl 
    5651    wrapper = open(wrapper_script, 'w') 
    57     wrapper.write(wrapper_script_tmpl % (PGDATA, PGROOT)) 
     52    wrapper.write(wrapper_script_tmpl % (datadir, postgresprefix)) 
    5853    wrapper.close() 
    5954    os.chmod(wrapper_script, stat.S_IRWXU) 
    6055 
    6156    # Update the port setting and start up the server 
    62     conffile = '%s/postgresql.conf' % PGDATA 
     57    conffile = '%s/postgresql.conf' % datadir 
    6358    f = open(conffile) 
    6459    conf = ('port = %s' % port).join(f.read().split('#port = 5432')) 
     
    6964 
    7065    # Convert the shapefile data to SQL insert statements 
    71     system('%s/bin/shp2pgsql -I -s 4269 %s postgis.world_borders > /tmp/wb.sql' % (POSTGIS, DATASET)) 
     66    system('%s/bin/shp2pgsql -I -s 4269 %s postgis.world_borders > /tmp/wb.sql' % (postgisprefix, worldborders)) 
    7267 
    7368    # Create the test database 
    74     system('%s/bin/createdb --port=%s %s' % (PGROOT, port, PGDBNAME)) 
    75     system('%s/bin/createlang --port=%s plpgsql %s' % (PGROOT, port, PGDBNAME)) 
    76     system('%s/bin/psql -p %s -d %s -c "CREATE SCHEMA postgis"' % (PGROOT, port, PGDBNAME)) 
    77     system('%s/bin/psql -p %s -d %s -f %s/share/lwpostgis.sql' % (PGROOT, port, PGDBNAME, POSTGIS)) 
    78     system('%s/bin/psql -p %s -d %s -f %s/share/spatial_ref_sys.sql' % (PGROOT, port, PGDBNAME, POSTGIS)) 
     69    system('%s/bin/createdb --port=%s %s' % (postgresprefix, port, PGDBNAME)) 
     70    system('%s/bin/createlang --port=%s plpgsql %s' % (postgresprefix, port, PGDBNAME)) 
     71    system('%s/bin/psql -p %s -d %s -c "CREATE SCHEMA postgis"' % (postgresprefix, port, PGDBNAME)) 
     72    system('%s/bin/psql -p %s -d %s -f %s/share/lwpostgis.sql' % (postgresprefix, port, PGDBNAME, postgisprefix)) 
     73    system('%s/bin/psql -p %s -d %s -f %s/share/spatial_ref_sys.sql' % (postgresprefix, port, PGDBNAME, postgisprefix)) 
    7974 
    8075    # Import the data 
    81     system('%s/bin/psql -p %s -d %s -f /tmp/wb.sql' % (PGROOT, port, PGDBNAME)) 
    82     system('%s/bin/psql -p %s -d %s -c "CREATE VIEW postgis.uk_borders AS SELECT * FROM postgis.world_borders WHERE fips_cntry = \'UK\'"' % (PGROOT, port, PGDBNAME)) 
    83     system('%s/bin/psql -p %s -d %s -c "INSERT INTO geometry_columns (f_table_catalog, f_table_schema, f_table_name, f_geometry_column, coord_dimension, srid, type) VALUES (\'\', \'postgis\', \'uk_borders\', \'the_geom\', 2, 4269, \'MULTIPOLYGON\')"' % (PGROOT, port, PGDBNAME)) 
    84     system('%s/bin/psql -p %s -d %s -c "CREATE TABLE postgis.us_borders AS SELECT * FROM postgis.world_borders WHERE fips_cntry = \'US\'"' % (PGROOT, port, PGDBNAME)) 
    85     system('%s/bin/psql -p %s -d %s -c "INSERT INTO geometry_columns (f_table_catalog, f_table_schema, f_table_name, f_geometry_column, coord_dimension, srid, type) VALUES (\'\', \'postgis\', \'us_borders\', \'the_geom\', 2, 4269, \'MULTIPOLYGON\')"' % (PGROOT, port, PGDBNAME)) 
     76    system('%s/bin/psql -p %s -d %s -f /tmp/wb.sql' % (postgresprefix, port, PGDBNAME)) 
     77    system('%s/bin/psql -p %s -d %s -c "CREATE VIEW postgis.uk_borders AS SELECT * FROM postgis.world_borders WHERE fips_cntry = \'UK\'"' % (postgresprefix, port, PGDBNAME)) 
     78    system('%s/bin/psql -p %s -d %s -c "INSERT INTO geometry_columns (f_table_catalog, f_table_schema, f_table_name, f_geometry_column, coord_dimension, srid, type) VALUES (\'\', \'postgis\', \'uk_borders\', \'the_geom\', 2, 4269, \'MULTIPOLYGON\')"' % (postgresprefix, port, PGDBNAME)) 
     79    system('%s/bin/psql -p %s -d %s -c "CREATE TABLE postgis.us_borders AS SELECT * FROM postgis.world_borders WHERE fips_cntry = \'US\'"' % (postgresprefix, port, PGDBNAME)) 
     80    system('%s/bin/psql -p %s -d %s -c "INSERT INTO geometry_columns (f_table_catalog, f_table_schema, f_table_name, f_geometry_column, coord_dimension, srid, type) VALUES (\'\', \'postgis\', \'us_borders\', \'the_geom\', 2, 4269, \'MULTIPOLYGON\')"' % (postgresprefix, port, PGDBNAME)) 
    8681 
    8782    os.unlink('/tmp/wb.sql') 
     
    9186        # test configuration and run the buildout again so that the 
    9287        # test runner gets updated. 
    93         open('test-environment.cfg', 'w').write(test_env_tmpl % dict(port=port)) 
     88        open('test-environment.cfg', 'w').write(test_env_tmpl % dict(port=port, dbname=PGDBNAME)) 
    9489        system('./bin/buildout') 
    9590 
     
    10095    parser.add_option('--port', dest='port', default='5432', 
    10196                      help='PostgreSQL server port number') 
     97    parser.add_option('--data-dir', dest='pgdata', default='var/postgresql', 
     98                      help='Data directory where the database files will be stored') 
     99    parser.add_option('--postgresql-prefix', dest='postgresprefix', default='parts/postgresql', 
     100                      help='PostgreSQL installation prefix') 
     101    parser.add_option('--postgis-prefix', dest='postgisprefix', default='parts/postgis', 
     102                      help='PostGIS installation prefix') 
     103    parser.add_option('--worldborders-shp', dest='worldborders', 
     104                      default='parts/worldborders/world_borders.shp', 
     105                      help='Location of the world_borders.shp file.') 
    102106 
    103107    options, args = parser.parse_args() 
    104108 
    105     initpg(port=options.port) 
     109    def p(path): 
     110        return os.path.join(os.getcwd(), path) 
     111 
     112    initpg(port=options.port, 
     113           datadir=p(options.pgdata), 
     114           postgresprefix=p(options.postgresprefix), 
     115           postgisprefix=p(options.postgisprefix), 
     116           worldborders=p(options.worldborders)) 
    106117 
    107118    print '\n\n'