198 |
run_command(["pg_ctl", "-m", "fast", "-D", self.dbdir, "stop"], |
run_command(["pg_ctl", "-m", "fast", "-D", self.dbdir, "stop"], |
199 |
os.path.join(self.dbdir, "pg_ctl-stop.log")) |
os.path.join(self.dbdir, "pg_ctl-stop.log")) |
200 |
|
|
201 |
def new_postgis_db(self, dbname, tables = None, reference_systems = None): |
def new_postgis_db(self, dbname, tables = None, reference_systems = None, |
202 |
|
views = None): |
203 |
"""Create and return a new PostGISDatabase object using self as server |
"""Create and return a new PostGISDatabase object using self as server |
204 |
""" |
""" |
205 |
db = PostGISDatabase(self, self.postgis_sql, dbname, tables = tables, |
db = PostGISDatabase(self, self.postgis_sql, dbname, tables = tables, |
206 |
reference_systems = reference_systems) |
reference_systems = reference_systems, |
207 |
|
views = views) |
208 |
db.initdb() |
db.initdb() |
209 |
self.known_dbs[dbname] = db |
self.known_dbs[dbname] = db |
210 |
return db |
return db |
211 |
|
|
212 |
def get_static_data_db(self, dbname, tables, reference_systems): |
def get_static_data_db(self, dbname, tables, reference_systems, views): |
213 |
"""Return a PostGISDatabase for a database with the given static data |
"""Return a PostGISDatabase for a database with the given static data |
214 |
|
|
215 |
If no databasse of the name dbname exists, create a new one via |
If no databasse of the name dbname exists, create a new one via |
227 |
""" |
""" |
228 |
db = self.known_dbs.get(dbname) |
db = self.known_dbs.get(dbname) |
229 |
if db is not None: |
if db is not None: |
230 |
if db.has_data(tables, reference_systems): |
if db.has_data(tables, reference_systems, views): |
231 |
return db |
return db |
232 |
raise ValueError("PostGISDatabase named %r doesn't have tables %r" |
raise ValueError("PostGISDatabase named %r doesn't have tables %r" |
233 |
% (dbname, tables)) |
% (dbname, tables)) |
234 |
return self.new_postgis_db(dbname, tables, reference_systems) |
return self.new_postgis_db(dbname, tables, reference_systems, views) |
235 |
|
|
236 |
def get_default_static_data_db(self): |
def get_default_static_data_db(self): |
237 |
dbname = "PostGISStaticTests" |
dbname = "PostGISStaticTests" |
268 |
("srid", 1), |
("srid", 1), |
269 |
("gid_column", "point_id")]), |
("gid_column", "point_id")]), |
270 |
] |
] |
271 |
return self.get_static_data_db(dbname, tables, srids) |
views = [("v_landmarks", "SELECT * FROM landmarks_point_id")] |
272 |
|
return self.get_static_data_db(dbname, tables, srids, views) |
273 |
|
|
274 |
def connection_params(self, user): |
def connection_params(self, user): |
275 |
"""Return the connection parameters for the given user |
"""Return the connection parameters for the given user |
348 |
"""A PostGIS database in a PostgreSQLServer""" |
"""A PostGIS database in a PostgreSQLServer""" |
349 |
|
|
350 |
def __init__(self, server, postgis_sql, dbname, tables = None, |
def __init__(self, server, postgis_sql, dbname, tables = None, |
351 |
reference_systems = ()): |
reference_systems = (), views = None): |
352 |
"""Initialize the PostGISDatabase |
"""Initialize the PostGISDatabase |
353 |
|
|
354 |
Parameters: |
Parameters: |
374 |
(srid, params) pairs where srid is the srid defined by |
(srid, params) pairs where srid is the srid defined by |
375 |
the proj4 paramter string params. The srid can be given |
the proj4 paramter string params. The srid can be given |
376 |
as an extra parameter in the tables list. |
as an extra parameter in the tables list. |
377 |
|
|
378 |
|
views -- Optional description of views. If given it should |
379 |
|
be a list of (viewname, select_stmt) pairs where |
380 |
|
viewname is the name of the view to be created and |
381 |
|
select_stmt is the select statement to use as the basis. |
382 |
|
The views will be created after the tables and may refer |
383 |
|
to them in the select_stmt. |
384 |
""" |
""" |
385 |
self.server = server |
self.server = server |
386 |
self.postgis_sql = postgis_sql |
self.postgis_sql = postgis_sql |
387 |
self.dbname = dbname |
self.dbname = dbname |
388 |
self.tables = tables |
self.tables = tables |
389 |
|
self.views = views |
390 |
if reference_systems: |
if reference_systems: |
391 |
self.reference_systems = reference_systems |
self.reference_systems = reference_systems |
392 |
else: |
else: |
442 |
tablename, shapefile, kw = unpack(info) |
tablename, shapefile, kw = unpack(info) |
443 |
upload_shapefile(shapefile, self, tablename, **kw) |
upload_shapefile(shapefile, self, tablename, **kw) |
444 |
|
|
445 |
def has_data(self, tables, reference_systems): |
if self.views is not None: |
446 |
|
for viewname, select_stmt in self.views: |
447 |
|
self.server.execute_sql(self.dbname, "admin", |
448 |
|
"CREATE VIEW %s AS %s" % (viewname, |
449 |
|
select_stmt)) |
450 |
|
self.server.execute_sql(self.dbname, "admin", |
451 |
|
"GRANT SELECT ON %s TO PUBLIC;" |
452 |
|
% viewname) |
453 |
|
|
454 |
|
def has_data(self, tables, reference_systems, views): |
455 |
return (self.tables == tables |
return (self.tables == tables |
456 |
and self.reference_systems == reference_systems) |
and self.reference_systems == reference_systems |
457 |
|
and self.views == views) |
458 |
|
|
459 |
|
|
460 |
def find_postgis_sql(): |
def find_postgis_sql(): |