/[thuban]/branches/WIP-pyshapelib-bramz/test/postgissupport.py
ViewVC logotype

Diff of /branches/WIP-pyshapelib-bramz/test/postgissupport.py

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 2096 by bh, Thu Mar 11 13:50:53 2004 UTC revision 2106 by bh, Fri Mar 12 12:59:33 2004 UTC
# Line 198  class PostgreSQLServer: Line 198  class PostgreSQLServer:
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
# Line 225  class PostgreSQLServer: Line 227  class PostgreSQLServer:
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"
# Line 266  class PostgreSQLServer: Line 268  class PostgreSQLServer:
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
# Line 345  class PostGISDatabase: Line 348  class PostGISDatabase:
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:
# Line 371  class PostGISDatabase: Line 374  class PostGISDatabase:
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:
# Line 431  class PostGISDatabase: Line 442  class PostGISDatabase:
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():

Legend:
Removed from v.2096  
changed lines
  Added in v.2106

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26