)]}'
{"trove/common/stream_codecs.py":[{"author":{"_account_id":9782,"name":"Morgan Jones","email":"morgan@tesora.com","username":"vgnbkr"},"change_message_id":"037625e09a2823d6c2534364bfd6df062b24d475","unresolved":false,"context_lines":[{"line_number":27,"context_line":"# Do not use \u0027os.linesep\u0027 when writing files in the text mode."},{"line_number":28,"context_line":"# Python does automatic conversion to platform-specific representation."},{"line_number":29,"context_line":"# \u0027\\n\u0027 would get converted twice and you would end up with \u0027\\r\\r\\n\u0027."},{"line_number":30,"context_line":"NEWLINE \u003d \u0027\\n\u0027"},{"line_number":31,"context_line":""},{"line_number":32,"context_line":""},{"line_number":33,"context_line":"class StringConverter(object):"}],"source_content_type":"text/x-python","patch_set":1,"id":"fa32b979_47dad579","line":30,"updated":"2015-06-16 15:16:05.000000000","message":"Then is this define really necessary?","commit_id":"ea96e33873edf78250f80f28812f49b849a900ed"},{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"9a1c2e61ac1a1293cedccdfbc33b348b06074188","unresolved":false,"context_lines":[{"line_number":77,"context_line":"        except Exception:"},{"line_number":78,"context_line":"            return value"},{"line_number":79,"context_line":""},{"line_number":80,"context_line":""},{"line_number":81,"context_line":"class StreamCodec(object):"},{"line_number":82,"context_line":""},{"line_number":83,"context_line":"    @abc.abstractmethod"}],"source_content_type":"text/x-python","patch_set":1,"id":"fa32b979_eb2add7d","line":80,"updated":"2015-06-16 12:32:01.000000000","message":"If you are using something from meta-programming, please add specific metaclass to abstract class (by telling abstract class here i mean a class that methods are all abstract).\n\n\n\n@six.metaclass(abc.ABC)","commit_id":"ea96e33873edf78250f80f28812f49b849a900ed"},{"author":{"_account_id":14576,"name":"Petr Malik","email":"pmalik@tesora.com","username":"pmalik"},"change_message_id":"dbb2c40e8307384f855d71bc9b8db17dc11e2ef9","unresolved":false,"context_lines":[{"line_number":77,"context_line":"        except Exception:"},{"line_number":78,"context_line":"            return value"},{"line_number":79,"context_line":""},{"line_number":80,"context_line":""},{"line_number":81,"context_line":"class StreamCodec(object):"},{"line_number":82,"context_line":""},{"line_number":83,"context_line":"    @abc.abstractmethod"}],"source_content_type":"text/x-python","patch_set":1,"id":"fa32b979_166f252c","line":80,"in_reply_to":"fa32b979_eb2add7d","updated":"2015-06-16 13:49:13.000000000","message":"Will take a look.","commit_id":"ea96e33873edf78250f80f28812f49b849a900ed"},{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"9a1c2e61ac1a1293cedccdfbc33b348b06074188","unresolved":false,"context_lines":[{"line_number":101,"context_line":"        return data"},{"line_number":102,"context_line":""},{"line_number":103,"context_line":"    def deserialize(self, stream):"},{"line_number":104,"context_line":"        return stream"},{"line_number":105,"context_line":""},{"line_number":106,"context_line":""},{"line_number":107,"context_line":"class YamlCodec(StreamCodec):"}],"source_content_type":"text/x-python","patch_set":1,"id":"fa32b979_8b7d5170","line":104,"updated":"2015-06-16 12:32:01.000000000","message":"why this class can\u0027t be a parent class for all codecs, it doesn\u0027t do anything just giving back what it gets.","commit_id":"ea96e33873edf78250f80f28812f49b849a900ed"},{"author":{"_account_id":14576,"name":"Petr Malik","email":"pmalik@tesora.com","username":"pmalik"},"change_message_id":"dbb2c40e8307384f855d71bc9b8db17dc11e2ef9","unresolved":false,"context_lines":[{"line_number":101,"context_line":"        return data"},{"line_number":102,"context_line":""},{"line_number":103,"context_line":"    def deserialize(self, stream):"},{"line_number":104,"context_line":"        return stream"},{"line_number":105,"context_line":""},{"line_number":106,"context_line":""},{"line_number":107,"context_line":"class YamlCodec(StreamCodec):"}],"source_content_type":"text/x-python","patch_set":1,"id":"fa32b979_76023171","line":104,"in_reply_to":"fa32b979_8b7d5170","updated":"2015-06-16 13:49:13.000000000","message":"Well, the StreamCodec just represents a common interface required from each codec implementation. By not providing the base implementation we require the user to explicitly override \nboth method.\nIt would be very very likely a bug to provide implementation for one but not the other.\nIt would also suggest that each codec really is an \u0027IdentityCodec\u0027 but that\u0027s not the case.","commit_id":"ea96e33873edf78250f80f28812f49b849a900ed"},{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"9a1c2e61ac1a1293cedccdfbc33b348b06074188","unresolved":false,"context_lines":[{"line_number":138,"context_line":"        return yaml.loader.Loader"},{"line_number":139,"context_line":""},{"line_number":140,"context_line":"    def _get_dumper(self):"},{"line_number":141,"context_line":"        return yaml.dumper.Dumper"},{"line_number":142,"context_line":""},{"line_number":143,"context_line":""},{"line_number":144,"context_line":"class SafeYamlCodec(YamlCodec):"}],"source_content_type":"text/x-python","patch_set":1,"id":"fa32b979_ab13750c","line":141,"updated":"2015-06-16 12:32:01.000000000","message":"Since _get_loader and _get_dumper is nothing but getters, you don\u0027t need to keep whole method for getting loaders and dumpers, you just need to keep private class attributes instead.","commit_id":"ea96e33873edf78250f80f28812f49b849a900ed"},{"author":{"_account_id":14576,"name":"Petr Malik","email":"pmalik@tesora.com","username":"pmalik"},"change_message_id":"dbb2c40e8307384f855d71bc9b8db17dc11e2ef9","unresolved":false,"context_lines":[{"line_number":138,"context_line":"        return yaml.loader.Loader"},{"line_number":139,"context_line":""},{"line_number":140,"context_line":"    def _get_dumper(self):"},{"line_number":141,"context_line":"        return yaml.dumper.Dumper"},{"line_number":142,"context_line":""},{"line_number":143,"context_line":""},{"line_number":144,"context_line":"class SafeYamlCodec(YamlCodec):"}],"source_content_type":"text/x-python","patch_set":1,"id":"fa32b979_d621bdfc","line":141,"in_reply_to":"fa32b979_ab13750c","updated":"2015-06-16 13:49:13.000000000","message":"+1 Will take a look at it.","commit_id":"ea96e33873edf78250f80f28812f49b849a900ed"},{"author":{"_account_id":9782,"name":"Morgan Jones","email":"morgan@tesora.com","username":"vgnbkr"},"change_message_id":"037625e09a2823d6c2534364bfd6df062b24d475","unresolved":false,"context_lines":[{"line_number":138,"context_line":"        return yaml.loader.Loader"},{"line_number":139,"context_line":""},{"line_number":140,"context_line":"    def _get_dumper(self):"},{"line_number":141,"context_line":"        return yaml.dumper.Dumper"},{"line_number":142,"context_line":""},{"line_number":143,"context_line":""},{"line_number":144,"context_line":"class SafeYamlCodec(YamlCodec):"}],"source_content_type":"text/x-python","patch_set":1,"id":"fa32b979_67135967","line":141,"in_reply_to":"fa32b979_d621bdfc","updated":"2015-06-16 15:16:05.000000000","message":"I would say just inline them.  They\u0027re clearly loader and dumper, pulling them out like that adds nothing.","commit_id":"ea96e33873edf78250f80f28812f49b849a900ed"},{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"9a1c2e61ac1a1293cedccdfbc33b348b06074188","unresolved":false,"context_lines":[{"line_number":155,"context_line":"        return yaml.loader.SafeLoader"},{"line_number":156,"context_line":""},{"line_number":157,"context_line":"    def _get_dumper(self):"},{"line_number":158,"context_line":"        return yaml.dumper.SafeDumper"},{"line_number":159,"context_line":""},{"line_number":160,"context_line":""},{"line_number":161,"context_line":"class IniCodec(StreamCodec):"}],"source_content_type":"text/x-python","patch_set":1,"id":"fa32b979_cb2d9947","line":158,"updated":"2015-06-16 12:32:01.000000000","message":"same here","commit_id":"ea96e33873edf78250f80f28812f49b849a900ed"},{"author":{"_account_id":9782,"name":"Morgan Jones","email":"morgan@tesora.com","username":"vgnbkr"},"change_message_id":"037625e09a2823d6c2534364bfd6df062b24d475","unresolved":false,"context_lines":[{"line_number":218,"context_line":""},{"line_number":219,"context_line":"        return buf"},{"line_number":220,"context_line":""},{"line_number":221,"context_line":"    def __init_config_parser(self, sections\u003dNone):"},{"line_number":222,"context_line":"        parser \u003d self._build_parser()"},{"line_number":223,"context_line":"        if sections:"},{"line_number":224,"context_line":"            for section in sections:"}],"source_content_type":"text/x-python","patch_set":1,"id":"fa32b979_4248832d","line":221,"updated":"2015-06-16 15:16:05.000000000","message":"So your intent here is to say \"this is REALLY REALLY private\"?  Just use single _\u0027s.","commit_id":"ea96e33873edf78250f80f28812f49b849a900ed"},{"author":{"_account_id":9782,"name":"Morgan Jones","email":"morgan@tesora.com","username":"vgnbkr"},"change_message_id":"037625e09a2823d6c2534364bfd6df062b24d475","unresolved":false,"context_lines":[{"line_number":229,"context_line":""},{"line_number":230,"context_line":"        return parser"},{"line_number":231,"context_line":""},{"line_number":232,"context_line":"    def _build_parser(self):"},{"line_number":233,"context_line":"        return SafeConfigParser(allow_no_value\u003dTrue)"},{"line_number":234,"context_line":""},{"line_number":235,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"fa32b979_42f643d8","line":232,"updated":"2015-06-16 15:16:05.000000000","message":"This would be easier to read if just inlined.","commit_id":"ea96e33873edf78250f80f28812f49b849a900ed"}],"trove/guestagent/common/configuration.py":[{"author":{"_account_id":9782,"name":"Morgan Jones","email":"morgan@tesora.com","username":"vgnbkr"},"change_message_id":"037625e09a2823d6c2534364bfd6df062b24d475","unresolved":false,"context_lines":[{"line_number":188,"context_line":"                self._override_strategy.apply_next(options)"},{"line_number":189,"context_line":"                self._current_revision \u003d self._current_revision + 1"},{"line_number":190,"context_line":"            else:"},{"line_number":191,"context_line":"                raise exception.TroveError("},{"line_number":192,"context_line":"                    _(\"This instance cannot have more than \u0027%d\u0027 \""},{"line_number":193,"context_line":"                      \"Configuration Groups attached.\")"},{"line_number":194,"context_line":"                    % self.max_num_overrides)"}],"source_content_type":"text/x-python","patch_set":1,"id":"fa32b979_226f7f2c","line":191,"updated":"2015-06-16 15:16:05.000000000","message":"This seems like something a caller could conceivably want to catch and handle.  Perhaps this should be a ConfigurationError?","commit_id":"ea96e33873edf78250f80f28812f49b849a900ed"},{"author":{"_account_id":9782,"name":"Morgan Jones","email":"morgan@tesora.com","username":"vgnbkr"},"change_message_id":"037625e09a2823d6c2534364bfd6df062b24d475","unresolved":false,"context_lines":[{"line_number":207,"context_line":"                self._override_strategy.remove_last(1)"},{"line_number":208,"context_line":"                self._current_revision \u003d self._current_revision - 1"},{"line_number":209,"context_line":"            else:"},{"line_number":210,"context_line":"                raise exception.TroveError("},{"line_number":211,"context_line":"                    _(\"This instance does not have a Configuration Group \""},{"line_number":212,"context_line":"                      \"attached.\"))"},{"line_number":213,"context_line":"        else:"}],"source_content_type":"text/x-python","patch_set":1,"id":"fa32b979_a2614f3b","line":210,"updated":"2015-06-16 15:16:05.000000000","message":"ditto","commit_id":"ea96e33873edf78250f80f28812f49b849a900ed"}],"trove/guestagent/common/operating_system.py":[{"author":{"_account_id":10215,"name":"Peter Stachowski","email":"peter@tesora.com","username":"peterstac"},"change_message_id":"fa8b8c641cd34a546b179e66a83c84647d782b37","unresolved":false,"context_lines":[{"line_number":104,"context_line":"        fp.write(codec.serialize(data))"},{"line_number":105,"context_line":"        fp.close()  # Release the resource before proceeding."},{"line_number":106,"context_line":"        utils.execute_with_timeout(\"cp\", \"-f\", fp.name, path,"},{"line_number":107,"context_line":"                                   run_as_root\u003dTrue, root_helper\u003d\"sudo\")"},{"line_number":108,"context_line":""},{"line_number":109,"context_line":""},{"line_number":110,"context_line":"class FileMode(object):"}],"source_content_type":"text/x-python","patch_set":3,"id":"fa32b979_edf560cb","line":107,"updated":"2015-06-19 17:41:10.000000000","message":"is there a reason you didn\u0027t use operating_system.copy for this?","commit_id":"7dd1ca1218666e57eedfbea8b916b9cd30ba4e7d"},{"author":{"_account_id":14576,"name":"Petr Malik","email":"pmalik@tesora.com","username":"pmalik"},"change_message_id":"02128f5f9d799df506a9f1905b4c9870c62053ad","unresolved":false,"context_lines":[{"line_number":104,"context_line":"        fp.write(codec.serialize(data))"},{"line_number":105,"context_line":"        fp.close()  # Release the resource before proceeding."},{"line_number":106,"context_line":"        utils.execute_with_timeout(\"cp\", \"-f\", fp.name, path,"},{"line_number":107,"context_line":"                                   run_as_root\u003dTrue, root_helper\u003d\"sudo\")"},{"line_number":108,"context_line":""},{"line_number":109,"context_line":""},{"line_number":110,"context_line":"class FileMode(object):"}],"source_content_type":"text/x-python","patch_set":3,"id":"fa32b979_50a0a3a5","line":107,"in_reply_to":"fa32b979_edf560cb","updated":"2015-06-19 17:54:54.000000000","message":"No. Good catch.","commit_id":"7dd1ca1218666e57eedfbea8b916b9cd30ba4e7d"}],"trove/tests/unittests/common/test_utils.py":[{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"9a1c2e61ac1a1293cedccdfbc33b348b06074188","unresolved":false,"context_lines":[{"line_number":75,"context_line":""},{"line_number":76,"context_line":"        self.assertEqual(None, utils.unpack_singleton(None))"},{"line_number":77,"context_line":""},{"line_number":78,"context_line":"        self.assertEqual([None, None], utils.unpack_singleton([None, None]))"}],"source_content_type":"text/x-python","patch_set":1,"id":"fa32b979_d04b0886","line":78,"updated":"2015-06-16 12:32:01.000000000","message":"Too many empty lines.","commit_id":"ea96e33873edf78250f80f28812f49b849a900ed"},{"author":{"_account_id":14576,"name":"Petr Malik","email":"pmalik@tesora.com","username":"pmalik"},"change_message_id":"dbb2c40e8307384f855d71bc9b8db17dc11e2ef9","unresolved":false,"context_lines":[{"line_number":75,"context_line":""},{"line_number":76,"context_line":"        self.assertEqual(None, utils.unpack_singleton(None))"},{"line_number":77,"context_line":""},{"line_number":78,"context_line":"        self.assertEqual([None, None], utils.unpack_singleton([None, None]))"}],"source_content_type":"text/x-python","patch_set":1,"id":"fa32b979_f68f21ca","line":78,"in_reply_to":"fa32b979_d04b0886","updated":"2015-06-16 13:49:13.000000000","message":"+1 Yeah, will squeeze it a bit.","commit_id":"ea96e33873edf78250f80f28812f49b849a900ed"},{"author":{"_account_id":10215,"name":"Peter Stachowski","email":"peter@tesora.com","username":"peterstac"},"change_message_id":"fa8b8c641cd34a546b179e66a83c84647d782b37","unresolved":false,"context_lines":[{"line_number":69,"context_line":"        self.assertEqual(\u0027test\u0027, utils.unpack_singleton([\u0027test\u0027]))"},{"line_number":70,"context_line":"        self.assertEqual([], utils.unpack_singleton([]))"},{"line_number":71,"context_line":"        self.assertEqual(None, utils.unpack_singleton(None))"},{"line_number":72,"context_line":"        self.assertEqual([None, None], utils.unpack_singleton([None, None]))"}],"source_content_type":"text/x-python","patch_set":3,"id":"fa32b979_8d1ff4b6","line":72,"updated":"2015-06-19 17:41:10.000000000","message":"From my reading of the code, unpack_singleton is recursive, but I see no recursive tests here.  How about:\n\n  self.assertEqual(\u0027test\u0027, utils.unpack_singleton([[\u0027test\u0027]]))\n  self.assertEqual([1, 2, 3], utils.unpack_singleton([[1, 2, 3]]))","commit_id":"7dd1ca1218666e57eedfbea8b916b9cd30ba4e7d"},{"author":{"_account_id":14576,"name":"Petr Malik","email":"pmalik@tesora.com","username":"pmalik"},"change_message_id":"02128f5f9d799df506a9f1905b4c9870c62053ad","unresolved":false,"context_lines":[{"line_number":69,"context_line":"        self.assertEqual(\u0027test\u0027, utils.unpack_singleton([\u0027test\u0027]))"},{"line_number":70,"context_line":"        self.assertEqual([], utils.unpack_singleton([]))"},{"line_number":71,"context_line":"        self.assertEqual(None, utils.unpack_singleton(None))"},{"line_number":72,"context_line":"        self.assertEqual([None, None], utils.unpack_singleton([None, None]))"}],"source_content_type":"text/x-python","patch_set":3,"id":"fa32b979_d07b5328","line":72,"in_reply_to":"fa32b979_8d1ff4b6","updated":"2015-06-19 17:54:54.000000000","message":"Good catch too. Will add.","commit_id":"7dd1ca1218666e57eedfbea8b916b9cd30ba4e7d"}],"trove/tests/unittests/guestagent/test_configuration.py":[{"author":{"_account_id":7806,"name":"Sushil Kumar","email":"skm.net@gmail.com","username":"sushilkm"},"change_message_id":"5a2536fb34ebef17815d1006e04e2341e9fffb75","unresolved":false,"context_lines":[{"line_number":569,"context_line":"            manager.remove_override()"},{"line_number":570,"context_line":"            self.assertEqual(\u0027pi\u0027, manager.get_value(\u0027Section_1\u0027)[\u0027name\u0027])"},{"line_number":571,"context_line":"            self.assertEqual(\u00273.1415\u0027, manager.get_value(\u0027Section_1\u0027)[\u0027value\u0027])"},{"line_number":572,"context_line":"            self.assertEqual(None, manager.get_value(\u0027Section_2\u0027))"},{"line_number":573,"context_line":"            self.assertEqual(0, manager.current_revision)"},{"line_number":574,"context_line":""},{"line_number":575,"context_line":"            manager.update_configuration({\u0027System\u0027: {\u0027value\u0027: \u0027N/A\u0027}})"}],"source_content_type":"text/x-python","patch_set":9,"id":"ba3cc151_ce363603","line":572,"updated":"2015-06-30 07:06:07.000000000","message":"self.assertNone","commit_id":"d37a99e584c5f56f8838e33c95e997e762f4e9f4"}]}
