)]}'
{"glance/api/v2/images.py":[{"author":{"_account_id":616,"name":"Mark Washenberger","email":"mark.washenberger@markwash.net","username":"markwash"},"change_message_id":"2fe26c6c253fc0bf586f5d8db182acc426c03f59","unresolved":false,"context_lines":[{"line_number":61,"context_line":"        responsible for in the image get calls."},{"line_number":62,"context_line":"        \"\"\""},{"line_number":63,"context_line":"        properties \u003d [(p[\u0027name\u0027], p[\u0027value\u0027])"},{"line_number":64,"context_line":"                      for p in image[\u0027properties\u0027] if not p[\u0027deleted\u0027]]"},{"line_number":65,"context_line":"        image[\u0027properties\u0027] \u003d dict(properties)"},{"line_number":66,"context_line":"        return image"},{"line_number":67,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAALH%2F%2Fk%2Bw%3D","line":64,"updated":"2012-08-29 21:54:41.000000000","message":"I wanted to pull this out into a dependent branch, but am not sure how to test it without the ability to delete images. Currently the simple db api doesn\u0027t keep deleted properties around.","commit_id":"76843f3c22adf2b80901dcde4e13a0ac9ec10a00"},{"author":{"_account_id":1132,"name":"Brian Waldon","email":"brian@waldon.cc","username":"bcwaldon"},"change_message_id":"92832aa2777a5fb552f54de8705c872218826488","unresolved":false,"context_lines":[{"line_number":61,"context_line":"        responsible for in the image get calls."},{"line_number":62,"context_line":"        \"\"\""},{"line_number":63,"context_line":"        properties \u003d [(p[\u0027name\u0027], p[\u0027value\u0027])"},{"line_number":64,"context_line":"                      for p in image[\u0027properties\u0027] if not p[\u0027deleted\u0027]]"},{"line_number":65,"context_line":"        image[\u0027properties\u0027] \u003d dict(properties)"},{"line_number":66,"context_line":"        return image"},{"line_number":67,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAALH%2F%2Fk8Y%3D","line":64,"in_reply_to":"AAAALH%2F%2Fk%2Bw%3D","updated":"2012-08-29 23:27:12.000000000","message":"I would like to see it in another patch for sure. Why don\u0027t we have the \u0027ability to delete images\u0027?","commit_id":"76843f3c22adf2b80901dcde4e13a0ac9ec10a00"},{"author":{"_account_id":616,"name":"Mark Washenberger","email":"mark.washenberger@markwash.net","username":"markwash"},"change_message_id":"402b63a6d700506686885c42e689fd9c40292942","unresolved":false,"context_lines":[{"line_number":61,"context_line":"        responsible for in the image get calls."},{"line_number":62,"context_line":"        \"\"\""},{"line_number":63,"context_line":"        properties \u003d [(p[\u0027name\u0027], p[\u0027value\u0027])"},{"line_number":64,"context_line":"                      for p in image[\u0027properties\u0027] if not p[\u0027deleted\u0027]]"},{"line_number":65,"context_line":"        image[\u0027properties\u0027] \u003d dict(properties)"},{"line_number":66,"context_line":"        return image"},{"line_number":67,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAALH%2F%2FiwA%3D","line":64,"in_reply_to":"AAAALH%2F%2Fk8Y%3D","updated":"2012-09-01 06:51:58.000000000","message":"Done.","commit_id":"76843f3c22adf2b80901dcde4e13a0ac9ec10a00"},{"author":{"_account_id":1132,"name":"Brian Waldon","email":"brian@waldon.cc","username":"bcwaldon"},"change_message_id":"92832aa2777a5fb552f54de8705c872218826488","unresolved":false,"context_lines":[{"line_number":175,"context_line":""},{"line_number":176,"context_line":"        return image"},{"line_number":177,"context_line":""},{"line_number":178,"context_line":"    def _extract_updates(self, req, image, changes):"},{"line_number":179,"context_line":"        updates \u003d {}"},{"line_number":180,"context_line":"        property_updates \u003d image[\u0027properties\u0027]"},{"line_number":181,"context_line":"        for change in changes:"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAALH%2F%2Fk8E%3D","line":178,"updated":"2012-08-29 23:27:12.000000000","message":"Can you document these methods?","commit_id":"76843f3c22adf2b80901dcde4e13a0ac9ec10a00"},{"author":{"_account_id":616,"name":"Mark Washenberger","email":"mark.washenberger@markwash.net","username":"markwash"},"change_message_id":"402b63a6d700506686885c42e689fd9c40292942","unresolved":false,"context_lines":[{"line_number":175,"context_line":""},{"line_number":176,"context_line":"        return image"},{"line_number":177,"context_line":""},{"line_number":178,"context_line":"    def _extract_updates(self, req, image, changes):"},{"line_number":179,"context_line":"        updates \u003d {}"},{"line_number":180,"context_line":"        property_updates \u003d image[\u0027properties\u0027]"},{"line_number":181,"context_line":"        for change in changes:"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAALH%2F%2Fiv8%3D","line":178,"in_reply_to":"AAAALH%2F%2Fk8E%3D","updated":"2012-09-01 06:51:58.000000000","message":"Done","commit_id":"76843f3c22adf2b80901dcde4e13a0ac9ec10a00"},{"author":{"_account_id":1132,"name":"Brian Waldon","email":"brian@waldon.cc","username":"bcwaldon"},"change_message_id":"92832aa2777a5fb552f54de8705c872218826488","unresolved":false,"context_lines":[{"line_number":181,"context_line":"        for change in changes:"},{"line_number":182,"context_line":"            path \u003d change[\u0027path\u0027]"},{"line_number":183,"context_line":"            if len(path) \u003d\u003d 1:"},{"line_number":184,"context_line":"                assert change[\u0027op\u0027] \u003d\u003d \u0027replace\u0027"},{"line_number":185,"context_line":"                key \u003d change[\u0027path\u0027][0]"},{"line_number":186,"context_line":"                if key \u003d\u003d \u0027is_public\u0027 and change[\u0027value\u0027]:"},{"line_number":187,"context_line":"                    self._enforce(req, \u0027publicize_image\u0027)"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAALH%2F%2Fk8A%3D","line":184,"updated":"2012-08-29 23:27:12.000000000","message":"Do you handle AssertionErrors at some point? If not, please do?","commit_id":"76843f3c22adf2b80901dcde4e13a0ac9ec10a00"},{"author":{"_account_id":616,"name":"Mark Washenberger","email":"mark.washenberger@markwash.net","username":"markwash"},"change_message_id":"402b63a6d700506686885c42e689fd9c40292942","unresolved":false,"context_lines":[{"line_number":181,"context_line":"        for change in changes:"},{"line_number":182,"context_line":"            path \u003d change[\u0027path\u0027]"},{"line_number":183,"context_line":"            if len(path) \u003d\u003d 1:"},{"line_number":184,"context_line":"                assert change[\u0027op\u0027] \u003d\u003d \u0027replace\u0027"},{"line_number":185,"context_line":"                key \u003d change[\u0027path\u0027][0]"},{"line_number":186,"context_line":"                if key \u003d\u003d \u0027is_public\u0027 and change[\u0027value\u0027]:"},{"line_number":187,"context_line":"                    self._enforce(req, \u0027publicize_image\u0027)"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAALH%2F%2Fkp8%3D","line":184,"in_reply_to":"AAAALH%2F%2Fk8A%3D","updated":"2012-09-01 06:51:58.000000000","message":"Assertion errors will turn into 500 errors in eventlet.wsgi.server, which seemed like all we really needed.","commit_id":"76843f3c22adf2b80901dcde4e13a0ac9ec10a00"},{"author":{"_account_id":1132,"name":"Brian Waldon","email":"brian@waldon.cc","username":"bcwaldon"},"change_message_id":"92832aa2777a5fb552f54de8705c872218826488","unresolved":false,"context_lines":[{"line_number":199,"context_line":"    def _do_replace_property(self, updates, change):"},{"line_number":200,"context_line":"        key \u003d change[\u0027path\u0027][1]"},{"line_number":201,"context_line":"        if key not in updates:"},{"line_number":202,"context_line":"            msg \u003d _(\"Property %s not already present.\")"},{"line_number":203,"context_line":"            raise webob.exc.HTTPConflict(msg % key)"},{"line_number":204,"context_line":"        updates[key] \u003d change[\u0027value\u0027]"},{"line_number":205,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAALH%2F%2Fk8M%3D","line":202,"updated":"2012-08-29 23:27:12.000000000","message":"Why don\u0027t we just say \u0027...doesn\\\u0027t exist\u0027?","commit_id":"76843f3c22adf2b80901dcde4e13a0ac9ec10a00"},{"author":{"_account_id":616,"name":"Mark Washenberger","email":"mark.washenberger@markwash.net","username":"markwash"},"change_message_id":"402b63a6d700506686885c42e689fd9c40292942","unresolved":false,"context_lines":[{"line_number":199,"context_line":"    def _do_replace_property(self, updates, change):"},{"line_number":200,"context_line":"        key \u003d change[\u0027path\u0027][1]"},{"line_number":201,"context_line":"        if key not in updates:"},{"line_number":202,"context_line":"            msg \u003d _(\"Property %s not already present.\")"},{"line_number":203,"context_line":"            raise webob.exc.HTTPConflict(msg % key)"},{"line_number":204,"context_line":"        updates[key] \u003d change[\u0027value\u0027]"},{"line_number":205,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAALH%2F%2Fiv4%3D","line":202,"in_reply_to":"AAAALH%2F%2Fk8M%3D","updated":"2012-09-01 06:51:58.000000000","message":"Done","commit_id":"76843f3c22adf2b80901dcde4e13a0ac9ec10a00"},{"author":{"_account_id":1132,"name":"Brian Waldon","email":"brian@waldon.cc","username":"bcwaldon"},"change_message_id":"92832aa2777a5fb552f54de8705c872218826488","unresolved":false,"context_lines":[{"line_number":323,"context_line":"                    \u0027 a recognized escape sequence\u0027 % raw_key)"},{"line_number":324,"context_line":"            raise webob.exc.HTTPBadRequest(explanation\u003dmsg)"},{"line_number":325,"context_line":""},{"line_number":326,"context_line":"        key \u003d raw_change[op].lstrip(\u0027/\u0027).replace(\u0027~1\u0027, \u0027/\u0027).replace(\u0027~0\u0027, \u0027~\u0027)"},{"line_number":327,"context_line":"        if key in [\u0027created_at\u0027, \u0027updated_at\u0027, \u0027status\u0027, \u0027checksum\u0027,"},{"line_number":328,"context_line":"                   \u0027size\u0027, \u0027direct_url\u0027, \u0027self\u0027, \u0027file\u0027, \u0027schema\u0027]:"},{"line_number":329,"context_line":"            msg \u003d \"Attribute \\\u0027%s\\\u0027 is read-only.\" % key"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAALH%2F%2Fk5w%3D","line":326,"updated":"2012-08-29 23:27:12.000000000","message":"Break this line out into a new function","commit_id":"76843f3c22adf2b80901dcde4e13a0ac9ec10a00"},{"author":{"_account_id":616,"name":"Mark Washenberger","email":"mark.washenberger@markwash.net","username":"markwash"},"change_message_id":"402b63a6d700506686885c42e689fd9c40292942","unresolved":false,"context_lines":[{"line_number":323,"context_line":"                    \u0027 a recognized escape sequence\u0027 % raw_key)"},{"line_number":324,"context_line":"            raise webob.exc.HTTPBadRequest(explanation\u003dmsg)"},{"line_number":325,"context_line":""},{"line_number":326,"context_line":"        key \u003d raw_change[op].lstrip(\u0027/\u0027).replace(\u0027~1\u0027, \u0027/\u0027).replace(\u0027~0\u0027, \u0027~\u0027)"},{"line_number":327,"context_line":"        if key in [\u0027created_at\u0027, \u0027updated_at\u0027, \u0027status\u0027, \u0027checksum\u0027,"},{"line_number":328,"context_line":"                   \u0027size\u0027, \u0027direct_url\u0027, \u0027self\u0027, \u0027file\u0027, \u0027schema\u0027]:"},{"line_number":329,"context_line":"            msg \u003d \"Attribute \\\u0027%s\\\u0027 is read-only.\" % key"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAALH%2F%2Fiv0%3D","line":326,"in_reply_to":"AAAALH%2F%2Fk5w%3D","updated":"2012-09-01 06:51:58.000000000","message":"Done.\n\nWell, I kinda pulled a lot out actually, and added some extra documentation there.","commit_id":"76843f3c22adf2b80901dcde4e13a0ac9ec10a00"},{"author":{"_account_id":1132,"name":"Brian Waldon","email":"brian@waldon.cc","username":"bcwaldon"},"change_message_id":"92832aa2777a5fb552f54de8705c872218826488","unresolved":false,"context_lines":[{"line_number":324,"context_line":"            raise webob.exc.HTTPBadRequest(explanation\u003dmsg)"},{"line_number":325,"context_line":""},{"line_number":326,"context_line":"        key \u003d raw_change[op].lstrip(\u0027/\u0027).replace(\u0027~1\u0027, \u0027/\u0027).replace(\u0027~0\u0027, \u0027~\u0027)"},{"line_number":327,"context_line":"        if key in [\u0027created_at\u0027, \u0027updated_at\u0027, \u0027status\u0027, \u0027checksum\u0027,"},{"line_number":328,"context_line":"                   \u0027size\u0027, \u0027direct_url\u0027, \u0027self\u0027, \u0027file\u0027, \u0027schema\u0027]:"},{"line_number":329,"context_line":"            msg \u003d \"Attribute \\\u0027%s\\\u0027 is read-only.\" % key"},{"line_number":330,"context_line":"            raise webob.exc.HTTPForbidden(explanation\u003dunicode(msg))"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAALH%2F%2Fk5A%3D","line":327,"updated":"2012-08-29 23:27:12.000000000","message":"self._readonly_properties?","commit_id":"76843f3c22adf2b80901dcde4e13a0ac9ec10a00"},{"author":{"_account_id":616,"name":"Mark Washenberger","email":"mark.washenberger@markwash.net","username":"markwash"},"change_message_id":"402b63a6d700506686885c42e689fd9c40292942","unresolved":false,"context_lines":[{"line_number":324,"context_line":"            raise webob.exc.HTTPBadRequest(explanation\u003dmsg)"},{"line_number":325,"context_line":""},{"line_number":326,"context_line":"        key \u003d raw_change[op].lstrip(\u0027/\u0027).replace(\u0027~1\u0027, \u0027/\u0027).replace(\u0027~0\u0027, \u0027~\u0027)"},{"line_number":327,"context_line":"        if key in [\u0027created_at\u0027, \u0027updated_at\u0027, \u0027status\u0027, \u0027checksum\u0027,"},{"line_number":328,"context_line":"                   \u0027size\u0027, \u0027direct_url\u0027, \u0027self\u0027, \u0027file\u0027, \u0027schema\u0027]:"},{"line_number":329,"context_line":"            msg \u003d \"Attribute \\\u0027%s\\\u0027 is read-only.\" % key"},{"line_number":330,"context_line":"            raise webob.exc.HTTPForbidden(explanation\u003dunicode(msg))"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAALH%2F%2Fivw%3D","line":327,"in_reply_to":"AAAALH%2F%2Fk5A%3D","updated":"2012-09-01 06:51:58.000000000","message":"Done","commit_id":"76843f3c22adf2b80901dcde4e13a0ac9ec10a00"},{"author":{"_account_id":1132,"name":"Brian Waldon","email":"brian@waldon.cc","username":"bcwaldon"},"change_message_id":"92832aa2777a5fb552f54de8705c872218826488","unresolved":false,"context_lines":[{"line_number":328,"context_line":"                   \u0027size\u0027, \u0027direct_url\u0027, \u0027self\u0027, \u0027file\u0027, \u0027schema\u0027]:"},{"line_number":329,"context_line":"            msg \u003d \"Attribute \\\u0027%s\\\u0027 is read-only.\" % key"},{"line_number":330,"context_line":"            raise webob.exc.HTTPForbidden(explanation\u003dunicode(msg))"},{"line_number":331,"context_line":"        if key in [\u0027owner\u0027, \u0027is_public\u0027, \u0027location\u0027, \u0027deleted\u0027, \u0027deleted_at\u0027]:"},{"line_number":332,"context_line":"            msg \u003d \"Attribute \\\u0027%s\\\u0027 is reserved.\" % key"},{"line_number":333,"context_line":"            raise webob.exc.HTTPForbidden(explanation\u003dunicode(msg))"},{"line_number":334,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAALH%2F%2Fk5Q%3D","line":331,"updated":"2012-08-29 23:27:12.000000000","message":"self._reserved_properties?","commit_id":"76843f3c22adf2b80901dcde4e13a0ac9ec10a00"},{"author":{"_account_id":616,"name":"Mark Washenberger","email":"mark.washenberger@markwash.net","username":"markwash"},"change_message_id":"402b63a6d700506686885c42e689fd9c40292942","unresolved":false,"context_lines":[{"line_number":328,"context_line":"                   \u0027size\u0027, \u0027direct_url\u0027, \u0027self\u0027, \u0027file\u0027, \u0027schema\u0027]:"},{"line_number":329,"context_line":"            msg \u003d \"Attribute \\\u0027%s\\\u0027 is read-only.\" % key"},{"line_number":330,"context_line":"            raise webob.exc.HTTPForbidden(explanation\u003dunicode(msg))"},{"line_number":331,"context_line":"        if key in [\u0027owner\u0027, \u0027is_public\u0027, \u0027location\u0027, \u0027deleted\u0027, \u0027deleted_at\u0027]:"},{"line_number":332,"context_line":"            msg \u003d \"Attribute \\\u0027%s\\\u0027 is reserved.\" % key"},{"line_number":333,"context_line":"            raise webob.exc.HTTPForbidden(explanation\u003dunicode(msg))"},{"line_number":334,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAALH%2F%2Fivs%3D","line":331,"in_reply_to":"AAAALH%2F%2Fk5Q%3D","updated":"2012-09-01 06:51:58.000000000","message":"Done","commit_id":"76843f3c22adf2b80901dcde4e13a0ac9ec10a00"},{"author":{"_account_id":616,"name":"Mark Washenberger","email":"mark.washenberger@markwash.net","username":"markwash"},"change_message_id":"402b63a6d700506686885c42e689fd9c40292942","unresolved":false,"context_lines":[{"line_number":335,"context_line":"        if key not in [\u0027checksum\u0027, \u0027created_at\u0027, \u0027container_format\u0027,"},{"line_number":336,"context_line":"                \u0027disk_format\u0027, \u0027id\u0027, \u0027min_disk\u0027, \u0027min_ram\u0027, \u0027name\u0027,"},{"line_number":337,"context_line":"                \u0027size\u0027, \u0027status\u0027, \u0027tags\u0027, \u0027updated_at\u0027, \u0027visibility\u0027,"},{"line_number":338,"context_line":"                \u0027protected\u0027]:"},{"line_number":339,"context_line":"            return [\u0027properties\u0027, key]"},{"line_number":340,"context_line":"        return [key]"},{"line_number":341,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAALH%2F%2Fivo%3D","line":338,"updated":"2012-09-01 06:51:58.000000000","message":"self._base_properties","commit_id":"76843f3c22adf2b80901dcde4e13a0ac9ec10a00"},{"author":{"_account_id":1132,"name":"Brian Waldon","email":"brian@waldon.cc","username":"bcwaldon"},"change_message_id":"92832aa2777a5fb552f54de8705c872218826488","unresolved":false,"context_lines":[{"line_number":362,"context_line":"        if request.content_type not in valid_content_types:"},{"line_number":363,"context_line":"            headers \u003d {\u0027Accept-Patch\u0027: \u0027,\u0027.join(valid_content_types)}"},{"line_number":364,"context_line":"            raise webob.exc.HTTPUnsupportedMediaType(headers\u003dheaders)"},{"line_number":365,"context_line":"        body \u003d self._get_request_body(request)"},{"line_number":366,"context_line":"        for raw_change in body:"},{"line_number":367,"context_line":"            op \u003d self._get_change_operation(raw_change)"},{"line_number":368,"context_line":"            path \u003d self._get_change_path(raw_change, op)"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAALH%2F%2Fk5M%3D","line":365,"updated":"2012-08-29 23:27:12.000000000","message":"Can you assert that \u0027body\u0027 is a list? I want to make sure the response is sane when a user sends an image entity in a PATCH","commit_id":"76843f3c22adf2b80901dcde4e13a0ac9ec10a00"},{"author":{"_account_id":616,"name":"Mark Washenberger","email":"mark.washenberger@markwash.net","username":"markwash"},"change_message_id":"402b63a6d700506686885c42e689fd9c40292942","unresolved":false,"context_lines":[{"line_number":362,"context_line":"        if request.content_type not in valid_content_types:"},{"line_number":363,"context_line":"            headers \u003d {\u0027Accept-Patch\u0027: \u0027,\u0027.join(valid_content_types)}"},{"line_number":364,"context_line":"            raise webob.exc.HTTPUnsupportedMediaType(headers\u003dheaders)"},{"line_number":365,"context_line":"        body \u003d self._get_request_body(request)"},{"line_number":366,"context_line":"        for raw_change in body:"},{"line_number":367,"context_line":"            op \u003d self._get_change_operation(raw_change)"},{"line_number":368,"context_line":"            path \u003d self._get_change_path(raw_change, op)"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAALH%2F%2Fivc%3D","line":365,"in_reply_to":"AAAALH%2F%2Fk5M%3D","updated":"2012-09-01 06:51:58.000000000","message":"Done.\n\nAlso I\u0027ve added assertions to make sure that each operation in the list is a JSON object.","commit_id":"76843f3c22adf2b80901dcde4e13a0ac9ec10a00"},{"author":{"_account_id":1132,"name":"Brian Waldon","email":"brian@waldon.cc","username":"bcwaldon"},"change_message_id":"92832aa2777a5fb552f54de8705c872218826488","unresolved":false,"context_lines":[{"line_number":491,"context_line":"        response.body \u003d json.dumps(self._format_image(image))"},{"line_number":492,"context_line":"        response.content_type \u003d \u0027application/json\u0027"},{"line_number":493,"context_line":""},{"line_number":494,"context_line":"    def update(self, response, image):"},{"line_number":495,"context_line":"        response.body \u003d json.dumps(self._format_image(image))"},{"line_number":496,"context_line":"        response.content_type \u003d \u0027application/json\u0027"},{"line_number":497,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAALH%2F%2Fk5I%3D","line":494,"updated":"2012-08-29 23:27:12.000000000","message":"Duplercate","commit_id":"76843f3c22adf2b80901dcde4e13a0ac9ec10a00"},{"author":{"_account_id":616,"name":"Mark Washenberger","email":"mark.washenberger@markwash.net","username":"markwash"},"change_message_id":"402b63a6d700506686885c42e689fd9c40292942","unresolved":false,"context_lines":[{"line_number":491,"context_line":"        response.body \u003d json.dumps(self._format_image(image))"},{"line_number":492,"context_line":"        response.content_type \u003d \u0027application/json\u0027"},{"line_number":493,"context_line":""},{"line_number":494,"context_line":"    def update(self, response, image):"},{"line_number":495,"context_line":"        response.body \u003d json.dumps(self._format_image(image))"},{"line_number":496,"context_line":"        response.content_type \u003d \u0027application/json\u0027"},{"line_number":497,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAALH%2F%2Fivk%3D","line":494,"in_reply_to":"AAAALH%2F%2Fk5I%3D","updated":"2012-09-01 06:51:58.000000000","message":"Done","commit_id":"76843f3c22adf2b80901dcde4e13a0ac9ec10a00"},{"author":{"_account_id":616,"name":"Mark Washenberger","email":"mark.washenberger@markwash.net","username":"markwash"},"change_message_id":"3dc027409d1ea4bd82836f709d472a368fbd00fe","unresolved":false,"context_lines":[{"line_number":360,"context_line":""},{"line_number":361,"context_line":"        Json Pointers are defined in"},{"line_number":362,"context_line":"        http://tools.ietf.org/html/draft-pbryan-zyp-json-pointer ."},{"line_number":363,"context_line":"        The pointers use \u0027/\u0027 for separation between object attributes, such "},{"line_number":364,"context_line":"        that \u0027/A/B\u0027 would evaluate to C in {\"A\": {\"B\": \"C\"}}. A \u0027/\u0027 character"},{"line_number":365,"context_line":"        in an attribute name is encoded as \"~1\" and a \u0027~\u0027 character is encoded"},{"line_number":366,"context_line":"        as \"~0\"."}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAALH%2F%2FivE%3D","line":363,"updated":"2012-09-01 06:57:29.000000000","message":"whoops!","commit_id":"95e19444891dbe06a17450310214a914d23095fc"}],"glance/common/wsgi.py":[{"author":{"_account_id":1132,"name":"Brian Waldon","email":"brian@waldon.cc","username":"bcwaldon"},"change_message_id":"92832aa2777a5fb552f54de8705c872218826488","unresolved":false,"context_lines":[{"line_number":69,"context_line":"class WritableLogger(object):"},{"line_number":70,"context_line":"    \"\"\"A thin wrapper that responds to `write` and logs.\"\"\""},{"line_number":71,"context_line":""},{"line_number":72,"context_line":"    def __init__(self, logger, level\u003dlogging.WARN):"},{"line_number":73,"context_line":"        self.logger \u003d logger"},{"line_number":74,"context_line":"        self.level \u003d level"},{"line_number":75,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAALH%2F%2Fk40%3D","line":72,"updated":"2012-08-29 23:27:12.000000000","message":"Undo this.","commit_id":"76843f3c22adf2b80901dcde4e13a0ac9ec10a00"},{"author":{"_account_id":616,"name":"Mark Washenberger","email":"mark.washenberger@markwash.net","username":"markwash"},"change_message_id":"3dc027409d1ea4bd82836f709d472a368fbd00fe","unresolved":false,"context_lines":[{"line_number":69,"context_line":"class WritableLogger(object):"},{"line_number":70,"context_line":"    \"\"\"A thin wrapper that responds to `write` and logs.\"\"\""},{"line_number":71,"context_line":""},{"line_number":72,"context_line":"    def __init__(self, logger, level\u003dlogging.WARN):"},{"line_number":73,"context_line":"        self.logger \u003d logger"},{"line_number":74,"context_line":"        self.level \u003d level"},{"line_number":75,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAALH%2F%2FivI%3D","line":72,"updated":"2012-09-01 06:57:29.000000000","message":"whoops","commit_id":"95e19444891dbe06a17450310214a914d23095fc"}],"glance/db/simple/api.py":[{"author":{"_account_id":616,"name":"Mark Washenberger","email":"mark.washenberger@markwash.net","username":"markwash"},"change_message_id":"2fe26c6c253fc0bf586f5d8db182acc426c03f59","unresolved":false,"context_lines":[{"line_number":275,"context_line":""},{"line_number":276,"context_line":""},{"line_number":277,"context_line":"@log_call"},{"line_number":278,"context_line":"def image_update(context, image_id, image_values, purge_props\u003dFalse):"},{"line_number":279,"context_line":"    global DATA"},{"line_number":280,"context_line":"    try:"},{"line_number":281,"context_line":"        image \u003d DATA[\u0027images\u0027][image_id]"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAALH%2F%2Fk%2Bs%3D","line":278,"updated":"2012-08-29 21:54:41.000000000","message":"I wanted to put this in a separate branch but am not sure how to test it.","commit_id":"76843f3c22adf2b80901dcde4e13a0ac9ec10a00"},{"author":{"_account_id":1132,"name":"Brian Waldon","email":"brian@waldon.cc","username":"bcwaldon"},"change_message_id":"92832aa2777a5fb552f54de8705c872218826488","unresolved":false,"context_lines":[{"line_number":275,"context_line":""},{"line_number":276,"context_line":""},{"line_number":277,"context_line":"@log_call"},{"line_number":278,"context_line":"def image_update(context, image_id, image_values, purge_props\u003dFalse):"},{"line_number":279,"context_line":"    global DATA"},{"line_number":280,"context_line":"    try:"},{"line_number":281,"context_line":"        image \u003d DATA[\u0027images\u0027][image_id]"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAALH%2F%2Fk4o%3D","line":278,"in_reply_to":"AAAALH%2F%2Fk%2Bs%3D","updated":"2012-08-29 23:27:12.000000000","message":"Write a test in glance/tests/function/__init__.py that passes against both sqlalchemy api and simple api. Please do break this change out.","commit_id":"76843f3c22adf2b80901dcde4e13a0ac9ec10a00"},{"author":{"_account_id":616,"name":"Mark Washenberger","email":"mark.washenberger@markwash.net","username":"markwash"},"change_message_id":"402b63a6d700506686885c42e689fd9c40292942","unresolved":false,"context_lines":[{"line_number":275,"context_line":""},{"line_number":276,"context_line":""},{"line_number":277,"context_line":"@log_call"},{"line_number":278,"context_line":"def image_update(context, image_id, image_values, purge_props\u003dFalse):"},{"line_number":279,"context_line":"    global DATA"},{"line_number":280,"context_line":"    try:"},{"line_number":281,"context_line":"        image \u003d DATA[\u0027images\u0027][image_id]"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAALH%2F%2FivU%3D","line":278,"in_reply_to":"AAAALH%2F%2Fk4o%3D","updated":"2012-09-01 06:51:58.000000000","message":"Done","commit_id":"76843f3c22adf2b80901dcde4e13a0ac9ec10a00"}]}
