)]}'
{"guidelines/metadata.rst":[{"author":{"_account_id":10161,"name":"Shaunak Kashyap","email":"shaunak.kashyap@rackspace.com","username":"ycombinator"},"change_message_id":"d7b301d07e7c4f02714bd7e08369354ce016d01a","unresolved":false,"context_lines":[{"line_number":35,"context_line":""},{"line_number":36,"context_line":"    {"},{"line_number":37,"context_line":"        \"metadata\": {"},{"line_number":38,"context_line":"            \"foo\": \"Foo Value\","},{"line_number":39,"context_line":"            \"bar\": \"Bar Value\","},{"line_number":40,"context_line":"            \"baz\": \"Baz Value\""},{"line_number":41,"context_line":"        }"}],"source_content_type":"text/x-rst","patch_set":2,"id":"3a961159_bc42b865","line":38,"updated":"2014-12-12 09:09:58.000000000","message":"What do you think about the structure of this being:\n\n    {\n        \"metadata\": {\n            \"foo\": {\n                \"value\": \"Foo Value Updated\"\n            }\n        }\n    }\n\nThis way, when \"expanded\u003d1\" is specified, the basic structure remains the same, and only the \"links\" property is added to it like so:\n\n    {\n        \"metadata\": {\n            \"foo\": {\n                \"value\": \"Foo Value Updated\",\n                \"links\": [\n                    {\n                        \"href\": \"http://example.com:8774/servers/1234567890/metadata/foo\",\n                        \"rel\": \"self\"\n                    }\n                ]\n            }\n        }\n    }\n\nI see two advantages to this approach:\n\n1. By keeping the basic structure consistent between unexpanded and expanded requests, consumers of the API don\u0027t have to write different deserialization logic for each.\n\n2. By using an object (as opposed to an array) as the value of the \"metadata\" property in the expanded version, consumers of the API can easily lookup a metadata key rather than have to iterate over the array to find the key they are looking for.","commit_id":"4e7668f4705a624062bad69351348c01f72cfb3d"},{"author":{"_account_id":12606,"name":"Miguel Grinberg","email":"miguel.grinberg@gmail.com","username":"miguelgrinberg"},"change_message_id":"a80a3957a77c02c3b77d351842a72dd9cbf3efe3","unresolved":false,"context_lines":[{"line_number":35,"context_line":""},{"line_number":36,"context_line":"    {"},{"line_number":37,"context_line":"        \"metadata\": {"},{"line_number":38,"context_line":"            \"foo\": \"Foo Value\","},{"line_number":39,"context_line":"            \"bar\": \"Bar Value\","},{"line_number":40,"context_line":"            \"baz\": \"Baz Value\""},{"line_number":41,"context_line":"        }"}],"source_content_type":"text/x-rst","patch_set":2,"id":"3a961159_43b9e877","line":38,"in_reply_to":"3a961159_bc42b865","updated":"2014-12-12 15:28:36.000000000","message":"I could go a step further and say that if we go with what you propose we can always return the expanded representation.\n\nThe advantage of the plain dictionary, though, is that it is exactly the format the client needs, without any weird stuff around it. Consider that with your proposed solution accessing a metadata item would look kinda ugly: metadata[\u0027foo\u0027][\u0027value\u0027], instead of just metadata[\u0027foo\u0027].","commit_id":"4e7668f4705a624062bad69351348c01f72cfb3d"},{"author":{"_account_id":10161,"name":"Shaunak Kashyap","email":"shaunak.kashyap@rackspace.com","username":"ycombinator"},"change_message_id":"d7b301d07e7c4f02714bd7e08369354ce016d01a","unresolved":false,"context_lines":[{"line_number":140,"context_line":""},{"line_number":141,"context_line":"Example request::"},{"line_number":142,"context_line":""},{"line_number":143,"context_line":"    POST /servers/1234567890/metadata"},{"line_number":144,"context_line":"    {"},{"line_number":145,"context_line":"        \"key\": \"qux\","},{"line_number":146,"context_line":"        \"value\": \"Qux Value\""}],"source_content_type":"text/x-rst","patch_set":2,"id":"3a961159_fc552050","line":143,"updated":"2014-12-12 09:09:58.000000000","message":"Since the metadata key is known to the client prior to making the request (as opposed to being generated by the server), should the request be:\n\n    PUT /servers/1234567890/metadata/qux\n\n    Qux Value","commit_id":"4e7668f4705a624062bad69351348c01f72cfb3d"},{"author":{"_account_id":12606,"name":"Miguel Grinberg","email":"miguel.grinberg@gmail.com","username":"miguelgrinberg"},"change_message_id":"a80a3957a77c02c3b77d351842a72dd9cbf3efe3","unresolved":false,"context_lines":[{"line_number":140,"context_line":""},{"line_number":141,"context_line":"Example request::"},{"line_number":142,"context_line":""},{"line_number":143,"context_line":"    POST /servers/1234567890/metadata"},{"line_number":144,"context_line":"    {"},{"line_number":145,"context_line":"        \"key\": \"qux\","},{"line_number":146,"context_line":"        \"value\": \"Qux Value\""}],"source_content_type":"text/x-rst","patch_set":2,"id":"3a961159_2e09232c","line":143,"in_reply_to":"3a961159_fc552050","updated":"2014-12-12 15:28:36.000000000","message":"One of the principles I like to observe is that the client never generates URLs and instead navigates links provided by the server. The problem when clients generate resource URLs is that then the server is locked to those URLs and cannot make changes to them when necessary. This is the HATEOAS principle of REST APIs.\n\nIf all URLs are generated by the server and returned to clients, then the server is free to redesign URLs any time it needs. So here the idea is that the client will get the URLs from the \"expanded\u003d1\" request, and for a new metadata item the client needs to insert it first and then it will get the URL in the response.","commit_id":"4e7668f4705a624062bad69351348c01f72cfb3d"},{"author":{"_account_id":12807,"name":"Steve Lewis (stevelle)","email":"stevelle@gmail.com","username":"stevelle"},"change_message_id":"8f92ebf36425bf95e8eb31e05365e0f358c4e3b6","unresolved":false,"context_lines":[{"line_number":47,"context_line":"To add, remove, or change metadata items, a PUT request must be sent to the"},{"line_number":48,"context_line":"root metadata URL, with the updated complete list of metadata items in the"},{"line_number":49,"context_line":"body of the request. On success, the server responds with a 200 status code"},{"line_number":50,"context_line":"and the updated set of metadata items in the response body."},{"line_number":51,"context_line":""},{"line_number":52,"context_line":"Example request (updates \"foo\", removes \"bar\", adds \"qux\" and leaves \"baz\""},{"line_number":53,"context_line":"untouched)::"}],"source_content_type":"text/x-rst","patch_set":5,"id":"3a961159_01731816","line":50,"updated":"2014-12-17 18:28:05.000000000","message":"This phrasing may be slightly unclear. The response is not just the subset of the the metadata that was updated. The example below makes it clearer but we could possibly tighten the language.","commit_id":"3e5cd49bbe1922ab1918874aba34c1b60c557150"},{"author":{"_account_id":12606,"name":"Miguel Grinberg","email":"miguel.grinberg@gmail.com","username":"miguelgrinberg"},"change_message_id":"50a07ce2393268ec413bf6567fff982c8e5db1a8","unresolved":false,"context_lines":[{"line_number":47,"context_line":"To add, remove, or change metadata items, a PUT request must be sent to the"},{"line_number":48,"context_line":"root metadata URL, with the updated complete list of metadata items in the"},{"line_number":49,"context_line":"body of the request. On success, the server responds with a 200 status code"},{"line_number":50,"context_line":"and the updated set of metadata items in the response body."},{"line_number":51,"context_line":""},{"line_number":52,"context_line":"Example request (updates \"foo\", removes \"bar\", adds \"qux\" and leaves \"baz\""},{"line_number":53,"context_line":"untouched)::"}],"source_content_type":"text/x-rst","patch_set":5,"id":"3a961159_9c6c8338","line":50,"in_reply_to":"3a961159_01731816","updated":"2014-12-17 18:34:02.000000000","message":"Good point. I have clarified the working.","commit_id":"3e5cd49bbe1922ab1918874aba34c1b60c557150"},{"author":{"_account_id":1063,"name":"Ed Leafe","email":"ed@leafe.com","username":"ed-leafe"},"change_message_id":"63b38c4e38abcd311609f7db604c3e49398d912b","unresolved":false,"context_lines":[{"line_number":54,"context_line":""},{"line_number":55,"context_line":"    PUT /servers/1234567890/metadata"},{"line_number":56,"context_line":"    {"},{"line_number":57,"context_line":"        \"metadata\": {"},{"line_number":58,"context_line":"            \"foo\": \"Foo Value Updated\","},{"line_number":59,"context_line":"            \"baz\": \"Baz Value\","},{"line_number":60,"context_line":"            \"qux\": \"Qux Value\""}],"source_content_type":"text/x-rst","patch_set":6,"id":"3a961159_df4028a7","line":57,"updated":"2014-12-23 21:18:44.000000000","message":"I think that there is no need for the outer \u0027metadata\u0027 element, since the URI already specifies that this is metadata. The same comment goes for the response JSON.","commit_id":"798f61a6d21a4e1f5b28ef2a2c11802e777006ee"},{"author":{"_account_id":12606,"name":"Miguel Grinberg","email":"miguel.grinberg@gmail.com","username":"miguelgrinberg"},"change_message_id":"b27ab8f3d5ee7aa8050a80bd20a367dc1ba85d0c","unresolved":false,"context_lines":[{"line_number":54,"context_line":""},{"line_number":55,"context_line":"    PUT /servers/1234567890/metadata"},{"line_number":56,"context_line":"    {"},{"line_number":57,"context_line":"        \"metadata\": {"},{"line_number":58,"context_line":"            \"foo\": \"Foo Value Updated\","},{"line_number":59,"context_line":"            \"baz\": \"Baz Value\","},{"line_number":60,"context_line":"            \"qux\": \"Qux Value\""}],"source_content_type":"text/x-rst","patch_set":6,"id":"3a961159_ce831801","line":57,"in_reply_to":"3a961159_df4028a7","updated":"2014-12-24 02:06:16.000000000","message":"Ed, the idea is that this structure allows APIs to include other items that may be appropriate for them. For example, things such as pagination links can be added at the same level as the \"metadata\" key. If the actual key/value pairs are at the top level then there is no easy way to include these extra items.","commit_id":"798f61a6d21a4e1f5b28ef2a2c11802e777006ee"},{"author":{"_account_id":1063,"name":"Ed Leafe","email":"ed@leafe.com","username":"ed-leafe"},"change_message_id":"63b38c4e38abcd311609f7db604c3e49398d912b","unresolved":false,"context_lines":[{"line_number":121,"context_line":""},{"line_number":122,"context_line":"Example request::"},{"line_number":123,"context_line":""},{"line_number":124,"context_line":"    PUT /servers/1234567890/metadata/qux"},{"line_number":125,"context_line":"    {"},{"line_number":126,"context_line":"        \"key\": \"qux\","},{"line_number":127,"context_line":"        \"value\": \"Qux Value Updated\""}],"source_content_type":"text/x-rst","patch_set":6,"id":"3a961159_ff3b2435","line":124,"updated":"2014-12-23 21:18:44.000000000","message":"Again, it seems redundant to have to specify the key as \u0027qux\u0027 when you\u0027ve already specified it in the URI. What behavior should be expected if you PUT to the above URI, but specify \u0027foo\u0027 as the key below?","commit_id":"798f61a6d21a4e1f5b28ef2a2c11802e777006ee"},{"author":{"_account_id":12606,"name":"Miguel Grinberg","email":"miguel.grinberg@gmail.com","username":"miguelgrinberg"},"change_message_id":"b27ab8f3d5ee7aa8050a80bd20a367dc1ba85d0c","unresolved":false,"context_lines":[{"line_number":121,"context_line":""},{"line_number":122,"context_line":"Example request::"},{"line_number":123,"context_line":""},{"line_number":124,"context_line":"    PUT /servers/1234567890/metadata/qux"},{"line_number":125,"context_line":"    {"},{"line_number":126,"context_line":"        \"key\": \"qux\","},{"line_number":127,"context_line":"        \"value\": \"Qux Value Updated\""}],"source_content_type":"text/x-rst","patch_set":6,"id":"3a961159_4e6f2860","line":124,"in_reply_to":"3a961159_ff3b2435","updated":"2014-12-24 02:06:16.000000000","message":"Same thing here. If we do { \"key\": \"value\" } then we do not have a clear way to include additional items that further describe the metadata item. An example that could be useful in some APIs is an expiration date for the key/value pair.","commit_id":"798f61a6d21a4e1f5b28ef2a2c11802e777006ee"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"72b345cbae67602ddc9d27a618ca79cdbb601d48","unresolved":false,"context_lines":[{"line_number":44,"context_line":"Metadata Resource URLs"},{"line_number":45,"context_line":"----------------------"},{"line_number":46,"context_line":""},{"line_number":47,"context_line":"Sometimes it may be incovenient to work with the metadata portion of a resource"},{"line_number":48,"context_line":"using the complete resource representation, so metadata can also be exposed as"},{"line_number":49,"context_line":"a stand-alone resource. The root resource URL for metadata management must be"},{"line_number":50,"context_line":"the URL of the resource to which the metadata belongs, followed by */metadata*."}],"source_content_type":"text/x-rst","patch_set":7,"id":"9a80dd14_bd454044","line":47,"updated":"2015-03-09 21:08:43.000000000","message":"s/incovenient/inconvenient/","commit_id":"2cb575dd673d70506f7104d24599924c2af4cff9"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"72b345cbae67602ddc9d27a618ca79cdbb601d48","unresolved":false,"context_lines":[{"line_number":69,"context_line":"Response::"},{"line_number":70,"context_line":""},{"line_number":71,"context_line":"    {"},{"line_number":72,"context_line":"        \"metadata\": {"},{"line_number":73,"context_line":"            \"foo\": \"Foo Value\","},{"line_number":74,"context_line":"            \"bar\": \"Bar Value\","},{"line_number":75,"context_line":"            \"baz\": \"Baz Value\""}],"source_content_type":"text/x-rst","patch_set":7,"id":"9a80dd14_93e4edac","line":72,"updated":"2015-03-09 21:08:43.000000000","message":"Why is there \"metadata\" key in the outermost dict here? Shouldn\u0027t the returned JSON be:\n\n {\n   \"foo\": \"Foo Value\",\n   \"bar\": \"Bar Value\",\n   \"baz\": \"Baz Value\"\n }","commit_id":"2cb575dd673d70506f7104d24599924c2af4cff9"},{"author":{"_account_id":12606,"name":"Miguel Grinberg","email":"miguel.grinberg@gmail.com","username":"miguelgrinberg"},"change_message_id":"b7d19669abfddef3887a5f988d9884fd90a5009b","unresolved":false,"context_lines":[{"line_number":69,"context_line":"Response::"},{"line_number":70,"context_line":""},{"line_number":71,"context_line":"    {"},{"line_number":72,"context_line":"        \"metadata\": {"},{"line_number":73,"context_line":"            \"foo\": \"Foo Value\","},{"line_number":74,"context_line":"            \"bar\": \"Bar Value\","},{"line_number":75,"context_line":"            \"baz\": \"Baz Value\""}],"source_content_type":"text/x-rst","patch_set":7,"id":"9a80dd14_89803e8c","line":72,"in_reply_to":"9a80dd14_93e4edac","updated":"2015-03-09 22:56:44.000000000","message":"This matches the requirements for representation of collections: https://github.com/openstack/api-wg/blob/master/guidelines/representation_structure.rst#collection-resources.","commit_id":"2cb575dd673d70506f7104d24599924c2af4cff9"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"72b345cbae67602ddc9d27a618ca79cdbb601d48","unresolved":false,"context_lines":[{"line_number":93,"context_line":"            \"foo\": \"Foo Value Updated\","},{"line_number":94,"context_line":"            \"baz\": \"Baz Value\","},{"line_number":95,"context_line":"            \"qux\": \"Qux Value\""},{"line_number":96,"context_line":"        }"},{"line_number":97,"context_line":"    }"},{"line_number":98,"context_line":""},{"line_number":99,"context_line":"Response::"}],"source_content_type":"text/x-rst","patch_set":7,"id":"9a80dd14_f3f4495c","line":96,"updated":"2015-03-09 21:08:43.000000000","message":"Same comment above about unnecessary \"metadata\" outermost key","commit_id":"2cb575dd673d70506f7104d24599924c2af4cff9"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"72b345cbae67602ddc9d27a618ca79cdbb601d48","unresolved":false,"context_lines":[{"line_number":99,"context_line":"Response::"},{"line_number":100,"context_line":""},{"line_number":101,"context_line":"    {"},{"line_number":102,"context_line":"        \"metadata\": {"},{"line_number":103,"context_line":"            \"foo\": \"Foo Value Updated\","},{"line_number":104,"context_line":"            \"baz\": \"Baz Value\","},{"line_number":105,"context_line":"            \"qux\": \"Qux Value\""}],"source_content_type":"text/x-rst","patch_set":7,"id":"9a80dd14_13e8fd7a","line":102,"updated":"2015-03-09 21:08:43.000000000","message":"Same comment above about unnecessary \"metadata\" outermost key","commit_id":"2cb575dd673d70506f7104d24599924c2af4cff9"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"72b345cbae67602ddc9d27a618ca79cdbb601d48","unresolved":false,"context_lines":[{"line_number":135,"context_line":"    {"},{"line_number":136,"context_line":"        \"key\": \"qux\","},{"line_number":137,"context_line":"        \"value\": \"Qux Value\""},{"line_number":138,"context_line":"    }"},{"line_number":139,"context_line":""},{"line_number":140,"context_line":"Response::"},{"line_number":141,"context_line":""}],"source_content_type":"text/x-rst","patch_set":7,"id":"9a80dd14_93a94d26","line":138,"updated":"2015-03-09 21:08:43.000000000","message":"Why not:\n\n {\n   \"qux\": \"Qux Value\"\n }","commit_id":"2cb575dd673d70506f7104d24599924c2af4cff9"},{"author":{"_account_id":12606,"name":"Miguel Grinberg","email":"miguel.grinberg@gmail.com","username":"miguelgrinberg"},"change_message_id":"b7d19669abfddef3887a5f988d9884fd90a5009b","unresolved":false,"context_lines":[{"line_number":135,"context_line":"    {"},{"line_number":136,"context_line":"        \"key\": \"qux\","},{"line_number":137,"context_line":"        \"value\": \"Qux Value\""},{"line_number":138,"context_line":"    }"},{"line_number":139,"context_line":""},{"line_number":140,"context_line":"Response::"},{"line_number":141,"context_line":""}],"source_content_type":"text/x-rst","patch_set":7,"id":"9a80dd14_5f0a7426","line":138,"in_reply_to":"9a80dd14_93a94d26","updated":"2015-03-09 22:56:44.000000000","message":"In case there is a need to add additional data. Maybe an expiration date or some other attribute of the metadata pair. If we use the format you suggest we lose the ability to extend the representation in the future.","commit_id":"2cb575dd673d70506f7104d24599924c2af4cff9"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"72b345cbae67602ddc9d27a618ca79cdbb601d48","unresolved":false,"context_lines":[{"line_number":143,"context_line":"    {"},{"line_number":144,"context_line":"        \"key\": \"qux\","},{"line_number":145,"context_line":"        \"value\": \"Qux Value\","},{"line_number":146,"context_line":"    }"},{"line_number":147,"context_line":""},{"line_number":148,"context_line":"As shown in the above example, metadata items can be accessed individually by"},{"line_number":149,"context_line":"appending the key name to the root metatadata URL. The representation includes"}],"source_content_type":"text/x-rst","patch_set":7,"id":"9a80dd14_d3666529","line":146,"updated":"2015-03-09 21:08:43.000000000","message":"Why not:\n\n {\n   \"qux\": \"Qux Value\"\n }","commit_id":"2cb575dd673d70506f7104d24599924c2af4cff9"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"72b345cbae67602ddc9d27a618ca79cdbb601d48","unresolved":false,"context_lines":[{"line_number":160,"context_line":"    {"},{"line_number":161,"context_line":"        \"key\": \"qux\","},{"line_number":162,"context_line":"        \"value\": \"Qux Value Updated\""},{"line_number":163,"context_line":"    }"},{"line_number":164,"context_line":""},{"line_number":165,"context_line":"Response::"},{"line_number":166,"context_line":""}],"source_content_type":"text/x-rst","patch_set":7,"id":"9a80dd14_3347c178","line":163,"updated":"2015-03-09 21:08:43.000000000","message":"Why not:\n\n {\n   \"qux\": \"Qux Value Updated\"\n }\n\nOr even:\n\n PUT /servers/12345/metadata/qux\n Content-Type: plain/text\n Qux Value","commit_id":"2cb575dd673d70506f7104d24599924c2af4cff9"},{"author":{"_account_id":12606,"name":"Miguel Grinberg","email":"miguel.grinberg@gmail.com","username":"miguelgrinberg"},"change_message_id":"b7d19669abfddef3887a5f988d9884fd90a5009b","unresolved":false,"context_lines":[{"line_number":160,"context_line":"    {"},{"line_number":161,"context_line":"        \"key\": \"qux\","},{"line_number":162,"context_line":"        \"value\": \"Qux Value Updated\""},{"line_number":163,"context_line":"    }"},{"line_number":164,"context_line":""},{"line_number":165,"context_line":"Response::"},{"line_number":166,"context_line":""}],"source_content_type":"text/x-rst","patch_set":7,"id":"9a80dd14_fb3c1bca","line":163,"in_reply_to":"9a80dd14_3347c178","updated":"2015-03-09 22:56:44.000000000","message":"The limitation of sending the value as plain/text without the key is that you lose the ability to rename.","commit_id":"2cb575dd673d70506f7104d24599924c2af4cff9"},{"author":{"_account_id":12000,"name":"Ian Cordasco","email":"sigmavirus24@gmail.com","username":"sigmavirus24"},"change_message_id":"8fa71f1ff9611352ccbd0d40785f0c58ece0f1e4","unresolved":false,"context_lines":[{"line_number":160,"context_line":"    {"},{"line_number":161,"context_line":"        \"key\": \"qux\","},{"line_number":162,"context_line":"        \"value\": \"Qux Value Updated\""},{"line_number":163,"context_line":"    }"},{"line_number":164,"context_line":""},{"line_number":165,"context_line":"Response::"},{"line_number":166,"context_line":""}],"source_content_type":"text/x-rst","patch_set":7,"id":"9a80dd14_54cd9f85","line":163,"in_reply_to":"9a80dd14_fb3c1bca","updated":"2015-03-11 14:36:57.000000000","message":"Also if the server returns it as text/plain it absolutely has to include an encoding (charset) since, especially services like Swift, have a hard requirement on accepting any character encoding. Using JSON simplifies this since any encoding can be contained in one of UTF-8, UTF-16, and UTF-32. This means that the return value is far simpler. Further most clients will probably be sending \n\n    Accept: application/json\n\nAnd we should be honoring that.","commit_id":"2cb575dd673d70506f7104d24599924c2af4cff9"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"72b345cbae67602ddc9d27a618ca79cdbb601d48","unresolved":false,"context_lines":[{"line_number":167,"context_line":"    {"},{"line_number":168,"context_line":"        \"key\": \"qux\","},{"line_number":169,"context_line":"        \"value\": \"Qux Value Updated\""},{"line_number":170,"context_line":"    }"},{"line_number":171,"context_line":""},{"line_number":172,"context_line":"To delete a single metadata item without affecting the remaining ones, a"},{"line_number":173,"context_line":"DELETE request is sent to the metadata item URL. On success, the server"}],"source_content_type":"text/x-rst","patch_set":7,"id":"9a80dd14_b352d132","line":170,"updated":"2015-03-09 21:08:43.000000000","message":"Why not:\n\n {\n   \"qux\": \"Qux Value Updated\"\n }\n\nor even:\n\n Content-Type: text/plain\n Qux Value Updated","commit_id":"2cb575dd673d70506f7104d24599924c2af4cff9"},{"author":{"_account_id":10670,"name":"Michael McCune","email":"elmiko@redhat.com","username":"mimccune"},"change_message_id":"ab0b3404f009f200141ce678649250509ee58b4f","unresolved":false,"context_lines":[{"line_number":7,"context_line":"in OpenStack REST APIs."},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"For background on the REST guidelines referenced here, see the topic documents"},{"line_number":10,"context_line":"on :ref:`naming` and :ref:`http`."},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"Metadata Representation"},{"line_number":13,"context_line":"-----------------------"}],"source_content_type":"text/x-rst","patch_set":9,"id":"fa963961_6f738f81","line":10,"updated":"2015-03-27 15:24:17.000000000","message":"not sure why, but these ref\u0027s are causing issue.","commit_id":"6b164a5a415716a6a0123e1ee21dc620af01c64a"},{"author":{"_account_id":10670,"name":"Michael McCune","email":"elmiko@redhat.com","username":"mimccune"},"change_message_id":"ab0b3404f009f200141ce678649250509ee58b4f","unresolved":false,"context_lines":[{"line_number":46,"context_line":""},{"line_number":47,"context_line":"Per :rfc:`7159#section-8.1`, JSON documents shall be encoded in UTF-8, UTF-16,"},{"line_number":48,"context_line":"or UTF-32, with UTF-8 being the default and the recommended encoding for"},{"line_number":49,"context_line":"maximum interoperability. "},{"line_number":50,"context_line":""},{"line_number":51,"context_line":"Since the entire metadata representation is a JSON document, the encoding of"},{"line_number":52,"context_line":"the keys and values must match the encoding of the parent document. The use"}],"source_content_type":"text/x-rst","patch_set":9,"id":"fa963961_4fc20b87","line":49,"updated":"2015-03-27 15:24:17.000000000","message":"whitespace, and i think the test is choking on the rfc reference with the # in it.","commit_id":"6b164a5a415716a6a0123e1ee21dc620af01c64a"},{"author":{"_account_id":12606,"name":"Miguel Grinberg","email":"miguel.grinberg@gmail.com","username":"miguelgrinberg"},"change_message_id":"074b7935effafeef555a843a34acd8db908f8bfe","unresolved":false,"context_lines":[{"line_number":46,"context_line":""},{"line_number":47,"context_line":"Per :rfc:`7159#section-8.1`, JSON documents shall be encoded in UTF-8, UTF-16,"},{"line_number":48,"context_line":"or UTF-32, with UTF-8 being the default and the recommended encoding for"},{"line_number":49,"context_line":"maximum interoperability. "},{"line_number":50,"context_line":""},{"line_number":51,"context_line":"Since the entire metadata representation is a JSON document, the encoding of"},{"line_number":52,"context_line":"the keys and values must match the encoding of the parent document. The use"}],"source_content_type":"text/x-rst","patch_set":9,"id":"fa963961_4f7a0b26","line":49,"in_reply_to":"fa963961_4fc20b87","updated":"2015-03-27 15:27:43.000000000","message":"Odd, it was just the whitespace causing all the problems.","commit_id":"6b164a5a415716a6a0123e1ee21dc620af01c64a"},{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"1002a5d1faa25eb4bdf418444772efa0009d2291","unresolved":false,"context_lines":[{"line_number":146,"context_line":"endpoints to give clients the ability to work with individual metadata items."},{"line_number":147,"context_line":"If a project decides to implement this option, then each metadata key-value"},{"line_number":148,"context_line":"pair should be accessed individually at a URL formed by appending the key name"},{"line_number":149,"context_line":"to the root tag URL. Note that this option is not available for APIs that use"},{"line_number":150,"context_line":"user-generated URLs."},{"line_number":151,"context_line":""},{"line_number":152,"context_line":"To insert a single metadata item without having to send the entire metadata"}],"source_content_type":"text/x-rst","patch_set":11,"id":"dac4157f_54101301","line":149,"updated":"2015-04-22 10:13:43.000000000","message":"s/tag/metadata/   yeah?","commit_id":"2852f7b11d775321bb1997d8beb7aa1de34f4d5f"},{"author":{"_account_id":12606,"name":"Miguel Grinberg","email":"miguel.grinberg@gmail.com","username":"miguelgrinberg"},"change_message_id":"0699a48e48d79b11f1c8bdfb7b244d650b979a7f","unresolved":false,"context_lines":[{"line_number":146,"context_line":"endpoints to give clients the ability to work with individual metadata items."},{"line_number":147,"context_line":"If a project decides to implement this option, then each metadata key-value"},{"line_number":148,"context_line":"pair should be accessed individually at a URL formed by appending the key name"},{"line_number":149,"context_line":"to the root tag URL. Note that this option is not available for APIs that use"},{"line_number":150,"context_line":"user-generated URLs."},{"line_number":151,"context_line":""},{"line_number":152,"context_line":"To insert a single metadata item without having to send the entire metadata"}],"source_content_type":"text/x-rst","patch_set":11,"id":"dac4157f_f5cdd385","line":149,"in_reply_to":"dac4157f_54101301","updated":"2015-04-22 16:32:08.000000000","message":"Done","commit_id":"2852f7b11d775321bb1997d8beb7aa1de34f4d5f"}],"guidelines/naming.rst":[{"author":{"_account_id":1063,"name":"Ed Leafe","email":"ed@leafe.com","username":"ed-leafe"},"change_message_id":"2a32e6c9720a9e126354a6043a99d23c2ffd3877","unresolved":false,"context_lines":[{"line_number":1,"context_line":".. _naming:"},{"line_number":2,"context_line":""},{"line_number":3,"context_line":"Naming Conventions"},{"line_number":4,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"}],"source_content_type":"text/x-rst","patch_set":12,"id":"7ad32947_b9b59b7f","line":1,"updated":"2015-04-27 14:06:47.000000000","message":"Why is this included? It seems like an unrelated patch.","commit_id":"36ca474184e059f46c4488ec92c0dd10f2f8ded3"},{"author":{"_account_id":1063,"name":"Ed Leafe","email":"ed@leafe.com","username":"ed-leafe"},"change_message_id":"a95efb1abe84376e405f19d1eca502dbf51fbe8a","unresolved":false,"context_lines":[{"line_number":1,"context_line":".. _naming:"},{"line_number":2,"context_line":""},{"line_number":3,"context_line":"Naming Conventions"},{"line_number":4,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"}],"source_content_type":"text/x-rst","patch_set":12,"id":"3acd31a7_dcd485be","line":1,"in_reply_to":"3acd31a7_2dddb042","updated":"2015-04-30 22:07:33.000000000","message":"Well, that\u0027s pretty much the definition of an unrelated patch, no? :)","commit_id":"36ca474184e059f46c4488ec92c0dd10f2f8ded3"},{"author":{"_account_id":12606,"name":"Miguel Grinberg","email":"miguel.grinberg@gmail.com","username":"miguelgrinberg"},"change_message_id":"9c41e6f101f03d5fb7e96703dba5b6db87231876","unresolved":false,"context_lines":[{"line_number":1,"context_line":".. _naming:"},{"line_number":2,"context_line":""},{"line_number":3,"context_line":"Naming Conventions"},{"line_number":4,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"}],"source_content_type":"text/x-rst","patch_set":12,"id":"3acd31a7_2dddb042","line":1,"in_reply_to":"7ad32947_b9b59b7f","updated":"2015-04-30 00:33:05.000000000","message":"There is a reference to this page at the top of the tagging page, so this page needs a label.","commit_id":"36ca474184e059f46c4488ec92c0dd10f2f8ded3"}]}
