)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":5292,"name":"Christopher Yeoh","email":"cbkyeoh@gmail.com","username":"cyeoh-0"},"change_message_id":"8c9cf69107417fbd937b40ebb5847b5bdb8e8400","unresolved":false,"context_lines":[{"line_number":8,"context_line":""},{"line_number":9,"context_line":"fixes bug 1130609"},{"line_number":10,"context_line":""},{"line_number":11,"context_line":"The XML serializer for the update method in the as-services API extensions was"},{"line_number":12,"context_line":"not serializing the \"updated_at\" field because of a typo in the code."},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"Change-Id: I9fff0677e9bad650b19e559b3ed6e9bc0ffe8c3c"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"AAAAM3%2F%2BvAE%3D","line":11,"updated":"2013-02-20 12:07:49.000000000","message":"as-services -\u003e os-services","commit_id":"dfc5786dfa00fd82f3b3b82cf79212cadda9f884"},{"author":{"_account_id":1865,"name":"Andrea Rosa","email":"andrea.rosa@gmail.com","username":"andrea-rosa-m"},"change_message_id":"05dbd8a3b3193c0c206764537f8addd3518c5fc0","unresolved":false,"context_lines":[{"line_number":8,"context_line":""},{"line_number":9,"context_line":"fixes bug 1130609"},{"line_number":10,"context_line":""},{"line_number":11,"context_line":"The XML serializer for the update method in the as-services API extensions was"},{"line_number":12,"context_line":"not serializing the \"updated_at\" field because of a typo in the code."},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"Change-Id: I9fff0677e9bad650b19e559b3ed6e9bc0ffe8c3c"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"AAAAM3%2F%2Bu%2F4%3D","line":11,"in_reply_to":"AAAAM3%2F%2BvAE%3D","updated":"2013-02-20 12:10:06.000000000","message":"Done","commit_id":"dfc5786dfa00fd82f3b3b82cf79212cadda9f884"}],"doc/api_samples/os-services/service-disable-put-req.xml":[{"author":{"_account_id":679,"name":"Kevin L. Mitchell","email":"klmitch@mit.edu","username":"klmitch"},"change_message_id":"80e007a3669b6381f3ea98e39f0b5ca77df0cd76","unresolved":false,"context_lines":[{"line_number":2,"context_line":"\u003cservice\u003e"},{"line_number":3,"context_line":"  \u003chost\u003ehost1\u003c/host\u003e"},{"line_number":4,"context_line":"  \u003cbinary\u003enova-compute\u003c/binary\u003e"},{"line_number":5,"context_line":"\u003c/service\u003e"}],"source_content_type":"application/xml","patch_set":7,"id":"AAAAOH%2F%2FyBg%3D","line":5,"updated":"2013-03-27 17:58:26.000000000","message":"I\u0027d like to suggest altering the deserializer to accept a form similar to the response, e.g., \u003cservice host\u003d\"host1\" binary\u003d\"nova-compute\" /\u003e","commit_id":"340fd0da2bac2958ac664e52cf5058999ca522ad"},{"author":{"_account_id":1865,"name":"Andrea Rosa","email":"andrea.rosa@gmail.com","username":"andrea-rosa-m"},"change_message_id":"c2da680763010b7b919e5e3bd8d1831aee0dcb75","unresolved":false,"context_lines":[{"line_number":2,"context_line":"\u003cservice\u003e"},{"line_number":3,"context_line":"  \u003chost\u003ehost1\u003c/host\u003e"},{"line_number":4,"context_line":"  \u003cbinary\u003enova-compute\u003c/binary\u003e"},{"line_number":5,"context_line":"\u003c/service\u003e"}],"source_content_type":"application/xml","patch_set":7,"id":"AAAAOH%2F%2FxJs%3D","line":5,"in_reply_to":"AAAAOH%2F%2FyBg%3D","updated":"2013-03-28 10:39:29.000000000","message":"Done","commit_id":"340fd0da2bac2958ac664e52cf5058999ca522ad"}],"nova/api/openstack/compute/contrib/services.py":[{"author":{"_account_id":5441,"name":"Andrew Laski","email":"andrew@lascii.com","username":"alaski"},"change_message_id":"bd0ec35e8c5818a42c4bd63abca1da0521ae859a","unresolved":false,"context_lines":[{"line_number":108,"context_line":"            raise webob.exc.HTTPNotFound(\"Unknown action\")"},{"line_number":109,"context_line":""},{"line_number":110,"context_line":"        try:"},{"line_number":111,"context_line":"            host \u003d body[\u0027update\u0027][\u0027host\u0027]"},{"line_number":112,"context_line":"            service \u003d body[\u0027update\u0027][\u0027service\u0027]"},{"line_number":113,"context_line":"        except (TypeError, KeyError):"},{"line_number":114,"context_line":"            raise webob.exc.HTTPUnprocessableEntity()"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAM3%2F%2BqDg%3D","line":111,"updated":"2013-02-22 16:31:04.000000000","message":"Why did you change this to include \u0027update\u0027?  I would think you wouldn\u0027t need to update tests or current templates if you left this out.","commit_id":"f48c0dde2d05f35272b3bfd347c5b152a2b0f35c"},{"author":{"_account_id":5441,"name":"Andrew Laski","email":"andrew@lascii.com","username":"alaski"},"change_message_id":"2ba47947f0c0f816e5b7c92c27c302b0d4abf8b9","unresolved":false,"context_lines":[{"line_number":108,"context_line":"            raise webob.exc.HTTPNotFound(\"Unknown action\")"},{"line_number":109,"context_line":""},{"line_number":110,"context_line":"        try:"},{"line_number":111,"context_line":"            host \u003d body[\u0027update\u0027][\u0027host\u0027]"},{"line_number":112,"context_line":"            service \u003d body[\u0027update\u0027][\u0027service\u0027]"},{"line_number":113,"context_line":"        except (TypeError, KeyError):"},{"line_number":114,"context_line":"            raise webob.exc.HTTPUnprocessableEntity()"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAM3%2F%2Bptk%3D","line":111,"in_reply_to":"AAAAM3%2F%2Bp8E%3D","updated":"2013-02-22 19:17:40.000000000","message":"Makes sense.  Thanks for the explanation.  I agree that not writing a custom deserializer is the way to go.","commit_id":"f48c0dde2d05f35272b3bfd347c5b152a2b0f35c"},{"author":{"_account_id":1865,"name":"Andrea Rosa","email":"andrea.rosa@gmail.com","username":"andrea-rosa-m"},"change_message_id":"359eb608f98018f7a16955144d7f8a9dff258b7c","unresolved":false,"context_lines":[{"line_number":108,"context_line":"            raise webob.exc.HTTPNotFound(\"Unknown action\")"},{"line_number":109,"context_line":""},{"line_number":110,"context_line":"        try:"},{"line_number":111,"context_line":"            host \u003d body[\u0027update\u0027][\u0027host\u0027]"},{"line_number":112,"context_line":"            service \u003d body[\u0027update\u0027][\u0027service\u0027]"},{"line_number":113,"context_line":"        except (TypeError, KeyError):"},{"line_number":114,"context_line":"            raise webob.exc.HTTPUnprocessableEntity()"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAM3%2F%2Bp8E%3D","line":111,"in_reply_to":"AAAAM3%2F%2BqDg%3D","updated":"2013-02-22 17:31:02.000000000","message":"because the XML needs a root node to be a valid XML.\nIntroducing the root node I had to change the way we parse the body. \nThe other option was to write a custom deserializer, but I preferred this way. But let me know!","commit_id":"f48c0dde2d05f35272b3bfd347c5b152a2b0f35c"},{"author":{"_account_id":679,"name":"Kevin L. Mitchell","email":"klmitch@mit.edu","username":"klmitch"},"change_message_id":"b9a9cf2979026825291247455edfe1ed0ce9a788","unresolved":false,"context_lines":[{"line_number":102,"context_line":"                         \u0027updated_at\u0027: svc[\u0027updated_at\u0027]})"},{"line_number":103,"context_line":"        return {\u0027services\u0027: svcs}"},{"line_number":104,"context_line":""},{"line_number":105,"context_line":"    @wsgi.deserializers(xml\u003dServiceUpdateDeserializer)"},{"line_number":106,"context_line":"    def update(self, req, id, body):"},{"line_number":107,"context_line":"        \"\"\"Enable/Disable scheduling for a service.\"\"\""},{"line_number":108,"context_line":"        context \u003d req.environ[\u0027nova.context\u0027]"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAOH%2F%2Fzls%3D","line":105,"updated":"2013-03-26 20:28:03.000000000","message":"But now you have completely lost XML serialization on this…","commit_id":"3a30943192424d6b5dd39bf77c8c449d3ec216e3"},{"author":{"_account_id":679,"name":"Kevin L. Mitchell","email":"klmitch@mit.edu","username":"klmitch"},"change_message_id":"66ccab743c811bfafc293ff360b12b11e2f1eed1","unresolved":false,"context_lines":[{"line_number":102,"context_line":"                         \u0027updated_at\u0027: svc[\u0027updated_at\u0027]})"},{"line_number":103,"context_line":"        return {\u0027services\u0027: svcs}"},{"line_number":104,"context_line":""},{"line_number":105,"context_line":"    @wsgi.deserializers(xml\u003dServiceUpdateDeserializer)"},{"line_number":106,"context_line":"    def update(self, req, id, body):"},{"line_number":107,"context_line":"        \"\"\"Enable/Disable scheduling for a service.\"\"\""},{"line_number":108,"context_line":"        context \u003d req.environ[\u0027nova.context\u0027]"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAOH%2F%2FyH8%3D","line":105,"in_reply_to":"AAAAOH%2F%2FyJY%3D","updated":"2013-03-27 17:12:03.000000000","message":"I wrote the XML templates system for one major reason: to make it possible for extensions to manipulate the return entity, whether that entity was to be serialized to JSON or XML.  For the XML case, all the extension has to do is create a slave template and attach it.  However, the old XML serializer does not admit this same functionality; if you use it, a given extension will have its manipulations visible in the JSON result, but not in the XML result.\n\nAs I say, I had the default serializer in there to ease implementing templates; it meant I didn\u0027t need to write a monster patch and try to keep it conflict-free while trying to get enough reviewers to sign off on it.  However, now that everything is (should be) switched over to templates, it would probably be a very good idea to remove the default.","commit_id":"3a30943192424d6b5dd39bf77c8c449d3ec216e3"},{"author":{"_account_id":1865,"name":"Andrea Rosa","email":"andrea.rosa@gmail.com","username":"andrea-rosa-m"},"change_message_id":"73cfaa6418f8f802781e2c9e71235c4ce8f25200","unresolved":false,"context_lines":[{"line_number":102,"context_line":"                         \u0027updated_at\u0027: svc[\u0027updated_at\u0027]})"},{"line_number":103,"context_line":"        return {\u0027services\u0027: svcs}"},{"line_number":104,"context_line":""},{"line_number":105,"context_line":"    @wsgi.deserializers(xml\u003dServiceUpdateDeserializer)"},{"line_number":106,"context_line":"    def update(self, req, id, body):"},{"line_number":107,"context_line":"        \"\"\"Enable/Disable scheduling for a service.\"\"\""},{"line_number":108,"context_line":"        context \u003d req.environ[\u0027nova.context\u0027]"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAOH%2F%2FyJY%3D","line":105,"in_reply_to":"AAAAOH%2F%2Fzh4%3D","updated":"2013-03-27 17:00:48.000000000","message":"Thanks both for looking at this change. What Andrew did was exactly what I did, I found that the default serializer works fine so i decided to remove the custom one, also because it was not working properly. I didn\u0027t know that default serializers are deprecated and I don\u0027t think i get it,can you give me more information?\nIn the meantime I created a new patch with a custom serializer. I am going to upload it shortly","commit_id":"3a30943192424d6b5dd39bf77c8c449d3ec216e3"},{"author":{"_account_id":679,"name":"Kevin L. Mitchell","email":"klmitch@mit.edu","username":"klmitch"},"change_message_id":"b1d86e94707f06569fc87b49c022fa8d3ffcfc22","unresolved":false,"context_lines":[{"line_number":102,"context_line":"                         \u0027updated_at\u0027: svc[\u0027updated_at\u0027]})"},{"line_number":103,"context_line":"        return {\u0027services\u0027: svcs}"},{"line_number":104,"context_line":""},{"line_number":105,"context_line":"    @wsgi.deserializers(xml\u003dServiceUpdateDeserializer)"},{"line_number":106,"context_line":"    def update(self, req, id, body):"},{"line_number":107,"context_line":"        \"\"\"Enable/Disable scheduling for a service.\"\"\""},{"line_number":108,"context_line":"        context \u003d req.environ[\u0027nova.context\u0027]"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAOH%2F%2Fzh4%3D","line":105,"in_reply_to":"AAAAOH%2F%2Fzk0%3D","updated":"2013-03-26 20:48:05.000000000","message":"Yes, there is.  My goal (which I should probably get around to doing at some point) is to eliminate the default serializer.  Templates deprecate the old serializer, and that was just in there so I didn\u0027t have to update the entire nova API all at once.","commit_id":"3a30943192424d6b5dd39bf77c8c449d3ec216e3"},{"author":{"_account_id":5441,"name":"Andrew Laski","email":"andrew@lascii.com","username":"alaski"},"change_message_id":"acb0e397d2ec95fec94de2501d24f135fbf73447","unresolved":false,"context_lines":[{"line_number":102,"context_line":"                         \u0027updated_at\u0027: svc[\u0027updated_at\u0027]})"},{"line_number":103,"context_line":"        return {\u0027services\u0027: svcs}"},{"line_number":104,"context_line":""},{"line_number":105,"context_line":"    @wsgi.deserializers(xml\u003dServiceUpdateDeserializer)"},{"line_number":106,"context_line":"    def update(self, req, id, body):"},{"line_number":107,"context_line":"        \"\"\"Enable/Disable scheduling for a service.\"\"\""},{"line_number":108,"context_line":"        context \u003d req.environ[\u0027nova.context\u0027]"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAOH%2F%2Fzk0%3D","line":105,"in_reply_to":"AAAAOH%2F%2Fzls%3D","updated":"2013-03-26 20:32:36.000000000","message":"I was perplexed about this for a bit as well.  But some digging turned up that there\u0027s a default serializer that picks it up later.","commit_id":"3a30943192424d6b5dd39bf77c8c449d3ec216e3"},{"author":{"_account_id":679,"name":"Kevin L. Mitchell","email":"klmitch@mit.edu","username":"klmitch"},"change_message_id":"68208427729b71e0126cef9c476aaa11d22fcfd4","unresolved":false,"context_lines":[{"line_number":49,"context_line":""},{"line_number":50,"context_line":"class ServiceUpdateTemplate(xmlutil.TemplateBuilder):"},{"line_number":51,"context_line":"    def construct(self):"},{"line_number":52,"context_line":"        return xmlutil.MasterTemplate(xmlutil.make_flat_dict(\u0027service\u0027), 1)"},{"line_number":53,"context_line":""},{"line_number":54,"context_line":""},{"line_number":55,"context_line":"class ServiceUpdateDeserializer(wsgi.XMLDeserializer):"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAOH%2F%2FyF4%3D","line":52,"updated":"2013-03-27 17:21:50.000000000","message":"Honestly, I would prefer that we use the previous setup here to maintain some compatibility.  The reason the original template didn\u0027t work was because the selector on the root element was unset.  Using something like:\n\n    class ServicesUpdateTemplate(xmlutil.TemplateBuilder):\n        def construct(self):\n            root \u003d xmlutil.TemplateElement(\u0027service\u0027, selector\u003d\u0027service\u0027)\n            root.set(\u0027host\u0027)\n            root.set(\u0027binary\u0027)\n            root.set(\u0027status\u0027)\n\n            return xmlutil.MasterTemplate(root, 1)\n\nshould do exactly what I want.  For reference, what you have here results in the XML document:\n\n    \u003cservice\u003e\n        \u003chost\u003ehost_value\u003c/host\u003e\n        \u003cbinary\u003ebinary_value\u003c/binary\u003e\n        \u003cstatus\u003estatus_value\u003c/status\u003e\n    \u003c/service\u003e\n\nWhereas the original template, assuming a fix of the selector, would yield:\n\n    \u003chost host\u003d\"host_value\" binary\u003d\"binary_value\" status\u003d\"status_value\" /\u003e\n\nAnd my above-recommended template would yield:\n\n    \u003cservice host\u003d\"host_value\" binary\u003d\"binary_value\" status\u003d\"status_value\" /\u003e\n\nWhich I think is closer aligned to what existing consumers of this interface might be expecting.","commit_id":"f7c5f4913e27141c40a50f9b1750952d1bd94499"},{"author":{"_account_id":1865,"name":"Andrea Rosa","email":"andrea.rosa@gmail.com","username":"andrea-rosa-m"},"change_message_id":"4f6f3d0d9516e450ef64e9a2c23fb1880a363559","unresolved":false,"context_lines":[{"line_number":49,"context_line":""},{"line_number":50,"context_line":"class ServiceUpdateTemplate(xmlutil.TemplateBuilder):"},{"line_number":51,"context_line":"    def construct(self):"},{"line_number":52,"context_line":"        return xmlutil.MasterTemplate(xmlutil.make_flat_dict(\u0027service\u0027), 1)"},{"line_number":53,"context_line":""},{"line_number":54,"context_line":""},{"line_number":55,"context_line":"class ServiceUpdateDeserializer(wsgi.XMLDeserializer):"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAOH%2F%2FyC4%3D","line":52,"in_reply_to":"AAAAOH%2F%2FyF4%3D","updated":"2013-03-27 17:47:59.000000000","message":"Done","commit_id":"f7c5f4913e27141c40a50f9b1750952d1bd94499"}]}
