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.
>
>
>
>
--