Did the "custom_qualifier" patch make it into root? I can see it is used in dal/pydal/adapters/google_adapters.py but with any values passed straight through it's not easy to work out what is/isn't supported.
On Sunday, 10 March 2013 02:51:11 UTC, Christian Foster Howes wrote: > > Massimo, Scott, > > i filed https://code.google.com/p/web2py/issues/detail?id=1373 with a > patch against trunk. Looks like my first patch on this thread made it to > the latest release, but the second patch did not. If that can be applied i > think we'll be all set. > > perhaps i now need to start submitting book patches to write up these > features! > > cfh > > On Thursday, February 28, 2013 9:35:33 AM UTC-8, Scott Hunter wrote: >> >> Sorry, I thought I had -- it works like a champ. Would be nice if there >> were a way to mark the signature fields as unindexed w/o having to recreate >> them (not as simple as cut and paste, as the table def uses a bunch of >> local definitions, but not hard), but definitely workable. And lowers the >> index overhead a LOT; in my case, from 15K to <3K. >> >> - Scott >> >> On Thursday, February 28, 2013 11:12:52 AM UTC-5, howesc wrote: >>> >>> can you let me know if it works as desired now? if so, i'll submit the >>> patch to massimo for review and possible inclusion in the next release of >>> web2py. >>> >>> thanks, >>> >>> cfh >>> >>> On Tuesday, February 26, 2013 6:31:52 PM UTC-8, Scott Hunter wrote: >>>> >>>> With the latest patch, I was able to disable indices on the string >>>> fields I wanted to. Unfortunately (for me), I've just about used up my >>>> quota, so I'll have to wait until tomorrow to see how much doing so saves >>>> me. >>>> >>>> Thanks, >>>> Scott >>>> >>>> On Tuesday, February 26, 2013 8:50:29 PM UTC-5, 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? >>>>>>>>>>>>>>> >>>>>>>>>>>>>>> -- 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/d/optout.

