Are there any specific things I need to do to enable logging under GAE? 
 This is what I did:

   - renamed the logging.example.conf file to logging.conf
   - added an entry for the test app I created above
   - removed all references to all handlers except consoleHandler

Any page I request gives me an "IOError: invalid mode: a" in the GAE 
logging console.  If I renamed the logging file back to 
logging.example.conf then I can request pages and run the app just fine. 

On Friday, November 23, 2012 7:47:26 PM UTC-6, howesc wrote:
>
> can you add some logging in and let us know if there are exceptions?
>
> about the delete limitations - web2py iterates over the set of items to 
> delete and deletes them (the version in trunk is improved over the last 
> release, but both still work).  if the set of items to delete is large the 
> query to get the items to delete may take too long and timeout.  in the 
> latest released version it actually can timeout before any rows are 
> deleted.  in the trunk version it will delete at least some rows before the 
> first timeout (in most cases), so over a series of retries all the rows 
> will be deleted.  This behavior is all to deal with how GAE implements 
> delete, so it is GAE specific.
>
> cfh
>
>
> On Wednesday, November 21, 2012 5:04:32 PM UTC-8, Julian Sanchez wrote:
>>
>> Massimo,
>>
>> I created a small test to try your function:
>>
>> db.define_table('carrier',
>>                 Field('name', type='string'),
>>                 Field('description', type='string')
>>                )
>>                
>> db.carrier.name.requires = IS_NOT_IN_DB(db(db.carrier.id > 0), '
>> carrier.name')               
>>                
>> db.define_table('manufacturer',
>>                 Field('name', type='string'),
>>                 Field('country', type='string')
>>                )
>>
>>
>> db.manufacturer.name.requires = IS_NOT_IN_DB(db(db.manufacturer.id > 0), 
>> 'manufacturer.name')                              
>>                               
>> db.define_table('phone',
>>                 Field('model', type='string'),
>>                 Field('manufacturer', db.manufacturer),
>>                 Field('carrier', db.carrier)
>>                )
>>                
>> db.phone.manufacturer.requires = IS_IN_DB(db, 'manufacturer.id', 
>> '%(name)s')
>> db.phone.carrier.requires = IS_IN_DB(db, 'carrier.id', '%(name)s')
>>
>>
>>
>>
>> def delete_linked(query, table=db.carrier):
>>     ids = [t.id in db(query).select(db.table.id)]
>>     for field in table._referenced_by:
>>          db(field._table._id.belongs(ids)).delete()
>>
>>
>> db.carrier._before_delete.append(delete_linked)
>>
>> I can create an Apple iPhone on Verizon and an Apple iPhone on Sprint. 
>>  If I run this under sqlite and I delete the carrier 'Sprint' I see one of 
>> the phones deleted as well (even without the '_before_delete' event which 
>> makes sense since that's the default behavior). 
>> However if I run this under GAE:
>>
>>    - Without the '_before_delete' event the carrier 'Sprint' is deleted 
>>    but not the phone.  This is expected since cascading doesn't work.
>>    - With the '_before_delete' event (code just as above) *nothing* gets 
>>    deleted, not even the carrier.  I can see it disappear from the list but 
>> if 
>>    I refresh the page it comes right back.  I can also verify the record is 
>>    still there by looking at the GAE admin page (Datastore viewer).  Also, 
>>    none of the phones are deleted either.
>>    
>> Am I missing something?
>>
>> Also, when you say that if I delete too many records the operation may 
>> fail midway... is that a GAE limitation?  Is the 1000 record limit I've 
>> read somewhere about?
>>
>> Thanks,
>> Julian
>>
>> On Saturday, November 17, 2012 1:06:01 PM UTC-6, Massimo Di Pierro wrote:
>>>
>>> You can try something like
>>>
>>> def delete_linked(query, table=table):
>>>     ids = [t.id in db(query).select(db.table.id)]
>>>     for field in table._referenced_by:
>>>          db(field._table._id.belongs(ids)).delete()
>>>
>>> db.table._before_delete.append(delete_linked)
>>>
>>> but you will run into consistency problems. If there are too many 
>>> records this may fail midway.
>>>
>>> On Wednesday, 14 November 2012 19:07:02 UTC-6, Julian Sanchez wrote:
>>>>
>>>> Hi Everyone!!  Long time lurker & first time posting...
>>>>
>>>> I am working on a simple application that I intend to deploy in GAE.  I 
>>>> have a few tables with fields that reference other tables which by default 
>>>> enables the ondelete=CASCADE behavior.  This works fine when I run the app 
>>>> locally using sqlite as the database.
>>>> I believe GAE doesn't support cascading deletes natively. 
>>>> I presume web2py doesn't support cascading deletes when running under 
>>>> GAE because I don't see that happening.  When I delete a row (rendered 
>>>> through SQLFORM.grid) only that row is deleted an all dependent tables 
>>>> remain untouched.
>>>>
>>>> The problem I have is that I can't find a way for me to implement the 
>>>> cascading behavior manually.  I added a 'ondelete=mydelete' event for the 
>>>> SQLFORM.grid where I do the manual delete of the dependent tables and 
>>>> commit in the database, but that doesn't seem to work either.  I searched 
>>>> through this forum but didn't find any suggestions either.  Any 
>>>> suggestions 
>>>> as to what could I do to solve this??  Do I have to stay away from 
>>>> SQLFORM.grid to avoid this problem?
>>>>
>>>> Many Thanks!!
>>>> Julian
>>>>
>>>> I am using web2py Version 2.2.1 (2012-10-21 16:57:04) stable on OS X 
>>>> Mountain Lion and GoogleAppEngineLauncher version 1.7.3 (1.7.3.333)
>>>>
>>>

-- 



Reply via email to