Including contrib in sys.path would be interesting but there could be collisions (for example, in this case, witch pg8000 will be imported: the one installed or the one in gluon.contrib?)
Tony: there are other changes needed for web2py (see the diff for web2py DAL I've attached earlier), the most important are: * missing __version__ attribute (now it is on setup.py, web2py need it to differentiate drivers capabilities) * connect doesn't suppor dsn string anymore (you need to pass keyword parameters) * set_client_encoding is not present anymore (you need to execute SQL SET ...) * server_version attribute has a leading underscore (_server_version), this is need to detect server capabilities like JSON Also, for the pg8000 driver currently in web2py, I'd applied many bugfixes reported in github / launchpad for the original project (mainly data types, unicode, importing, etc.) Also, I'd improved the psycopg2 compatibility (i.e. set_client_encoding, autocommit, set_isolation_level), implementing the simple query protocol (the one that uses psycopg2, and to avoid overhead of non-prepared statements) and two-phase commit support. The last would be important for web2py distributed_transaction_commit, but currently gluon.dal is sending raw SQL PREPARE TRANSACTION / COMMIT PREPARED / ROLLBACK PREPARED without using dbapi proposed methods TPC Connection Methods (tpc_begin, tpc_prepare, tpc_commit, tpc_rollback, tpc_recover) You can see the detail of the changes applied to the web2py contrib pg8000 here: https://code.google.com/p/pg8000/source/list https://github.com/reingart/pg8000/commits/master If this kind of changes could be accepted (psycopg2 compatibility, simple query protocol, dbapi 2.0 two-pass commit, etc.), I could help to make the pull requests (note that some could depend on each other). Sorry I couldn't keep track of pg8000 due lack of time, so I don't know what direction the project has taken. Best regards, Mariano Reingart http://www.sistemasagiles.com.ar http://reingart.blogspot.com On Mon, Mar 3, 2014 at 10:23 AM, Massimo Di Pierro < [email protected]> wrote: > I agree with Niphlod. I do not like packages that need to be installed to > work and explicit relative imports is better than absolute imports. > Yet, this is not the only package we had to tweak to include in contrib. > So this may come up again. Any objection to include contrib in sys.path? > > > On Sunday, 2 March 2014 18:29:45 UTC-6, Niphlod wrote: >> >> as long as you can use it without installing it in sys.path, then it's >> fine. If not, it can't be shipped with web2py, just supported as a module. >> I don't like packages that needs a complete install to work. It's true >> that we have venvs for quite some time now, but a module with less than 10 >> files can accomodate for relative imports quite finely without impairing >> the code-reader in everyone of us :P >> >> BTW, search for "explicit relative imports" in that doc :-P >> >> On Sunday, March 2, 2014 7:24:58 PM UTC+1, Tony Locke wrote: >>> >>> Hi, I'm a contributor to pg8000 and if there are any changes you need to >>> get pg8000 working with web2py, let me know. Looking at the absolute import >>> problem, PEP8 seems to think absolute imports are the way to go: >>> >>> http://legacy.python.org/dev/peps/pep-0008/<http://www.google.com/url?q=http%3A%2F%2Flegacy.python.org%2Fdev%2Fpeps%2Fpep-0008%2F&sa=D&sntz=1&usg=AFQjCNG8T4Krvic_V8TCmT4iog4T5e4pyg> >>> >>> (search for 'relative' in the text) but I'm open to persuasion :-) >>> >>> Cheers, >>> >>> Tony. >>> >>> On Saturday, 1 March 2014 11:18:43 UTC, Joe Barnhart wrote: >>>> >>>> Hi Mariano -- >>>> >>>> I'd like to encourage you to keep making pg8000 a viable alternative >>>> for web2py. I started with it but had to change to psycopg2 because of >>>> some issues that postgres handled better under the psy driver. But I think >>>> pypy could be the future of python and it won't support a driver like >>>> psycopg2 -- but it could support pg8000 since it is all python. >>>> >>>> It's just good to have an alternative because no driver does it all. >>>> >>>> -- Joe B. >>>> >>>> On Tuesday, February 25, 2014 6:55:17 PM UTC-8, Mariano Reingart wrote: >>>>> >>>>> Hi Horst: >>>>> >>>>> Sadly there have been a lot of changes in pg8000, so it is not >>>>> backward compatible with the current custom version in web2py. >>>>> >>>>> First, you need to delete the pg8000 folder in contrib, and put the >>>>> new pg8000 folder (the one with __init__.py) directly in the web2py top >>>>> level folder (at the same level as gluon). >>>>> Note that the new pg8000 uses absolute imports that will not work if >>>>> pg8000 is in contrib folder (or it should be added to the PYTHONPATH) >>>>> >>>>> Second, you need to apply the attached patch to gluon/dal.py to: >>>>> * change the import (and add a missing __version__ attribute) >>>>> * change connection to pass individual parameters (dsn string is not >>>>> supported anymore) >>>>> * change after_connection set_client_encoding to execute SQL >>>>> * change server_version to _server_version >>>>> >>>>> I'll propose (again) to the pg8000 group the changes I've introduced >>>>> for web2py, so the latest version could be used as a direct drop-in >>>>> replacement for psycopg2 >>>>> IIRC, at some stage the author gave me commit access, but I didn't >>>>> have time to pull my changes and missed some discussions about the project >>>>> internals. >>>>> >>>>> Best regards >>>>> >>>>> >>>>> Mariano Reingart >>>>> http://www.sistemasagiles.com.ar >>>>> http://reingart.blogspot.com >>>>> >>>>> >>>>> On Tue, Feb 25, 2014 at 5:46 PM, Horst Horst <[email protected]>wrote: >>>>> >>>>>> I've tried the latest pg8000 as a drop-in replacement, but it seems >>>>>> web2py can't import it: >>>>>> >>>>>> <type 'exceptions.RuntimeError'> Failure to connect, tried 5 times: >>>>>> Traceback (most recent call last): File "/Users/sfx/dev/mdb/web2py. >>>>>> app/Contents/Resources/gluon/dal.py", line 7766, in __init__ File >>>>>> "/Users/sfx/dev/mdb/web2py.app/Contents/Resources/gluon/dal.py", >>>>>> line 2756, in __init__ File "/Users/sfx/dev/mdb/web2py. >>>>>> app/Contents/Resources/gluon/dal.py", line 795, in find_driver >>>>>> RuntimeError: no driver available ('psycopg2', 'pg8000') >>>>>> >>>>>> I didn't step through it in the debugger, but the module's >>>>>> __init__.pyc got compiled, so I know web2py attempted an import. >>>>>> >>>>>> The latest pg8000/__init__.py contains a section which matches the >>>>>> former interface >>>>>> >>>>>> # For compatibility with 1.8 >>>>>> import pg8000 as dbapi >>>>>> DBAPI = dbapi >>>>>> pg8000_dbapi = DBAPI >>>>>> >>>>>> so I'd guess it's a minor problem, nonetheless I'm lost at this point. >>>>>> >>>>>> >>>>>> On Monday, February 24, 2014 9:32:05 PM UTC+1, Mariano Reingart wrote: >>>>>> >>>>>>> You could try to update pg8000 from the official: >>>>>>> >>>>>>> https://github.com/mfenniak/pg8000 >>>>>>> >>>>>>> Let us know if that works, so we could update the one distributed >>>>>>> with web2py >>>>>>> The one currently distributed in contrib is an older version with >>>>>>> custom patches (as it was not being mantained at the time it was >>>>>>> included >>>>>>> to web2py), but now the official site has updates that could help you in >>>>>>> this case. >>>>>>> >>>>>>> Best regards >>>>>>> >>>>>>> >>>>>>> >>>>>>> Mariano Reingart >>>>>>> http://www.sistemasagiles.com.ar >>>>>>> http://reingart.blogspot.com >>>>>>> >>>>>>> >>>>>>> On Mon, Feb 24, 2014 at 10:18 AM, Horst Horst <[email protected]>wrote: >>>>>>> >>>>>>>> I'm getting a: >>>>>>>> >>>>>>>> <class 'gluon.contrib.pg8000.errors.NotSupportedError'> type oid >>>>>>>> 114 not mapped to py type >>>>>>>> >>>>>>>> I'm wondering what's the best thing to do now? Currently I'm >>>>>>>> considering: >>>>>>>> >>>>>>>> - using TEXT instead. But my former JSON strings are then enclosed >>>>>>>> by "|" which leads to new errors >>>>>>>> >>>>>>>> - updating gp8000 (there seems to be a newer version, but the >>>>>>>> version numbering is confusing) >>>>>>>> >>>>>>>> - using psycopg2. How can I install this into an Mac OS standalone >>>>>>>> version of web2py? >>>>>>>> >>>>>>>> -- >>>>>>>> Resources: >>>>>>>> - http://web2py.com >>>>>>>> - http://web2py.com/book (Documentation) >>>>>>>> - http://github.com/web2py/web2py (Source code) >>>>>>>> - https://code.google.com/p/web2py/issues/list (Report Issues) >>>>>>>> --- >>>>>>>> You received this message because you are subscribed to the Google >>>>>>>> Groups "web2py-users" group. >>>>>>>> To unsubscribe from this group and stop receiving emails from it, >>>>>>>> send an email to [email protected]. >>>>>>>> >>>>>>>> For more options, visit https://groups.google.com/groups/opt_out. >>>>>>>> >>>>>>> >>>>>>> -- >>>>>> Resources: >>>>>> - http://web2py.com >>>>>> - http://web2py.com/book (Documentation) >>>>>> - http://github.com/web2py/web2py (Source code) >>>>>> - https://code.google.com/p/web2py/issues/list (Report Issues) >>>>>> --- >>>>>> You received this message because you are subscribed to the Google >>>>>> Groups "web2py-users" group. >>>>>> To unsubscribe from this group and stop receiving emails from it, >>>>>> send an email to [email protected]. >>>>>> For more options, visit https://groups.google.com/groups/opt_out. >>>>>> >>>>> >>>>> -- > Resources: > - http://web2py.com > - http://web2py.com/book (Documentation) > - http://github.com/web2py/web2py (Source code) > - https://code.google.com/p/web2py/issues/list (Report Issues) > --- > You received this message because you are subscribed to the Google Groups > "web2py-users" group. > To unsubscribe from this group and stop receiving emails from it, send an > email to [email protected]. > For more options, visit https://groups.google.com/groups/opt_out. > -- Resources: - http://web2py.com - http://web2py.com/book (Documentation) - http://github.com/web2py/web2py (Source code) - https://code.google.com/p/web2py/issues/list (Report Issues) --- You received this message because you are subscribed to the Google Groups "web2py-users" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. For more options, visit https://groups.google.com/groups/opt_out.

