)]}'
{"gnocchi/indexer/sqlalchemy.py":[{"author":{"_account_id":1669,"name":"Julien Danjou","display_name":"jd","email":"julien@danjou.info","username":"jdanjou"},"change_message_id":"d001801192ac9bf0f3b8b1c4f00275b0e41470b7","unresolved":false,"context_lines":[{"line_number":250,"context_line":""},{"line_number":251,"context_line":"    def update_resource(self, resource_type,"},{"line_number":252,"context_line":"                        uuid, ended_at\u003d_marker, entities\u003d_marker,"},{"line_number":253,"context_line":"                        append_entities\u003dFalse,"},{"line_number":254,"context_line":"                        **kwargs):"},{"line_number":255,"context_line":"        resource_cls \u003d self._resource_type_to_class(resource_type)"},{"line_number":256,"context_line":"        session \u003d self.engine_facade.get_session()"}],"source_content_type":"text/x-python","patch_set":10,"id":"da9df570_1c9366a4","line":253,"updated":"2014-09-22 11:41:45.000000000","message":"You missed indexer/__init__.py","commit_id":"134ecc25d615f53e1e50d4f0492b21fb1cfaba6f"},{"author":{"_account_id":2813,"name":"Mehdi Abaakouk","email":"sileht@sileht.net","username":"sileht"},"change_message_id":"1825531973cc4722097300b7ebf6714de8b8db27","unresolved":false,"context_lines":[{"line_number":250,"context_line":""},{"line_number":251,"context_line":"    def update_resource(self, resource_type,"},{"line_number":252,"context_line":"                        uuid, ended_at\u003d_marker, entities\u003d_marker,"},{"line_number":253,"context_line":"                        append_entities\u003dFalse,"},{"line_number":254,"context_line":"                        **kwargs):"},{"line_number":255,"context_line":"        resource_cls \u003d self._resource_type_to_class(resource_type)"},{"line_number":256,"context_line":"        session \u003d self.engine_facade.get_session()"}],"source_content_type":"text/x-python","patch_set":10,"id":"da9df570_12cb4f73","line":253,"in_reply_to":"da9df570_1c9366a4","updated":"2014-09-22 13:11:09.000000000","message":"Done","commit_id":"134ecc25d615f53e1e50d4f0492b21fb1cfaba6f"}],"gnocchi/rest/__init__.py":[{"author":{"_account_id":2284,"name":"Eoghan Glynn","email":"eglynn@redhat.com","username":"eglynn"},"change_message_id":"57d55c811ea6fcaea88932e484237b789a44b093","unresolved":false,"context_lines":[{"line_number":69,"context_line":""},{"line_number":70,"context_line":""},{"line_number":71,"context_line":"def convert_entity_list(entities, user_id, project_id):"},{"line_number":72,"context_line":"    # Replace None as value for an entity by a brand a new entity"},{"line_number":73,"context_line":"    new_entities \u003d {}"},{"line_number":74,"context_line":"    for k, v in six.iteritems(entities):"},{"line_number":75,"context_line":"        if isinstance(v, uuid.UUID):"}],"source_content_type":"text/x-python","patch_set":8,"id":"fa98f980_7ae6ed17","line":72,"updated":"2014-09-19 11:03:32.000000000","message":"This comment predates your patch, but it confused me a bit, might be worth fixing:\n\n -        # Replace None as value for an entity by a brand a new entity\n +        # Replace an archive policy as value for an entity by a brand new\n +        # entity","commit_id":"fc228bfaa92e4e9116725f5ba854586f99751c76"},{"author":{"_account_id":2813,"name":"Mehdi Abaakouk","email":"sileht@sileht.net","username":"sileht"},"change_message_id":"5eebf794863c854eaae0da2a604f147c3658c0df","unresolved":false,"context_lines":[{"line_number":69,"context_line":""},{"line_number":70,"context_line":""},{"line_number":71,"context_line":"def convert_entity_list(entities, user_id, project_id):"},{"line_number":72,"context_line":"    # Replace None as value for an entity by a brand a new entity"},{"line_number":73,"context_line":"    new_entities \u003d {}"},{"line_number":74,"context_line":"    for k, v in six.iteritems(entities):"},{"line_number":75,"context_line":"        if isinstance(v, uuid.UUID):"}],"source_content_type":"text/x-python","patch_set":8,"id":"da9df570_8e99e170","line":72,"in_reply_to":"fa98f980_7ae6ed17","updated":"2014-09-22 06:20:18.000000000","message":"Done","commit_id":"fc228bfaa92e4e9116725f5ba854586f99751c76"},{"author":{"_account_id":2284,"name":"Eoghan Glynn","email":"eglynn@redhat.com","username":"eglynn"},"change_message_id":"4b78e57e5148523f3a6ccad950d9ab25d81c40c8","unresolved":false,"context_lines":[{"line_number":194,"context_line":"        pecan.abort(404)"},{"line_number":195,"context_line":""},{"line_number":196,"context_line":"    @vexpose(Entities)"},{"line_number":197,"context_line":"    def post(self, body):"},{"line_number":198,"context_line":"        # FIXME(sileht) Use the real user_id/project_id"},{"line_number":199,"context_line":"        entities \u003d convert_entity_list(body, \"admin\", \"admin\")"},{"line_number":200,"context_line":"        try:"}],"source_content_type":"text/x-python","patch_set":8,"id":"fa98f980_14c4f13f","line":197,"updated":"2014-09-18 14:42:09.000000000","message":"Modelling this POST operation on the NamedEntityController seems wrong to me.\n\nIIUC the original purpose of this controller is allow a shorthand way of referring to an *individual* entity by name, within the scope of the resource that the entity is associated with.\n\nSo basically the intent was to support:\n\n  GET /v1/resources/RESOURCE_ID/entity/ENTITY_NAME\n\nas a convenient alternative to:\n\n  GET /v1/entities/ENTITY_ID\n\nwithout the need to know that ENTITY_ID upfront.\n\nHowever this approach IINM seems to be bending that idea to allow say:\n\n  POST /v1/resources/RESOURCE_ID/entity/cpu_util\n  {\"disk.write.bytes\": ENTITY_ID}\n\nSo now the named aspect of the original entity (cpu_util in the above example) is kind of irrelevant.\n\nAlso unless I\u0027m missing something, it only seems to work in the case where there\u0027s at least one entity associated with the resource (as otherwise there\u0027s nothing to refer to by name).\n\nWould it make more sense to allow the entity append semantics to be modeled on the GenericResourcesController instead?","commit_id":"fc228bfaa92e4e9116725f5ba854586f99751c76"},{"author":{"_account_id":2284,"name":"Eoghan Glynn","email":"eglynn@redhat.com","username":"eglynn"},"change_message_id":"bf39b4b5ceaca66a0fb02838990503d95c0ad1e0","unresolved":false,"context_lines":[{"line_number":194,"context_line":"        pecan.abort(404)"},{"line_number":195,"context_line":""},{"line_number":196,"context_line":"    @vexpose(Entities)"},{"line_number":197,"context_line":"    def post(self, body):"},{"line_number":198,"context_line":"        # FIXME(sileht) Use the real user_id/project_id"},{"line_number":199,"context_line":"        entities \u003d convert_entity_list(body, \"admin\", \"admin\")"},{"line_number":200,"context_line":"        try:"}],"source_content_type":"text/x-python","patch_set":8,"id":"fa98f980_8707d1c8","line":197,"in_reply_to":"fa98f980_14c4f13f","updated":"2014-09-18 15:00:54.000000000","message":"Now that I see this used in the new dispatcher:\n\n  https://review.openstack.org/#/c/98798/31/gnocchi/ceilometer/dispatcher.py\n\nline 151, I realize that my comments above are off-base.\n\nIt still seems a bit odd though to mix this entity-append logic in with the NamedEntityController, given the original purpose of that.","commit_id":"fc228bfaa92e4e9116725f5ba854586f99751c76"},{"author":{"_account_id":2813,"name":"Mehdi Abaakouk","email":"sileht@sileht.net","username":"sileht"},"change_message_id":"bb864a963ebfda94b1fbe8ed14a925bd247daaaf","unresolved":false,"context_lines":[{"line_number":194,"context_line":"        pecan.abort(404)"},{"line_number":195,"context_line":""},{"line_number":196,"context_line":"    @vexpose(Entities)"},{"line_number":197,"context_line":"    def post(self, body):"},{"line_number":198,"context_line":"        # FIXME(sileht) Use the real user_id/project_id"},{"line_number":199,"context_line":"        entities \u003d convert_entity_list(body, \"admin\", \"admin\")"},{"line_number":200,"context_line":"        try:"}],"source_content_type":"text/x-python","patch_set":8,"id":"fa98f980_e956a029","line":197,"in_reply_to":"fa98f980_8707d1c8","updated":"2014-09-19 07:06:25.000000000","message":"For now, the only ways to change the entities of a resource is to replace all the entities with PATCH, this will force us to do a GET of the current entities and PATCH the resource with this lists extended by the new entity. But this is a not concurrency safe option.\n\nThe needs for the dispatcher is a concurrency safe method to add a new entity to a resource, this is why I have added this endpoint.\n\nAnd the most restful request would be something like that:\n\nPOST /v1/resources/RESOURCE_ID/entity\n{ \n  name: \"disk.write.bytes\",\n  id: ENTITY_ID\n}\n\nBut I have preferred that version that allows bulk entities add and keep the same entities format as \u0027entities\u0027 in a resource:\n\nPOST /v1/resources/RESOURCE_ID/entity\n{ \"disk.write.bytes\": ENTITY_ID,\n  \"disk.read.bytes\": ENTITY_ID}\n\nAnd to do this I have to add the post method on the NamedEntityController.\n\n\nI just see an other restful option: add an \u0027entities\u0027 endpoint on a resource:\n\nGET /v1/resources/RESOURCE_ID/entities\n{ \"memory_usage\": ENTITY_ID,\n  \"cpu_util\": ENTITY_ID,}\n\nPATCH /v1/resources/RESOURCE_ID/entities\n{ \"disk.write.bytes\": ENTITY_ID,\n  \"disk.read.bytes\": ENTITY_ID}\n\nGET /v1/resources/RESOURCE_ID/entities\n{ \"memory_usage\": ENTITY_ID,\n  \"cpu_util\": ENTITY_ID,\n  \"disk.write.bytes\": ENTITY_ID,\n  \"disk.read.bytes\": ENTITY_ID}\n\nPUT /v1/resources/RESOURCE_ID/entities\n{ \"disk.write.bytes\": ENTITY_ID,\n  \"disk.read.bytes\": ENTITY_ID}\n\nGET /v1/resources/RESOURCE_ID/entities\n{ \"disk.write.bytes\": ENTITY_ID,\n  \"disk.read.bytes\": ENTITY_ID}\n\n\nPerhaps it will be confusing for an user to have entity and entities (or not). Both options looks good for me.\n\nThe seconds option adds an other controller (NamedEntitesController) to do it.","commit_id":"fc228bfaa92e4e9116725f5ba854586f99751c76"},{"author":{"_account_id":1669,"name":"Julien Danjou","display_name":"jd","email":"julien@danjou.info","username":"jdanjou"},"change_message_id":"ca01d3cf68f5cbac221ad494bceb39104a8296c6","unresolved":false,"context_lines":[{"line_number":194,"context_line":"        pecan.abort(404)"},{"line_number":195,"context_line":""},{"line_number":196,"context_line":"    @vexpose(Entities)"},{"line_number":197,"context_line":"    def post(self, body):"},{"line_number":198,"context_line":"        # FIXME(sileht) Use the real user_id/project_id"},{"line_number":199,"context_line":"        entities \u003d convert_entity_list(body, \"admin\", \"admin\")"},{"line_number":200,"context_line":"        try:"}],"source_content_type":"text/x-python","patch_set":8,"id":"fa98f980_60a2ba4c","line":197,"in_reply_to":"fa98f980_bac3f536","updated":"2014-09-19 13:06:16.000000000","message":"Actually I have deliberately used single form noun and never plural as it seems to be a standard in REST.\n\nPOSTing to a request implies, in REST, creating one or several resources in the collection pointed by that URL. I think the current patch is OK with that.\n\nTo discuss the alternatives:\n\n POST /v1/resources/RESOURCE_ID/entities \u003d\u003e Plural form of what\u0027s currently proposed, I don\u0027t think it\u0027s needed to confuse people with single/plural\n\n\nPATCH /v1/resources/RESOURCE_ID/entities \u003d\u003e PATCH is supposed to modify partially an object, so \"append\" is not what\u0027s expected of that form.\n\nPUT /v1/resources/RESOURCE_ID/entities \u003d\u003e that\u0027d be more or less OK, but 1. that doesn\u0027t solve Mehdi issue, and it\u0027s a bit confusing to have single/plural form mixed.","commit_id":"fc228bfaa92e4e9116725f5ba854586f99751c76"},{"author":{"_account_id":2284,"name":"Eoghan Glynn","email":"eglynn@redhat.com","username":"eglynn"},"change_message_id":"57d55c811ea6fcaea88932e484237b789a44b093","unresolved":false,"context_lines":[{"line_number":194,"context_line":"        pecan.abort(404)"},{"line_number":195,"context_line":""},{"line_number":196,"context_line":"    @vexpose(Entities)"},{"line_number":197,"context_line":"    def post(self, body):"},{"line_number":198,"context_line":"        # FIXME(sileht) Use the real user_id/project_id"},{"line_number":199,"context_line":"        entities \u003d convert_entity_list(body, \"admin\", \"admin\")"},{"line_number":200,"context_line":"        try:"}],"source_content_type":"text/x-python","patch_set":8,"id":"fa98f980_bac3f536","line":197,"in_reply_to":"fa98f980_e956a029","updated":"2014-09-19 11:03:32.000000000","message":"Yeah, apologies for introducing the confusion above in my first comment.\n\nSo given that the URL in:\n\n   POST /v1/resources/RESOURCE_ID/entity\n\nimplies a single entity, as opposed to a collection, I do like your alternative proposal to use:\n\n  /v1/resources/RESOURCE_ID/entities\n\ninstead.\n\nWould there be a place for the POST verb in that case? e.g.\n\n  POST /v1/resources/RESOURCE_ID/entities\n  {\"disk.write.bytes\" : {\"archive_policy\": \"medium\"}}\n\nto create a brand new entity called \"disk.write.bytes\" but with ID as yet unknown and associate the new entity with the resource. Just wondering if that would be clearer that the current pattern of using:\n\n  PATCH /v1/resources/RESOURCE_ID/entities\n  {\"disk.write.bytes\" : ENTITY_ID}\n\nas mean \"associate this existing entity with the resource\", but then overloading the same verb:\n\n  PATCH /v1/resources/RESOURCE_ID/entities\n  {\"disk.write.bytes\" : {\"archive_policy\": \"medium\"}}\n\nto mean \"create a new  entity and associate it with the resource\"\n\nSo we\u0027d end up with 3 alternatives:\n\n  POST /v1/resources/RESOURCE_ID/entities \u003d\u003e create new entity and append\n  PATCH /v1/resources/RESOURCE_ID/entities \u003d\u003e append pre-existing entity\n  PUT /v1/resources/RESOURCE_ID/entities \u003d\u003e replace entity list\n\nJust a thought ...","commit_id":"fc228bfaa92e4e9116725f5ba854586f99751c76"},{"author":{"_account_id":1669,"name":"Julien Danjou","display_name":"jd","email":"julien@danjou.info","username":"jdanjou"},"change_message_id":"e36db86344ab1f5ed3edeb6e5f821fbe06402607","unresolved":false,"context_lines":[{"line_number":200,"context_line":"        try:"},{"line_number":201,"context_line":"            pecan.request.indexer.update_resource("},{"line_number":202,"context_line":"                self.resource_type, self.resource_id, entities\u003dentities,"},{"line_number":203,"context_line":"                append_entities\u003dTrue)"},{"line_number":204,"context_line":"        except ValueError as e:"},{"line_number":205,"context_line":"            pecan.abort(400, e)"},{"line_number":206,"context_line":"        except indexer.ResourceAlreadyExists as e:"}],"source_content_type":"text/x-python","patch_set":8,"id":"fa98f980_749a9dc6","line":203,"updated":"2014-09-18 14:31:13.000000000","message":"You need to catch NoSuchEntity and NoSuchResource.","commit_id":"fc228bfaa92e4e9116725f5ba854586f99751c76"},{"author":{"_account_id":2813,"name":"Mehdi Abaakouk","email":"sileht@sileht.net","username":"sileht"},"change_message_id":"5eebf794863c854eaae0da2a604f147c3658c0df","unresolved":false,"context_lines":[{"line_number":200,"context_line":"        try:"},{"line_number":201,"context_line":"            pecan.request.indexer.update_resource("},{"line_number":202,"context_line":"                self.resource_type, self.resource_id, entities\u003dentities,"},{"line_number":203,"context_line":"                append_entities\u003dTrue)"},{"line_number":204,"context_line":"        except ValueError as e:"},{"line_number":205,"context_line":"            pecan.abort(400, e)"},{"line_number":206,"context_line":"        except indexer.ResourceAlreadyExists as e:"}],"source_content_type":"text/x-python","patch_set":8,"id":"da9df570_aeb5c5ce","line":203,"in_reply_to":"fa98f980_749a9dc6","updated":"2014-09-22 06:20:18.000000000","message":"Done","commit_id":"fc228bfaa92e4e9116725f5ba854586f99751c76"},{"author":{"_account_id":1669,"name":"Julien Danjou","display_name":"jd","email":"julien@danjou.info","username":"jdanjou"},"change_message_id":"e36db86344ab1f5ed3edeb6e5f821fbe06402607","unresolved":false,"context_lines":[{"line_number":203,"context_line":"                append_entities\u003dTrue)"},{"line_number":204,"context_line":"        except ValueError as e:"},{"line_number":205,"context_line":"            pecan.abort(400, e)"},{"line_number":206,"context_line":"        except indexer.ResourceAlreadyExists as e:"},{"line_number":207,"context_line":"            pecan.abort(409, e)"},{"line_number":208,"context_line":"        pecan.response.status \u003d 204"},{"line_number":209,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"fa98f980_d4598936","line":206,"updated":"2014-09-18 14:31:13.000000000","message":"I don\u0027t think this exception can be raised by update_resource()","commit_id":"fc228bfaa92e4e9116725f5ba854586f99751c76"},{"author":{"_account_id":2813,"name":"Mehdi Abaakouk","email":"sileht@sileht.net","username":"sileht"},"change_message_id":"5eebf794863c854eaae0da2a604f147c3658c0df","unresolved":false,"context_lines":[{"line_number":203,"context_line":"                append_entities\u003dTrue)"},{"line_number":204,"context_line":"        except ValueError as e:"},{"line_number":205,"context_line":"            pecan.abort(400, e)"},{"line_number":206,"context_line":"        except indexer.ResourceAlreadyExists as e:"},{"line_number":207,"context_line":"            pecan.abort(409, e)"},{"line_number":208,"context_line":"        pecan.response.status \u003d 204"},{"line_number":209,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"da9df570_cec9295c","line":206,"in_reply_to":"fa98f980_d4598936","updated":"2014-09-22 06:20:18.000000000","message":"Done","commit_id":"fc228bfaa92e4e9116725f5ba854586f99751c76"}],"gnocchi/tests/test_rest.py":[{"author":{"_account_id":1669,"name":"Julien Danjou","display_name":"jd","email":"julien@danjou.info","username":"jdanjou"},"change_message_id":"b23c7cc780c76b45614cdf4589676bd4cf299ce1","unresolved":false,"context_lines":[{"line_number":379,"context_line":"                                    + \"/\" + self.attributes[\u0027id\u0027]"},{"line_number":380,"context_line":"                                    + \"/entity\","},{"line_number":381,"context_line":"                                    params\u003dentities)"},{"line_number":382,"context_line":"        self.assertEqual(204, result.status_code)"},{"line_number":383,"context_line":""},{"line_number":384,"context_line":"        entities \u003d {\u0027foo\u0027: {\u0027archive_policy\u0027: \"low\"}}"},{"line_number":385,"context_line":"        result \u003d self.app.post_json(\"/v1/resource/\" + self.resource_type"}],"source_content_type":"text/x-python","patch_set":15,"id":"da9df570_d175fb98","line":382,"updated":"2014-09-24 15:11:50.000000000","message":"Rather use status\u003d204 in post_json()","commit_id":"4cc5aa84b002bfae0977eab843053bc8659660ca"},{"author":{"_account_id":2813,"name":"Mehdi Abaakouk","email":"sileht@sileht.net","username":"sileht"},"change_message_id":"8678b74357d5b99869105695866801601121aef6","unresolved":false,"context_lines":[{"line_number":379,"context_line":"                                    + \"/\" + self.attributes[\u0027id\u0027]"},{"line_number":380,"context_line":"                                    + \"/entity\","},{"line_number":381,"context_line":"                                    params\u003dentities)"},{"line_number":382,"context_line":"        self.assertEqual(204, result.status_code)"},{"line_number":383,"context_line":""},{"line_number":384,"context_line":"        entities \u003d {\u0027foo\u0027: {\u0027archive_policy\u0027: \"low\"}}"},{"line_number":385,"context_line":"        result \u003d self.app.post_json(\"/v1/resource/\" + self.resource_type"}],"source_content_type":"text/x-python","patch_set":15,"id":"da9df570_247363b2","line":382,"in_reply_to":"da9df570_d175fb98","updated":"2014-09-24 15:35:48.000000000","message":"Done","commit_id":"4cc5aa84b002bfae0977eab843053bc8659660ca"},{"author":{"_account_id":1669,"name":"Julien Danjou","display_name":"jd","email":"julien@danjou.info","username":"jdanjou"},"change_message_id":"b23c7cc780c76b45614cdf4589676bd4cf299ce1","unresolved":false,"context_lines":[{"line_number":387,"context_line":"                                    + \"/entity\","},{"line_number":388,"context_line":"                                    params\u003dentities,"},{"line_number":389,"context_line":"                                    expect_errors\u003dTrue)"},{"line_number":390,"context_line":"        self.assertEqual(400, result.status_code)"},{"line_number":391,"context_line":""},{"line_number":392,"context_line":"        result \u003d self.app.get(\"/v1/resource/\""},{"line_number":393,"context_line":"                              + self.resource_type + \"/\""}],"source_content_type":"text/x-python","patch_set":15,"id":"da9df570_3173a7b2","line":390,"updated":"2014-09-24 15:11:50.000000000","message":"Idem. Maybe return 409? Just thinking.","commit_id":"4cc5aa84b002bfae0977eab843053bc8659660ca"},{"author":{"_account_id":2813,"name":"Mehdi Abaakouk","email":"sileht@sileht.net","username":"sileht"},"change_message_id":"8678b74357d5b99869105695866801601121aef6","unresolved":false,"context_lines":[{"line_number":387,"context_line":"                                    + \"/entity\","},{"line_number":388,"context_line":"                                    params\u003dentities,"},{"line_number":389,"context_line":"                                    expect_errors\u003dTrue)"},{"line_number":390,"context_line":"        self.assertEqual(400, result.status_code)"},{"line_number":391,"context_line":""},{"line_number":392,"context_line":"        result \u003d self.app.get(\"/v1/resource/\""},{"line_number":393,"context_line":"                              + self.resource_type + \"/\""}],"source_content_type":"text/x-python","patch_set":15,"id":"da9df570_71228f02","line":390,"in_reply_to":"da9df570_3173a7b2","updated":"2014-09-24 15:35:48.000000000","message":"Sure, It was my first thought :)","commit_id":"4cc5aa84b002bfae0977eab843053bc8659660ca"},{"author":{"_account_id":1669,"name":"Julien Danjou","display_name":"jd","email":"julien@danjou.info","username":"jdanjou"},"change_message_id":"b23c7cc780c76b45614cdf4589676bd4cf299ce1","unresolved":false,"context_lines":[{"line_number":404,"context_line":"                                    + \"/\" + self.attributes[\u0027id\u0027]"},{"line_number":405,"context_line":"                                    + \"/entity\","},{"line_number":406,"context_line":"                                    params\u003dentities)"},{"line_number":407,"context_line":"        self.assertEqual(204, result.status_code)"},{"line_number":408,"context_line":"        result \u003d self.app.get(\"/v1/resource/\""},{"line_number":409,"context_line":"                              + self.resource_type + \"/\""},{"line_number":410,"context_line":"                              + self.attributes[\u0027id\u0027])"}],"source_content_type":"text/x-python","patch_set":15,"id":"da9df570_71644fe5","line":407,"updated":"2014-09-24 15:11:50.000000000","message":"Ideam.","commit_id":"4cc5aa84b002bfae0977eab843053bc8659660ca"},{"author":{"_account_id":2813,"name":"Mehdi Abaakouk","email":"sileht@sileht.net","username":"sileht"},"change_message_id":"8678b74357d5b99869105695866801601121aef6","unresolved":false,"context_lines":[{"line_number":404,"context_line":"                                    + \"/\" + self.attributes[\u0027id\u0027]"},{"line_number":405,"context_line":"                                    + \"/entity\","},{"line_number":406,"context_line":"                                    params\u003dentities)"},{"line_number":407,"context_line":"        self.assertEqual(204, result.status_code)"},{"line_number":408,"context_line":"        result \u003d self.app.get(\"/v1/resource/\""},{"line_number":409,"context_line":"                              + self.resource_type + \"/\""},{"line_number":410,"context_line":"                              + self.attributes[\u0027id\u0027])"}],"source_content_type":"text/x-python","patch_set":15,"id":"da9df570_04701fa4","line":407,"in_reply_to":"da9df570_71644fe5","updated":"2014-09-24 15:35:48.000000000","message":"Done","commit_id":"4cc5aa84b002bfae0977eab843053bc8659660ca"}]}
