Re: PyGreSQL, suggestion for DB wrapper class - Mailing list pgsql-patches

From Bruce Momjian
Subject Re: PyGreSQL, suggestion for DB wrapper class
Date
Msg-id 200212110357.gBB3vS021357@candle.pha.pa.us
Whole thread Raw
In response to PyGreSQL, suggestion for DB wrapper class  ("Christoph Zwerschke" <zwerschke@zuv.uni-heidelberg.de>)
List pgsql-patches
Would you send in a patch on this?  It would be helpful.  Thanks.

---------------------------------------------------------------------------

Christoph Zwerschke wrote:
> Here is another suggested patch for PyGreSQL:
>
>
> There is an ugly little problem with the DB wrapper class.
>
> In pg.py the attributes of DB are defined as being the same as
> the attributes of the corresponding pgobject "db", using the following
>
> --------  piece of Python code in pg.py ----------
> # Create convience methods ...
> for e in ( 'query', ... , 'error', 'status', ...):
>     if not hasattr(self,e) and hasattr(self.db,e):
>         exec 'self.%s = self.db.%s' % ( e, e )
> ----------------------------------------------------
>
> The problem is that the attributes of db (which are read only)
> are not static (they are actually function calls to PostgreSQL),
> especially "status" and "error", but those attributes are copied
> and this is done only once when initializing the DB object.
>
> So, in effect, only the attribute "db.error" of a DB instance
> will be updated, but not the attribute "error". Same with "status".
>
> The following Python session demonstrates the problem:
>
> >>> from pg import DB
> >>> db=DB('template1')
> >>> db.query("this is an invalid query")
> _pg.error: ERROR:  parser: parse error at or near "this"
> >>> db.error
> ''
> >>> db.db.error
> 'ERROR:  parser: parse error at or near "this"\n'
>
>
> Suggested solution:
>
> Don't copy the (read only) attributes of the pgobject to the
> DB object, but only the methods, and all of them, like this:
>
> --------------- change in pg.py ------------------
> # Create convience methods, in a way that is still overridable.
> for e in self.db.__methods__:
>  setattr(self, e, getattr(self.db, e))
> ----------------------------------------------------
>
> Furthermore, make an addition to the documentation of the
> DB wrapper class (i.e. in pygresql-pg-db.html):
> After the sentence "All pgobject methods are included in this class also."
> add the following sentence "The pgobject read-only attributes can be
> accessed py adding the prefix 'db.' to them."
>
>
> Christoph Zwerschke
> Zentrale Univerwaltung Heidelberg
>
>
> ---------------------------(end of broadcast)---------------------------
> TIP 6: Have you searched our list archives?
>
> http://archives.postgresql.org
>

--
  Bruce Momjian                        |  http://candle.pha.pa.us
  pgman@candle.pha.pa.us               |  (610) 359-1001
  +  If your life is a hard drive,     |  13 Roberts Road
  +  Christ can be your backup.        |  Newtown Square, Pennsylvania 19073

pgsql-patches by date:

Previous
From: Bruce Momjian
Date:
Subject: Re: shows casts, conversions and schemas in psql #2
Next
From: Tom Lane
Date:
Subject: Re: [BUGS] Bug #718: request for improvement of /? to show /d+ /l+