Consider it done.

On Thursday, February 20, 2020 at 8:02:45 PM UTC-8, Massimo Di Pierro wrote:
>
> No obvious solution yet but will prioritize this. Would you mind opening 
> an issue on github about this?
>
> On Wednesday, 19 February 2020 12:33:32 UTC-8, Carlos Hanson wrote:
>>
>> It looks like table inheritance is affected by the same issue:
>>
>>
>> monster = db.Table(db, 'monster', Field('color'), Field('size'))
>> db.define_table('thing', Field('name'), monster)
>>
>>
>> The following traceback is the same as the error using 
>> _enable_record_versioning() starting at *table = self.lazy_define_table*:
>>
>> Traceback (most recent call last):
>>   File "<stdin>", line 1, in <module>
>>   File "/home/chanson/py/py4web/apps/thing/__init__.py", line 7, in 
>> <module>
>>     from . models import db
>>   File "/home/chanson/py/py4web/apps/thing/models.py", line 9, in <module>
>>     db.define_table('thing', Field('name'), monster)
>> *  File 
>> "/home/chanson/.local/share/virtualenvs/py4web-recc_4-8/lib/python3.6/site-packages/pydal/base.py",
>>  
>> line 656, in define_table*
>> *    table = self.lazy_define_table(tablename, *fields, **kwargs)*
>> *  File 
>> "/home/chanson/.local/share/virtualenvs/py4web-recc_4-8/lib/python3.6/site-packages/pydal/base.py",
>>  
>> line 676, in lazy_define_table*
>> *    if field.requires is DEFAULT:*
>> *  File 
>> "/home/chanson/.local/share/virtualenvs/py4web-recc_4-8/lib/python3.6/site-packages/threadsafevariable/__init__.py",
>>  
>> line 16, in __get__*
>> *    return getattr(self.storage, "%s.%s" % (id(instance), id(self)))*
>> *  File "src/gevent/local.py", line 408, in 
>> gevent._local.local.__getattribute__*
>> AttributeError: 'gevent._local.local' object has no attribute 
>> '139976984026752.139976984930736'
>>
>>
>>
>> On Tuesday, February 18, 2020 at 8:07:25 PM UTC-8, Carlos Hanson wrote:
>>>
>>> Greetings,
>>>
>>> I just started using py4web, and I'm very excited to do so. 
>>>
>>> Has there been any more thought on this issue? I was partially into a 
>>> new web2py app in which I use _enable_record_versioning(), and I am 
>>> migrating it to py4web.
>>>
>>> Thanks.
>>>
>>>
>>> On Saturday, August 17, 2019 at 10:34:21 PM UTC-7, Massimo Di Pierro 
>>> wrote:
>>>>
>>>> Sorry for the late response. I just run into this myself. Do not have a 
>>>> good solution at this time, unless we make pydal aware of 
>>>> ThreadSafeVariable(s). Maybe we have to.
>>>>
>>>> On Wednesday, 31 July 2019 05:05:50 UTC-7, Manuel Vio wrote:
>>>>>
>>>>> Ok, I narrowed the problem a bit:
>>>>>
>>>>> In py4web/core.py, around line 207, there is this adjustment in order 
>>>>> to make some variables threadsafe:
>>>>>
>>>>> # make sure some variables in pydal are thread safe
>>>>> for _ in ['readable', 'writable', 'default', 'update', 'requires']:
>>>>> setattr(pydal.DAL.Field, _, threadsafevariable.ThreadSafeVariable())
>>>>>
>>>>> Turns out that PyDAL's _enable_record_versioning(), in order to create 
>>>>> the archive table, clones all original fields with their properties. Or, 
>>>>> at 
>>>>> least, it tries to: it seems that copy() fails to correctly transfer 
>>>>> threadsafevariable informations when dealing with those variables.
>>>>> I guess that when cloned field's requires attribute is accessed those 
>>>>> information are not valid anymore and py4web throws the aforementioned 
>>>>> exception.
>>>>> I was able to circumvent this error adding an explicit copy of the 
>>>>> attribute in pydal, but still I'm not sure if this could eventually lead 
>>>>> to 
>>>>> thread problems:
>>>>>
>>>>> for field in self:
>>>>> nfk = same_db or not field.type.startswith('reference')
>>>>> clone = field.clone(unique=False, type=field.type if nfk else 'bigint'
>>>>> )
>>>>> clone.requires = copy.copy(field.requires)
>>>>> clones.append(
>>>>> clone
>>>>> )
>>>>>
>>>>>
>>>>> Any thougths?
>>>>>
>>>>

-- 
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 web2py+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/web2py/af3187cb-b898-4e03-8532-c06f1d9b7148%40googlegroups.com.

Reply via email to