)]}'
{"keystone/common/sql/migrate_repo/versions/006_add_policy_table.py":[{"author":{"_account_id":2218,"name":"Adam Young","email":"adam@younglogic.com","username":"ayoung"},"change_message_id":"4756127473d12461c9bed535cc7cf72272cf279f","unresolved":false,"context_lines":[{"line_number":14,"context_line":"# License for the specific language governing permissions and limitations"},{"line_number":15,"context_line":"# under the License."},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"import migrate"},{"line_number":18,"context_line":"import sqlalchemy as sql"},{"line_number":19,"context_line":""},{"line_number":20,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAMH%2F%2F4eI%3D","line":17,"updated":"2012-11-17 16:14:54.000000000","message":"Please make this 007.  006 is going in first.  And lets face it, 007 is cooler.\n\nAlso, put a  test in to test_sql_upgrade.py","commit_id":"bbd218761e841eabc7560485574aa5944741219c"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"ddbf46397eb190e1a99b25e385cc185878aa72db","unresolved":false,"context_lines":[{"line_number":14,"context_line":"# License for the specific language governing permissions and limitations"},{"line_number":15,"context_line":"# under the License."},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"import migrate"},{"line_number":18,"context_line":"import sqlalchemy as sql"},{"line_number":19,"context_line":""},{"line_number":20,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAMH%2F%2F3HI%3D","line":17,"in_reply_to":"AAAAMH%2F%2F4eI%3D","updated":"2012-11-19 19:45:04.000000000","message":"keeping an eye on it, will rebase/rename as appropriate\n\nDone","commit_id":"bbd218761e841eabc7560485574aa5944741219c"},{"author":{"_account_id":2218,"name":"Adam Young","email":"adam@younglogic.com","username":"ayoung"},"change_message_id":"4756127473d12461c9bed535cc7cf72272cf279f","unresolved":false,"context_lines":[{"line_number":33,"context_line":""},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"def downgrade(migrate_engine):"},{"line_number":36,"context_line":"    pass"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAMH%2F%2F4eE%3D","line":36,"updated":"2012-11-17 16:14:54.000000000","message":"Needs a drop table.","commit_id":"bbd218761e841eabc7560485574aa5944741219c"}],"keystone/policy/backends/sql.py":[{"author":{"_account_id":2218,"name":"Adam Young","email":"adam@younglogic.com","username":"ayoung"},"change_message_id":"4756127473d12461c9bed535cc7cf72272cf279f","unresolved":false,"context_lines":[{"line_number":65,"context_line":"        refs \u003d session.query(PolicyModel).all()"},{"line_number":66,"context_line":"        return [ref.to_dict() for ref in refs]"},{"line_number":67,"context_line":""},{"line_number":68,"context_line":"    def get_policy(self, policy_id):"},{"line_number":69,"context_line":"        session \u003d self.get_session()"},{"line_number":70,"context_line":"        try:"},{"line_number":71,"context_line":"            ref \u003d session.query(PolicyModel).filter_by(id\u003dpolicy_id).one()"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAMH%2F%2F4d8%3D","line":68,"updated":"2012-11-17 16:14:54.000000000","message":"I\u0027d like to get in the habit of having a single try/except block per function.  This one is easier to read like this:\ntry:\n    session \u003d self.get_session()\n    ref \u003d session.query(PolicyModel).filter_by(id\u003dpolicy_id).one()\n    return ref.to_dict()\nexcept sqlalchemy.orm.exc.NoResultFound:\n    raise exception.PolicyNotFound(policy_id\u003dpolicy_id)\n\n\nIt has the added benefit that, if we discover additional exceptions we need to deal with, they are only new except blocks, not re ordering the whole method.","commit_id":"bbd218761e841eabc7560485574aa5944741219c"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"4b941793ef531c604b88805000264101bc4e3ec3","unresolved":false,"context_lines":[{"line_number":65,"context_line":"        refs \u003d session.query(PolicyModel).all()"},{"line_number":66,"context_line":"        return [ref.to_dict() for ref in refs]"},{"line_number":67,"context_line":""},{"line_number":68,"context_line":"    def get_policy(self, policy_id):"},{"line_number":69,"context_line":"        session \u003d self.get_session()"},{"line_number":70,"context_line":"        try:"},{"line_number":71,"context_line":"            ref \u003d session.query(PolicyModel).filter_by(id\u003dpolicy_id).one()"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAMH%2F%2F3Tg%3D","line":68,"in_reply_to":"AAAAMH%2F%2F4d8%3D","updated":"2012-11-19 19:18:16.000000000","message":"i *passionately* disagree: that makes it VERY unclear what would be throwing the exception. Exception handling should be *as specific as possible*.\n\nAs a counterpoint / example: if something new starts throwing an exception you\u0027re already catching for a different reason, it\u0027s likely that you\u0027ll suddenly be swallowing the exception rather than handling it properly *without ever knowing it.*","commit_id":"bbd218761e841eabc7560485574aa5944741219c"},{"author":{"_account_id":2218,"name":"Adam Young","email":"adam@younglogic.com","username":"ayoung"},"change_message_id":"4756127473d12461c9bed535cc7cf72272cf279f","unresolved":false,"context_lines":[{"line_number":73,"context_line":"            raise exception.PolicyNotFound(policy_id\u003dpolicy_id)"},{"line_number":74,"context_line":"        return ref.to_dict()"},{"line_number":75,"context_line":""},{"line_number":76,"context_line":"    @handle_conflicts(type\u003d\u0027policy\u0027)"},{"line_number":77,"context_line":"    def update_policy(self, policy_id, policy):"},{"line_number":78,"context_line":"        session \u003d self.get_session()"},{"line_number":79,"context_line":"        with session.begin():"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAMH%2F%2F4d0%3D","line":76,"updated":"2012-11-17 16:14:54.000000000","message":"seems to me the self.get_session ... commit logic could almost go in a decorator.","commit_id":"bbd218761e841eabc7560485574aa5944741219c"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"4b941793ef531c604b88805000264101bc4e3ec3","unresolved":false,"context_lines":[{"line_number":73,"context_line":"            raise exception.PolicyNotFound(policy_id\u003dpolicy_id)"},{"line_number":74,"context_line":"        return ref.to_dict()"},{"line_number":75,"context_line":""},{"line_number":76,"context_line":"    @handle_conflicts(type\u003d\u0027policy\u0027)"},{"line_number":77,"context_line":"    def update_policy(self, policy_id, policy):"},{"line_number":78,"context_line":"        session \u003d self.get_session()"},{"line_number":79,"context_line":"        with session.begin():"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAMH%2F%2F3TU%3D","line":76,"in_reply_to":"AAAAMH%2F%2F4d0%3D","updated":"2012-11-19 19:18:16.000000000","message":"agree, @requires_session or something would be convenient","commit_id":"bbd218761e841eabc7560485574aa5944741219c"}],"keystone/test.py":[{"author":{"_account_id":2218,"name":"Adam Young","email":"adam@younglogic.com","username":"ayoung"},"change_message_id":"4756127473d12461c9bed535cc7cf72272cf279f","unresolved":false,"context_lines":[{"line_number":200,"context_line":"        for k, v in kw.iteritems():"},{"line_number":201,"context_line":"            CONF.set_override(k, v)"},{"line_number":202,"context_line":""},{"line_number":203,"context_line":"    def load_backends(self):"},{"line_number":204,"context_line":"        \"\"\"Hacky shortcut to load the backends for data manipulation.\"\"\""},{"line_number":205,"context_line":"        self.identity_api \u003d importutils.import_object(CONF.identity.driver)"},{"line_number":206,"context_line":"        self.token_api \u003d importutils.import_object(CONF.token.driver)"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAMH%2F%2F4dw%3D","line":203,"updated":"2012-11-17 16:14:54.000000000","message":"I wonder if we want to get away from this for the tests.  Each one adds a little bit of overhead.  Is there a way that we could use a wrapper and fetch them on demand?","commit_id":"bbd218761e841eabc7560485574aa5944741219c"}],"tests/test_keystoneclient_sql.py":[{"author":{"_account_id":6,"name":"Joe Heck","email":"heckj@mac.com","username":"heckj"},"change_message_id":"67c78a7d3b47fafb3eeb993e4862f1ff96c31df4","unresolved":false,"context_lines":[{"line_number":101,"context_line":""},{"line_number":102,"context_line":"    def test_policy_crud(self):"},{"line_number":103,"context_line":"        raise nose.exc.SkipTest("},{"line_number":104,"context_line":"            \u0027Pending https://review.openstack.org/#/c/9237/\u0027)"},{"line_number":105,"context_line":""},{"line_number":106,"context_line":"        from keystoneclient import exceptions as client_exceptions"},{"line_number":107,"context_line":"        client \u003d self.get_client(admin\u003dTrue)"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAMH%2F%2F%2BG8%3D","line":104,"updated":"2012-11-13 17:39:08.000000000","message":"this review has been abandoned... update?","commit_id":"07a6ccc82dd52fb6705ce39c378363831f17ba2e"},{"author":{"_account_id":6,"name":"Joe Heck","email":"heckj@mac.com","username":"heckj"},"change_message_id":"8f3137253ea330316bf49ec27eeedb273c9a5be2","unresolved":false,"context_lines":[{"line_number":101,"context_line":""},{"line_number":102,"context_line":"    def test_policy_crud(self):"},{"line_number":103,"context_line":"        raise nose.exc.SkipTest("},{"line_number":104,"context_line":"            \u0027Pending https://review.openstack.org/#/c/9237/\u0027)"},{"line_number":105,"context_line":""},{"line_number":106,"context_line":"        from keystoneclient import exceptions as client_exceptions"},{"line_number":107,"context_line":"        client \u003d self.get_client(admin\u003dTrue)"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAMH%2F%2F%2BGY%3D","line":104,"updated":"2012-11-13 17:40:24.000000000","message":"shouldn\u0027t this be enabled now?","commit_id":"a03b736f28409251b47ae51b1c124740a49b3e70"}]}
