)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":6849,"name":"Roman Podoliaka","email":"roman.podoliaka@gmail.com","username":"rpodolyaka"},"change_message_id":"52461b0d427368d3821e584e675efd4dba183da4","unresolved":false,"context_lines":[{"line_number":15,"context_line":"conditions."},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"partially implement bp: use-events-for-error-wrapping"},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"Change-Id: Ib8c7f8d5c6f44c49a53dd6411adbf8aaaecb74be"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":5,"id":"baada198_b14f9291","line":18,"updated":"2014-07-18 10:15:52.000000000","message":"we could also mark this bug https://bugs.launchpad.net/oslo/+bug/1214341 as closed here","commit_id":"3aaeb334421c68e282cc69a284c45025f9d21967"},{"author":{"_account_id":11816,"name":"mike bayer","display_name":"Mike Bayer","email":"mike_mp@zzzcomputing.com","username":"zzzeek","status":"Red Hat"},"change_message_id":"9261d28ab95e535e2d8929cb1e0dd339e384b2cc","unresolved":false,"context_lines":[{"line_number":15,"context_line":"conditions."},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"partially implement bp: use-events-for-error-wrapping"},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"Change-Id: Ib8c7f8d5c6f44c49a53dd6411adbf8aaaecb74be"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":5,"id":"baada198_ce4d3574","line":18,"in_reply_to":"baada198_b14f9291","updated":"2014-07-18 16:46:01.000000000","message":"OK","commit_id":"3aaeb334421c68e282cc69a284c45025f9d21967"}],"oslo/db/sqlalchemy/exc_filters.py":[{"author":{"_account_id":6849,"name":"Roman Podoliaka","email":"roman.podoliaka@gmail.com","username":"rpodolyaka"},"change_message_id":"52461b0d427368d3821e584e675efd4dba183da4","unresolved":false,"context_lines":[{"line_number":38,"context_line":"        _registry[dbname][exception_type].extend("},{"line_number":39,"context_line":"            (fn, re.compile(reg))"},{"line_number":40,"context_line":"            for reg in"},{"line_number":41,"context_line":"            ((regex,) if not isinstance(regex, tuple) else regex)"},{"line_number":42,"context_line":"        )"},{"line_number":43,"context_line":"        return fn"},{"line_number":44,"context_line":"    return _receive"}],"source_content_type":"text/x-python","patch_set":5,"id":"baada198_fc21e19e","line":41,"updated":"2014-07-18 10:15:52.000000000","message":"it\u0027s probably worth mentioning in the docstring, that one can pass a tuple of regexps","commit_id":"3aaeb334421c68e282cc69a284c45025f9d21967"},{"author":{"_account_id":11816,"name":"mike bayer","display_name":"Mike Bayer","email":"mike_mp@zzzcomputing.com","username":"zzzeek","status":"Red Hat"},"change_message_id":"9261d28ab95e535e2d8929cb1e0dd339e384b2cc","unresolved":false,"context_lines":[{"line_number":38,"context_line":"        _registry[dbname][exception_type].extend("},{"line_number":39,"context_line":"            (fn, re.compile(reg))"},{"line_number":40,"context_line":"            for reg in"},{"line_number":41,"context_line":"            ((regex,) if not isinstance(regex, tuple) else regex)"},{"line_number":42,"context_line":"        )"},{"line_number":43,"context_line":"        return fn"},{"line_number":44,"context_line":"    return _receive"}],"source_content_type":"text/x-python","patch_set":5,"id":"baada198_2e2231a3","line":41,"in_reply_to":"baada198_fc21e19e","updated":"2014-07-18 16:46:01.000000000","message":"ok","commit_id":"3aaeb334421c68e282cc69a284c45025f9d21967"},{"author":{"_account_id":6849,"name":"Roman Podoliaka","email":"roman.podoliaka@gmail.com","username":"rpodolyaka"},"change_message_id":"52461b0d427368d3821e584e675efd4dba183da4","unresolved":false,"context_lines":[{"line_number":237,"context_line":"        for exc in ("},{"line_number":238,"context_line":"                context.sqlalchemy_exception,"},{"line_number":239,"context_line":"                context.original_exception):"},{"line_number":240,"context_line":"            for super_ in exc.__class__.__mro__:"},{"line_number":241,"context_line":"                if super_ in per_dialect:"},{"line_number":242,"context_line":"                    regexp_reg \u003d per_dialect[super_]"},{"line_number":243,"context_line":"                    for fn, regexp in regexp_reg:"}],"source_content_type":"text/x-python","patch_set":5,"id":"baada198_3c519962","line":240,"updated":"2014-07-18 10:15:52.000000000","message":"I\u0027m wondering, if this would look simpler, if we replaced __mro__  introspection with something like:\n\n   for (base_exc, reg_exps) in per_dialect.itervalues():\n       if isinstance(exc, base_exc):\n           ... go over regexps...","commit_id":"3aaeb334421c68e282cc69a284c45025f9d21967"},{"author":{"_account_id":11816,"name":"mike bayer","display_name":"Mike Bayer","email":"mike_mp@zzzcomputing.com","username":"zzzeek","status":"Red Hat"},"change_message_id":"9261d28ab95e535e2d8929cb1e0dd339e384b2cc","unresolved":false,"context_lines":[{"line_number":237,"context_line":"        for exc in ("},{"line_number":238,"context_line":"                context.sqlalchemy_exception,"},{"line_number":239,"context_line":"                context.original_exception):"},{"line_number":240,"context_line":"            for super_ in exc.__class__.__mro__:"},{"line_number":241,"context_line":"                if super_ in per_dialect:"},{"line_number":242,"context_line":"                    regexp_reg \u003d per_dialect[super_]"},{"line_number":243,"context_line":"                    for fn, regexp in regexp_reg:"}],"source_content_type":"text/x-python","patch_set":5,"id":"baada198_ee2bd97f","line":240,"in_reply_to":"baada198_3c519962","updated":"2014-07-18 16:46:01.000000000","message":"the problem with that is that it wouldn\u0027t honor more specific exception catches over less specific ones.   if one rule catches TransactionRollbackError and another OperationalError, we want the rule that matches TransactionRollbackError to be tested first.  Hence we are using __mro__ (method resolution order) here, because we do in fact want the rules applied in method resolution order.","commit_id":"3aaeb334421c68e282cc69a284c45025f9d21967"},{"author":{"_account_id":6849,"name":"Roman Podoliaka","email":"roman.podoliaka@gmail.com","username":"rpodolyaka"},"change_message_id":"49988b39a01a4af87e2c627ff858ba73ea7a470f","unresolved":false,"context_lines":[{"line_number":237,"context_line":"        for exc in ("},{"line_number":238,"context_line":"                context.sqlalchemy_exception,"},{"line_number":239,"context_line":"                context.original_exception):"},{"line_number":240,"context_line":"            for super_ in exc.__class__.__mro__:"},{"line_number":241,"context_line":"                if super_ in per_dialect:"},{"line_number":242,"context_line":"                    regexp_reg \u003d per_dialect[super_]"},{"line_number":243,"context_line":"                    for fn, regexp in regexp_reg:"}],"source_content_type":"text/x-python","patch_set":5,"id":"baada198_8e8fbdcc","line":240,"in_reply_to":"baada198_ee2bd97f","updated":"2014-07-18 17:04:32.000000000","message":"ok, got it, thanks for explanation! ;)","commit_id":"3aaeb334421c68e282cc69a284c45025f9d21967"}]}
