Thank you very much for the very detailed answer Niphlod! It's very clear now.
And big thanks to Alec too. I did look into Twisted and Tornado, and they indeed look like a god fit for me. I'm still investigating. Cheers, g. On Monday, 23 July 2012 13:24:57 UTC-7, Niphlod wrote: > > With that statement ("""if you don't understand the code, try it""") I > meant that you can always check a functionality testing it before loosing > your mind on the code. > > All the "magic" is done by: > > gluon/dal.py (validate_and_insert()) > > ... > for key,value in fields.items(): > value,error = self[key].validate(value) > if error: > response.errors[key] = error > ... > > the "validate()" method on the field calls the validators, defined into > gluon/validators.py and "associated" by table definitions (db.define_table) > or field requirements (Field('a', *requires=....*)). > > >>> print db.tests.uniquefield.requires > [<gluon.validators.IS_NOT_IN_DB object at 0x32404d0>, > <gluon.validators.IS_LENGTH > object at 0x3240490>] > > > A unique field gets a IS_IN_DB validator in order to check before > inserting the record (otherwise the commit() would raise an exception at > the database level. Unfortunately, there is no universal way to tell WHICH > field failed (and why) when you blindly insert a record, and you should > wait for the commit() to raise that exception, so you'll lose "multiple" > inserts with their properly related errors). > > Some definitions (like the "unique" one) defaults to a "hidden" requires > to your ones (as documented in the book > http://web2py.com/books/default/chapter/29/6#Record-representation). > Datetime fields, for example, are checked with a IS_DATETIME() validator, > reference > with a IS_IN_DB(), etc. etc. etc. > > This is done into the sqlhtml_validators() function in gluon/dal.py. You > can find there that a unique Field gets a IS_IN_DB() validator by default > > ... > if field.unique: > requires._and = validators.IS_NOT_IN_DB(field.db,field) > ... > > > PS: all code excerpts are from the trunk version. May be a little > different from your web2py version, but this is sort of an "introduction" > on where to find answers to your questions. > > > > On Monday, 23 July 2012 13:24:57 UTC-7, Niphlod wrote: > > With that statement ("""if you don't understand the code, try it""") I > meant that you can always check a functionality testing it before loosing > your mind on the code. > > All the "magic" is done by: > > gluon/dal.py (validate_and_insert()) > > ... > for key,value in fields.items(): > value,error = self[key].validate(value) > if error: > response.errors[key] = error > ... > > the "validate()" method on the field calls the validators, defined into > gluon/validators.py and "associated" by table definitions (db.define_table) > or field requirements (Field('a', *requires=....*)). > > >>> print db.tests.uniquefield.requires > [<gluon.validators.IS_NOT_IN_DB object at 0x32404d0>, > <gluon.validators.IS_LENGTH > object at 0x3240490>] > > > A unique field gets a IS_IN_DB validator in order to check before > inserting the record (otherwise the commit() would raise an exception at > the database level. Unfortunately, there is no universal way to tell WHICH > field failed (and why) when you blindly insert a record, and you should > wait for the commit() to raise that exception, so you'll lose "multiple" > inserts with their properly related errors). > > Some definitions (like the "unique" one) defaults to a "hidden" requires > to your ones (as documented in the book > http://web2py.com/books/default/chapter/29/6#Record-representation). > Datetime fields, for example, are checked with a IS_DATETIME() validator, > reference > with a IS_IN_DB(), etc. etc. etc. > > This is done into the sqlhtml_validators() function in gluon/dal.py. You > can find there that a unique Field gets a IS_IN_DB() validator by default > > ... > if field.unique: > requires._and = validators.IS_NOT_IN_DB(field.db,field) > ... > > > PS: all code excerpts are from the trunk version. May be a little > different from your web2py version, but this is sort of an "introduction" > on where to find answers to your questions. > > > > --