oh, and about the "web2py-supplied fields", those come from auth.signature, 
which is just a table that you "inherit" from.   from gluon/tools.py you 
see the auth.signature definition as:

        self.signature = db.Table(
            self.db, 'auth_signature',
            Field('is_active', 'boolean',
                  default=True,
                  readable=False, writable=False,
                  label=T('Is Active')),
            Field('created_on', 'datetime',
                  default=request.now,
                  writable=False, readable=False,
                  label=T('Created On')),
            Field('created_by',
                  reference_user,
                  default=lazy_user, represent=represent,
                  writable=False, readable=False,
                  label=T('Created By'), ondelete=ondelete),
            Field('modified_on', 'datetime',
                  update=request.now, default=request.now,
                  writable=False, readable=False,
                  label=T('Modified On')),
            Field('modified_by',
                  reference_user, represent=represent,
                  default=lazy_user, update=lazy_user,
                  writable=False, readable=False,
                  label=T('Modified By'),  ondelete=ondelete))

feel free to make a table called, say, "my_signature" with the field 
definitions that you want, and replace "auth.signature" in your table 
definition with "my_signature"

cfh

On Tuesday, February 26, 2013 5:50:29 PM UTC-8, howesc wrote:
>
> here's an updated DAL patch to try.....
>
> thanks for trudging through this with us!
>
> cfh
>
> On Tuesday, February 26, 2013 3:36:30 PM UTC-8, Scott Hunter wrote:
>>
>> I'm working from Version 2.3.2 (2012-12-17 15:03:30) stable
>>
>> Here's the table in question (I've commented-out the custom_qualifier for 
>> the string fields):
>>
>> db.define_table('t_run',
>>     Field('f_trial', type='reference t_trial',
>>           label=T('Trial')),
>>     Field('f_when', type='date',
>>           label=T('When')),
>>     Field('f_dog', type='reference t_dog',
>>           label=T('Dog')),
>>     Field('f_name', type='string',#custom_qualifier={'indexed':False},
>>           label=T('Name')),
>>     Field('f_breed', type='string',#custom_qualifier={'indexed':False},
>>           label=T('Breed')),
>>     Field('f_jump_height', type='integer',custom_qualifier={'indexed':
>> False},
>>           label=T('Jump Height')),
>>     Field('f_level', type='string',#custom_qualifier={'indexed':False},
>>           label=T('Level')),
>>     Field('f_class', type='string',#custom_qualifier={'indexed':False},
>>           label=T('Class')),
>>     Field('f_pref', type='boolean',custom_qualifier={'indexed':False},
>>           label=T('Preferred')),
>>     Field('f_armband', type='string',#custom_qualifier={'indexed':False},
>>           label=T('Armband')),
>>     Field('f_yards', type='integer',custom_qualifier={'indexed':False},
>>           label=T('Yards')),
>>     Field('f_sct', type='integer',custom_qualifier={'indexed':False},
>>           label=T('SCT')),
>>     Field('f_judge', type='string',#custom_qualifier={'indexed':False},
>>           label=T('Judge')),
>>     Field('f_score', type='integer',custom_qualifier={'indexed':False},
>>           label=T('Score')),
>>     Field('f_time', type='double',custom_qualifier={'indexed':False},
>>           label=T('Time')),
>>     Field('f_faults', type='string',#custom_qualifier={'indexed':False},
>>           label=T('Faults')),
>>     Field('f_handler', type='string',#custom_qualifier={'indexed':False},
>>           label=T('Handler')),
>>     Field('f_order', type='integer',
>>           label=T('Order')),
>>     auth.signature,
>>     format='%(f_key)s',
>>     migrate=settings.migrate)
>>
>>
>> P.S. Turning off the indexes DOES make a difference; with the changes 
>> above, instead of using up over 30% of my quota, I'm "only" using 23%.  If 
>> I can get the strings unindexed, and take out the web2py-supplied fields 
>> (created_by & _on, modified_by & _on, and maybe is_active), that should get 
>> it down to something manageable.  (Not clear on how to handle the 
>> web2py-supplied fields, as I don't know what parameters were using in 
>> making them, making it difficult to know just how to "supply my own 
>> definitions".)
>>
>> On Tuesday, February 26, 2013 6:24:21 PM UTC-5, howesc wrote:
>>>
>>> your line numbers are off from mine so i'm having trouble making sense 
>>> of this. :(
>>>
>>> can you send your model definition so i can see what you are working 
>>> with?  i think then i can line it up with the dal version i have here 
>>> (which was trunk from HG as of saturday AM PST)
>>>
>>> cfh
>>>
>>> On Tuesday, February 26, 2013 3:18:13 PM UTC-8, Scott Hunter wrote:
>>>>
>>>> Sorry about that.  I've fixed it, and now I get the following:
>>>>
>>>> In FILE: /base/data/home/apps/s~sbhweb2py/1.365574604253984974/
>>>> applications/ppt_demo/models/db_wizard.py
>>>>
>>>>
>>>> Traceback (most recent call last):
>>>>   File 
>>>> "/base/data/home/apps/s~sbhweb2py/1.365574604253984974/gluon/restricted.py"
>>>> , line 212, in restricted
>>>>     exec ccode in environment
>>>>   File 
>>>> "/base/data/home/apps/s~sbhweb2py/1.365574604253984974/applications/ppt_demo/models/db_wizard.py"
>>>> , line 198, in <module>
>>>>     migrate=settings.migrate)
>>>>   File 
>>>> "/base/data/home/apps/s~sbhweb2py/1.365574604253984974/gluon/dal.py",line 
>>>> 7189, in define_table
>>>>     table = self.lazy_define_table(tablename,*fields,**args)
>>>>   File 
>>>> "/base/data/home/apps/s~sbhweb2py/1.365574604253984974/gluon/dal.py",line 
>>>> 7225, in lazy_define_table
>>>>     polymodel=polymodel)
>>>>   File 
>>>> "/base/data/home/apps/s~sbhweb2py/1.365574604253984974/gluon/dal.py",line 
>>>> 4368, in create_table
>>>>     ftype = self.types[field_type](**attr)
>>>> TypeError: <lambda>() takes no arguments (1 given)
>>>>
>>>>
>>>> This only happens if one of the fields in question is a string; I get 
>>>> no error when the unindexed fields are all integer, boolean or double.
>>>>
>>>> - Scott
>>>>
>>>>
>>>> On Tuesday, February 26, 2013 1:04:12 AM UTC-5, howesc wrote:
>>>>>
>>>>> it looks like you have a typo.... "custom_qualifer" vs 
>>>>> "custom_qualifier"
>>>>>
>>>>> On Monday, February 25, 2013 6:44:14 PM UTC-8, Scott Hunter wrote:
>>>>>>
>>>>>> I applied the patch, and added custom_qualifiers like so:
>>>>>>
>>>>>>     Field('f_name', type='string',custom_qualifer={'indexed':False},
>>>>>>           label=T('Name')),
>>>>>>
>>>>>>
>>>>>>
>>>>>> and this is the error I got:
>>>>>>
>>>>>> In FILE: /base/data/home/apps/s~sbhweb2py/1.365567821359373728/
>>>>>> applications/ppt_demo/models/db_wizard.py
>>>>>>
>>>>>>
>>>>>> Traceback (most recent call last):
>>>>>>   File 
>>>>>> "/base/data/home/apps/s~sbhweb2py/1.365567821359373728/gluon/restricted.py"
>>>>>> , line 212, in restricted
>>>>>>     exec ccode in environment
>>>>>>   File 
>>>>>> "/base/data/home/apps/s~sbhweb2py/1.365567821359373728/applications/ppt_demo/models/db_wizard.py"
>>>>>> , line 165, in <module>
>>>>>>     label=T('Name')),
>>>>>> TypeError: __init__() got an unexpected keyword argument 
>>>>>> 'custom_qualifer'
>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>> On Saturday, February 23, 2013 12:30:48 PM UTC-5, howesc wrote:
>>>>>>>
>>>>>>> Scott,
>>>>>>>
>>>>>>> this is *completely* untested, but here's a proposal:
>>>>>>>  - use the (undocumented) field.custom_qualifier property in GAE 
>>>>>>> field definitions
>>>>>>>  - if you want a field to be unindexed set 
>>>>>>> custom_qualifier={'indexed':False}
>>>>>>>  - for "properties that don't get listed explicitly"....override 
>>>>>>> those default properties with what you want (there are a few techniques 
>>>>>>> for 
>>>>>>> not explicitly listing fields, depending on which technique you are 
>>>>>>> using 
>>>>>>> the answer here is different.
>>>>>>>
>>>>>>> this patch against HG trunk this AM might work (i say might cause i 
>>>>>>> have not tested it).  are you willing to experiment with it and let us 
>>>>>>> know?
>>>>>>>
>>>>>>> thanks,
>>>>>>>
>>>>>>> christian
>>>>>>>
>>>>>>> On Friday, February 22, 2013 3:53:33 PM UTC-8, Scott Hunter wrote:
>>>>>>>>
>>>>>>>> If I had to guess, I'd say a patch is needed in the loop over the 
>>>>>>>> fields in create_table, that would add a new entry to the dict for the 
>>>>>>>> field definition based on a new attribute (which would be ignored for 
>>>>>>>> anything other than Google's Datastore) which gets added to 
>>>>>>>> sql_fields; 
>>>>>>>> then migrate_table, which seems to build the table building/altering 
>>>>>>>> commands would need to be made to recognize the new entry & add the 
>>>>>>>> disable 
>>>>>>>> index command.  There's not a lot of comments in the code, and I'd be 
>>>>>>>> afraid to break something, but might give it a try.
>>>>>>>>
>>>>>>>> - Scott
>>>>>>>>
>>>>>>>> P.S. Not sure of the best way to handle this (what's describe above 
>>>>>>>> wouldn't handle it), but it would be nice to be able to turn off the 
>>>>>>>> indexes for the fields that don't get listed explicitly in  models.db 
>>>>>>>> (things like created by & when, modified by & when).
>>>>>>>>
>>>>>>>> On Friday, February 22, 2013 6:14:28 PM UTC-5, howesc wrote:
>>>>>>>>>
>>>>>>>>> thanks for the link.  i'll try and take a look this weekend and 
>>>>>>>>> see if there is a place for that in the DAL  (feel free to open 
>>>>>>>>> gluon/dal.py yourself too).
>>>>>>>>>
>>>>>>>>> yup, i'm paying more for writes right now then i am for instance 
>>>>>>>>> hours per day on my largest paid application. :)
>>>>>>>>>
>>>>>>>>> cfh
>>>>>>>>>
>>>>>>>>> On Thursday, February 21, 2013 5:59:06 PM UTC-8, Scott Hunter 
>>>>>>>>> wrote:
>>>>>>>>>>
>>>>>>>>>> According to 
>>>>>>>>>> https://developers.google.com/appengine/docs/python/datastore/indexes#Unindexed_Properties,
>>>>>>>>>>  
>>>>>>>>>> "You declare a property unindexed by setting indexed=False in the 
>>>>>>>>>> property 
>>>>>>>>>> constructor".
>>>>>>>>>>
>>>>>>>>>> One incurs the cost of a write (or 2?) for every property of a 
>>>>>>>>>> record that gets written; so, for a table with about 25 fields (once 
>>>>>>>>>> you 
>>>>>>>>>> include all of the ones web2py adds), inserting 300 records incurs 
>>>>>>>>>> the cost 
>>>>>>>>>> of 14K+ writes; as the free account has a limit of 50K writes per 
>>>>>>>>>> day, that 
>>>>>>>>>> is rather limiting.  It is easy to turn such indicies back on, but 
>>>>>>>>>> you have 
>>>>>>>>>> to re-write every record in order to repopulate them.
>>>>>>>>>>
>>>>>>>>>> - Scott
>>>>>>>>>>
>>>>>>>>>> On Thursday, February 21, 2013 4:51:59 PM UTC-5, howesc wrote:
>>>>>>>>>>>
>>>>>>>>>>> i'm being lazy here....do you have the instructions (or link to 
>>>>>>>>>>> instructions) from GAE for disabling indexes?  i don't have it 
>>>>>>>>>>> handy right 
>>>>>>>>>>> now....
>>>>>>>>>>>
>>>>>>>>>>> we can check if the DAL has a secret way to handle it, and/or 
>>>>>>>>>>> create a patch to allow it.
>>>>>>>>>>>
>>>>>>>>>>> may i ask what advantage you are hoping to achieve by skipping 
>>>>>>>>>>> those indexes?  i've left them on for fear of making a bad choice 
>>>>>>>>>>> that i 
>>>>>>>>>>> can't revert.
>>>>>>>>>>>
>>>>>>>>>>> christian
>>>>>>>>>>>
>>>>>>>>>>> On Thursday, February 21, 2013 5:56:07 AM UTC-8, Scott Hunter 
>>>>>>>>>>> wrote:
>>>>>>>>>>>>
>>>>>>>>>>>> As I understand it, the GAE datastore will automatically create 
>>>>>>>>>>>> an index for every field of every table (to facilitate queries 
>>>>>>>>>>>> using single 
>>>>>>>>>>>> fields); those requiring multiple fields also get generated, but 
>>>>>>>>>>>> will get 
>>>>>>>>>>>> added to index.yaml by the SDK when tested locally.  Since these 
>>>>>>>>>>>> are 
>>>>>>>>>>>> created outside of the DAL, I wouldn't expect to be able to remove 
>>>>>>>>>>>> them 
>>>>>>>>>>>> using it.  I also understand that there is a way, with the GAE 
>>>>>>>>>>>> SDK, to 
>>>>>>>>>>>> disable the index for any given field (by a parameter in the field 
>>>>>>>>>>>> definition); is there any way to accomplish this through the DAL, 
>>>>>>>>>>>> and if 
>>>>>>>>>>>> so, what is it?
>>>>>>>>>>>
>>>>>>>>>>>

-- 

--- 
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.
For more options, visit https://groups.google.com/groups/opt_out.


Reply via email to