[sqlalchemy] Re: Zope.sqalchemy: AttributeError: '_thread._local' object has no attribute 'value'

2020-10-25 Thread 'Jonathan Vanasco' via sqlalchemy

Your new code is exactly what I have been running on several production 
systems, so it looks good to me!

Long story short, `zope.sqlalchemy` had been using the `sqlalchemy` 
"extensions", which were deprecated in 2012 and are set to be removed (if 
they haven't been already).  see 
https://github.com/zopefoundation/zope.sqlalchemy/issues/31

The change that caused your issues was due to `zope.sqlalchemy` migrating 
from the deprecated system to the next.  There wasn't a clean way of 
swapping this out, so their developers opted for a tiny breaking change.  
For most people, that means changing two lines of code; in some complex 
projects, 4 lines of code might need to be changed!

Unfortunately, someone posted that answer on StackOverflow that is 
incorrect and misdirected you – it's not a simple change in class names.  
I'm sorry that tripped you up.

On Sunday, October 25, 2020 at 9:23:36 AM UTC-4 dever...@gmail.com wrote:

> Thanks for the pointer to the source. My confusion came from the Zope docs 
> (and other sources e.g. this answer: 
> https://stackoverflow.com/a/58567212/123033 ) that seemed to suggest 
> *EITHER*
> from zope.sqlalchemy import ZopeTransactionExtension, register
> *OR*
> changing all instances of ZopeTransactionExtension to 
> ZopeTransactionEvents
> and using:
> from zope.sqlalchemy import register
> then
> DBSession = scoped_session(sessionmaker(**options))
> but the below - i.e. no parameters to sessionmaker() - got past the 
> errors in the end (so far so good, anyway):
>
> from zope.sqlalchemy import register
> # . . .
> DBSession = scoped_session(sessionmaker())
> register(DBSession)
>
> Feel free to point out anything glaringly obvious. I've not been in this 
> territory before, and it's a codebase in which I'm still finding my way 
> (written by a codev) and yes, I might not spot what's taken for granted by 
> anyone more familiar with SQLAlchemy etc. - I've often been in the reverse 
> situation!
>
> On Saturday, October 24, 2020 at 6:55:42 PM UTC+1 Jonathan Vanasco wrote:
>
>> The extract code you posted is incorrect.
>>
>> You were given a step towards the right answer - you MUST invoke 
>> `register`.
>>
>> I say a step, because there may be other factors going on.
>>
>> However as you can see from the source code (
>> https://github.com/zopefoundation/zope.sqlalchemy/blob/master/src/zope/sqlalchemy/datamanager.py#L293-L329),
>>  
>> the call to `register` is required because it invokes the 
>> ZopeTransactionExtenstion AND sets up the transaction events.
>>
>> On Saturday, October 24, 2020 at 10:47:27 AM UTC-4 dever...@gmail.com 
>> wrote:
>>
>>> I'm updating a working Pyramid app that uses sqlalchemy and have some 
>>> success by replacing ZopeTransactionExtension with ZopeTransactionEvents.
>>>
>>> On running initialise with my local .ini file, All goes well, the 
>>> database tables (MariaDB) are all written, but these errors occur:
>>>
>>> Traceback (most recent call last): 
>>> "[...]sqlalchemy/util/_collections.py", line 1055, in __call__ return 
>>> self.registry.value AttributeError: '_thread._local' object has no 
>>> attribute 'value' During handling of the above exception, another exception 
>>> occurred: 
>>>
>>> [cruft omitted]
>>> "[...]sqlalchemy/orm/deprecated_interfaces.py", line 367, in 
>>> _adapt_listener ls_meth = getattr(listener, meth) AttributeError: 
>>> 'ZopeTransactionEvents' object has no attribute 'after_commit'
>>>
>>> For more code details, I've posted extracts from the models and main 
>>> app code on StackOverflow , 
>>> but with no joy so far.
>>>
>>

-- 
SQLAlchemy - 
The Python SQL Toolkit and Object Relational Mapper

http://www.sqlalchemy.org/

To post example code, please provide an MCVE: Minimal, Complete, and Verifiable 
Example.  See  http://stackoverflow.com/help/mcve for a full description.
--- 
You received this message because you are subscribed to the Google Groups 
"sqlalchemy" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to sqlalchemy+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/sqlalchemy/10c30fed-2898-4072-949d-a7011b454081n%40googlegroups.com.


[sqlalchemy] Re: Zope.sqalchemy: AttributeError: '_thread._local' object has no attribute 'value'

2020-10-25 Thread Dave Everitt
Thanks for the pointer to the source. My confusion came from the Zope docs 
(and other sources e.g. this answer: 
https://stackoverflow.com/a/58567212/123033 ) that seemed to suggest 
*EITHER*
from zope.sqlalchemy import ZopeTransactionExtension, register
*OR*
changing all instances of ZopeTransactionExtension to ZopeTransactionEvents
and using:
from zope.sqlalchemy import register
then
DBSession = scoped_session(sessionmaker(**options))
but the below - i.e. no parameters to sessionmaker() - got past the errors 
in the end (so far so good, anyway):

from zope.sqlalchemy import register
# . . .
DBSession = scoped_session(sessionmaker())
register(DBSession)

Feel free to point out anything glaringly obvious. I've not been in this 
territory before, and it's a codebase in which I'm still finding my way 
(written by a codev) and yes, I might not spot what's taken for granted by 
anyone more familiar with SQLAlchemy etc. - I've often been in the reverse 
situation!

On Saturday, October 24, 2020 at 6:55:42 PM UTC+1 Jonathan Vanasco wrote:

> The extract code you posted is incorrect.
>
> You were given a step towards the right answer - you MUST invoke 
> `register`.
>
> I say a step, because there may be other factors going on.
>
> However as you can see from the source code (
> https://github.com/zopefoundation/zope.sqlalchemy/blob/master/src/zope/sqlalchemy/datamanager.py#L293-L329),
>  
> the call to `register` is required because it invokes the 
> ZopeTransactionExtenstion AND sets up the transaction events.
>
> On Saturday, October 24, 2020 at 10:47:27 AM UTC-4 dever...@gmail.com 
> wrote:
>
>> I'm updating a working Pyramid app that uses sqlalchemy and have some 
>> success by replacing ZopeTransactionExtension with ZopeTransactionEvents.
>>
>> On running initialise with my local .ini file, All goes well, the 
>> database tables (MariaDB) are all written, but these errors occur:
>>
>> Traceback (most recent call last): 
>> "[...]sqlalchemy/util/_collections.py", line 1055, in __call__ return 
>> self.registry.value AttributeError: '_thread._local' object has no 
>> attribute 'value' During handling of the above exception, another exception 
>> occurred: 
>>
>> [cruft omitted]
>> "[...]sqlalchemy/orm/deprecated_interfaces.py", line 367, in 
>> _adapt_listener ls_meth = getattr(listener, meth) AttributeError: 
>> 'ZopeTransactionEvents' object has no attribute 'after_commit'
>>
>> For more code details, I've posted extracts from the models and main app 
>> code on StackOverflow , but 
>> with no joy so far.
>>
>

-- 
SQLAlchemy - 
The Python SQL Toolkit and Object Relational Mapper

http://www.sqlalchemy.org/

To post example code, please provide an MCVE: Minimal, Complete, and Verifiable 
Example.  See  http://stackoverflow.com/help/mcve for a full description.
--- 
You received this message because you are subscribed to the Google Groups 
"sqlalchemy" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to sqlalchemy+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/sqlalchemy/f9e9fe92-7f61-43b8-8473-78cb204a74bcn%40googlegroups.com.


[sqlalchemy] Re: Zope.sqalchemy: AttributeError: '_thread._local' object has no attribute 'value'

2020-10-24 Thread Jonathan Vanasco
The extract code you posted is incorrect.

You were given a step towards the right answer - you MUST invoke `register`.

I say a step, because there may be other factors going on.

However as you can see from the source code 
(https://github.com/zopefoundation/zope.sqlalchemy/blob/master/src/zope/sqlalchemy/datamanager.py#L293-L329),
 
the call to `register` is required because it invokes the 
ZopeTransactionExtenstion AND sets up the transaction events.

On Saturday, October 24, 2020 at 10:47:27 AM UTC-4 dever...@gmail.com wrote:

> I'm updating a working Pyramid app that uses sqlalchemy and have some 
> success by replacing ZopeTransactionExtension with ZopeTransactionEvents.
>
> On running initialise with my local .ini file, All goes well, the database 
> tables (MariaDB) are all written, but these errors occur:
>
> Traceback (most recent call last): "[...]sqlalchemy/util/_collections.py", 
> line 1055, in __call__ return self.registry.value AttributeError: 
> '_thread._local' object has no attribute 'value' During handling of the 
> above exception, another exception occurred: 
>
> [cruft omitted]
> "[...]sqlalchemy/orm/deprecated_interfaces.py", line 367, in 
> _adapt_listener ls_meth = getattr(listener, meth) AttributeError: 
> 'ZopeTransactionEvents' object has no attribute 'after_commit'
>
> For more code details, I've posted extracts from the models and main app 
> code on StackOverflow , but 
> with no joy so far.
>

-- 
SQLAlchemy - 
The Python SQL Toolkit and Object Relational Mapper

http://www.sqlalchemy.org/

To post example code, please provide an MCVE: Minimal, Complete, and Verifiable 
Example.  See  http://stackoverflow.com/help/mcve for a full description.
--- 
You received this message because you are subscribed to the Google Groups 
"sqlalchemy" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to sqlalchemy+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/sqlalchemy/1de6b5a3-4ca0-489a-abf6-4f4c582d6cc9n%40googlegroups.com.