My code is erroring and it looks like the culprit is the logging of an auth_event. It's happening on a lightly customized auth_user Profile update.
Traceback (most recent call last): File "/opt/web2py/gluon/restricted.py", line 204, in restricted exec ccode in environment File "/opt/web2py/applications/init/controllers/default.py" <https://pricetack.com/admin/edit/init/controllers/default.py>, line 133, in <module> File "/opt/web2py/gluon/globals.py", line 172, in <lambda> self._caller = lambda f: f() File "/opt/web2py/applications/init/controllers/default.py" <https://pricetack.com/admin/edit/init/controllers/default.py>, line 85, in user form = auth() File "/opt/web2py/gluon/tools.py", line 1159, in __call__ return getattr(self,args[0])() File "/opt/web2py/gluon/tools.py", line 2431, in profile onvalidation=onvalidation, hideerror=self.settings.hideerror): File "/opt/web2py/gluon/sqlhtml.py", line 1088, in accepts hideerror=hideerror, File "/opt/web2py/gluon/html.py", line 1807, in accepts status = self._traverse(status,hideerror) File "/opt/web2py/gluon/html.py", line 749, in _traverse newstatus = c._traverse(status,hideerror) and newstatus File "/opt/web2py/gluon/html.py", line 749, in _traverse newstatus = c._traverse(status,hideerror) and newstatus File "/opt/web2py/gluon/html.py", line 749, in _traverse newstatus = c._traverse(status,hideerror) and newstatus File "/opt/web2py/gluon/html.py", line 749, in _traverse newstatus = c._traverse(status,hideerror) and newstatus File "/opt/web2py/gluon/html.py", line 756, in _traverse newstatus = self._validate() File "/opt/web2py/gluon/html.py", line 1572, in _validate (value, errors) = validator(value) File "/opt/web2py/gluon/validators.py", line 549, in __call__ elif str(rows[0]._id) != str(self.record_id): File "/opt/web2py/gluon/dal.py", line 5459, in __getattr__ return self[key] File "/opt/web2py/gluon/dal.py", line 5450, in __getitem__ return dict.__getitem__(self, key) KeyError: '_id' Function argument list (self=<Row {'auth_event': <gluon.dal.Set object at 0x2...embership': <gluon.dal.Set object at 0x2207210>}>, key='_id') Code listing 5445. 5446. 5447. 5448. 5449. 5450. 5451. 5452. 5453. 5454. elif m: try: return dict.__getitem__(self, m.group(1))[m.group(2)] except (KeyError,TypeError): key = m.group(2) return dict.__getitem__(self, key) def __call__(self,key): return self.__getitem__(key) Variablesself<Row {'auth_event': <gluon.dal.Set object at 0x2...embership': <gluon.dal.Set object at 0x2207210>}>dict.__getitem__<method '__getitem__' of 'dict' objects>builtindict<type 'dict'>key'_id'