)]}'
{"designate/api/v2/controllers/zonefile.py":[{"author":{"_account_id":8099,"name":"Graham Hayes","email":"gr@ham.ie","username":"graham"},"change_message_id":"f7d1d78561ae7a229871b8c4371df08303138ee5","unresolved":false,"context_lines":[{"line_number":16,"context_line":""},{"line_number":17,"context_line":"import dns.zone"},{"line_number":18,"context_line":"import pecan"},{"line_number":19,"context_line":"import designate.exceptions"},{"line_number":20,"context_line":"from designate import utils"},{"line_number":21,"context_line":"from designate.api.v2.controllers import rest"},{"line_number":22,"context_line":"from designate.api.v2.views import zones as zones_view"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAS3%2F%2FJSs%3D","line":19,"updated":"2013-10-03 15:21:07.000000000","message":"should this be \"from designate import exceptions\" ?\njust to keep in the same style as the rest of the imports","commit_id":"db0f9b0b87ed7a53c6987844c86dad0b2036d2aa"},{"author":{"_account_id":8864,"name":"Artom Lifshitz","email":"notartom@gmail.com","username":"artom"},"change_message_id":"c49e0b6d88ea332aebb300a2b0a93d0e47012881","unresolved":false,"context_lines":[{"line_number":16,"context_line":""},{"line_number":17,"context_line":"import dns.zone"},{"line_number":18,"context_line":"import pecan"},{"line_number":19,"context_line":"import designate.exceptions"},{"line_number":20,"context_line":"from designate import utils"},{"line_number":21,"context_line":"from designate.api.v2.controllers import rest"},{"line_number":22,"context_line":"from designate.api.v2.views import zones as zones_view"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAS3%2F%2FJEE%3D","line":19,"in_reply_to":"AAAAS3%2F%2FJSs%3D","updated":"2013-10-03 16:16:44.000000000","message":"Done","commit_id":"db0f9b0b87ed7a53c6987844c86dad0b2036d2aa"},{"author":{"_account_id":8099,"name":"Graham Hayes","email":"gr@ham.ie","username":"graham"},"change_message_id":"f7d1d78561ae7a229871b8c4371df08303138ee5","unresolved":false,"context_lines":[{"line_number":23,"context_line":"from designate.central import rpcapi as central_rpcapi"},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"central_api \u003d central_rpcapi.CentralAPI()"},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"class ZonefileController(rest.RestController):"},{"line_number":28,"context_line":"    _view \u003d zones_view.ZonesView()"},{"line_number":29,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAS3%2F%2FJSo%3D","line":26,"updated":"2013-10-03 15:21:07.000000000","message":"flake8 - 2 lines before a class definition","commit_id":"db0f9b0b87ed7a53c6987844c86dad0b2036d2aa"},{"author":{"_account_id":8864,"name":"Artom Lifshitz","email":"notartom@gmail.com","username":"artom"},"change_message_id":"c49e0b6d88ea332aebb300a2b0a93d0e47012881","unresolved":false,"context_lines":[{"line_number":23,"context_line":"from designate.central import rpcapi as central_rpcapi"},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"central_api \u003d central_rpcapi.CentralAPI()"},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"class ZonefileController(rest.RestController):"},{"line_number":28,"context_line":"    _view \u003d zones_view.ZonesView()"},{"line_number":29,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAS3%2F%2FJD4%3D","line":26,"in_reply_to":"AAAAS3%2F%2FJSo%3D","updated":"2013-10-03 16:16:44.000000000","message":"Done","commit_id":"db0f9b0b87ed7a53c6987844c86dad0b2036d2aa"},{"author":{"_account_id":8099,"name":"Graham Hayes","email":"gr@ham.ie","username":"graham"},"change_message_id":"f7d1d78561ae7a229871b8c4371df08303138ee5","unresolved":false,"context_lines":[{"line_number":41,"context_line":"        }"},{"line_number":42,"context_line":"        return central_api.create_domain(context, values)"},{"line_number":43,"context_line":""},{"line_number":44,"context_line":""},{"line_number":45,"context_line":"    def _create_servers(self, context, dnszone):"},{"line_number":46,"context_line":"        \"\"\" Creates the servers \"\"\""},{"line_number":47,"context_line":"        servers \u003d [server[\u0027name\u0027] for server"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAS3%2F%2FJSk%3D","line":44,"updated":"2013-10-03 15:21:07.000000000","message":"flake8 - 1 line before a function definition","commit_id":"db0f9b0b87ed7a53c6987844c86dad0b2036d2aa"},{"author":{"_account_id":8864,"name":"Artom Lifshitz","email":"notartom@gmail.com","username":"artom"},"change_message_id":"c49e0b6d88ea332aebb300a2b0a93d0e47012881","unresolved":false,"context_lines":[{"line_number":41,"context_line":"        }"},{"line_number":42,"context_line":"        return central_api.create_domain(context, values)"},{"line_number":43,"context_line":""},{"line_number":44,"context_line":""},{"line_number":45,"context_line":"    def _create_servers(self, context, dnszone):"},{"line_number":46,"context_line":"        \"\"\" Creates the servers \"\"\""},{"line_number":47,"context_line":"        servers \u003d [server[\u0027name\u0027] for server"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAS3%2F%2FJDw%3D","line":44,"in_reply_to":"AAAAS3%2F%2FJSk%3D","updated":"2013-10-03 16:16:44.000000000","message":"Done","commit_id":"db0f9b0b87ed7a53c6987844c86dad0b2036d2aa"},{"author":{"_account_id":8099,"name":"Graham Hayes","email":"gr@ham.ie","username":"graham"},"change_message_id":"f7d1d78561ae7a229871b8c4371df08303138ee5","unresolved":false,"context_lines":[{"line_number":45,"context_line":"    def _create_servers(self, context, dnszone):"},{"line_number":46,"context_line":"        \"\"\" Creates the servers \"\"\""},{"line_number":47,"context_line":"        servers \u003d [server[\u0027name\u0027] for server"},{"line_number":48,"context_line":"                                  in central_api.find_servers(context)]"},{"line_number":49,"context_line":"        new_servers \u003d dnszone.get_rdataset(dnszone.origin, \u0027NS\u0027)"},{"line_number":50,"context_line":"        for new_server in new_servers:"},{"line_number":51,"context_line":"            new_server_name \u003d new_server.target.to_text()"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAS3%2F%2FJSA%3D","line":48,"updated":"2013-10-03 15:21:07.000000000","message":"flake8 - the \"in\" needs to come under the s in the first \u0027server\u0027 on the line above","commit_id":"db0f9b0b87ed7a53c6987844c86dad0b2036d2aa"},{"author":{"_account_id":8864,"name":"Artom Lifshitz","email":"notartom@gmail.com","username":"artom"},"change_message_id":"c49e0b6d88ea332aebb300a2b0a93d0e47012881","unresolved":false,"context_lines":[{"line_number":45,"context_line":"    def _create_servers(self, context, dnszone):"},{"line_number":46,"context_line":"        \"\"\" Creates the servers \"\"\""},{"line_number":47,"context_line":"        servers \u003d [server[\u0027name\u0027] for server"},{"line_number":48,"context_line":"                                  in central_api.find_servers(context)]"},{"line_number":49,"context_line":"        new_servers \u003d dnszone.get_rdataset(dnszone.origin, \u0027NS\u0027)"},{"line_number":50,"context_line":"        for new_server in new_servers:"},{"line_number":51,"context_line":"            new_server_name \u003d new_server.target.to_text()"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAS3%2F%2FJDo%3D","line":48,"in_reply_to":"AAAAS3%2F%2FJSA%3D","updated":"2013-10-03 16:16:44.000000000","message":"Done","commit_id":"db0f9b0b87ed7a53c6987844c86dad0b2036d2aa"},{"author":{"_account_id":8099,"name":"Graham Hayes","email":"gr@ham.ie","username":"graham"},"change_message_id":"f7d1d78561ae7a229871b8c4371df08303138ee5","unresolved":false,"context_lines":[{"line_number":49,"context_line":"        new_servers \u003d dnszone.get_rdataset(dnszone.origin, \u0027NS\u0027)"},{"line_number":50,"context_line":"        for new_server in new_servers:"},{"line_number":51,"context_line":"            new_server_name \u003d new_server.target.to_text()"},{"line_number":52,"context_line":"            if new_server_name not in servers:"},{"line_number":53,"context_line":"                values \u003d {"},{"line_number":54,"context_line":"                    \u0027name\u0027: new_server_name"},{"line_number":55,"context_line":"                }"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAS3%2F%2FJPs%3D","line":52,"updated":"2013-10-03 15:21:07.000000000","message":"Maybe do this in a try / catch, submit all servers, and catch the \"DuplicateServer\" event if it is a duplicate?","commit_id":"db0f9b0b87ed7a53c6987844c86dad0b2036d2aa"},{"author":{"_account_id":8864,"name":"Artom Lifshitz","email":"notartom@gmail.com","username":"artom"},"change_message_id":"c49e0b6d88ea332aebb300a2b0a93d0e47012881","unresolved":false,"context_lines":[{"line_number":49,"context_line":"        new_servers \u003d dnszone.get_rdataset(dnszone.origin, \u0027NS\u0027)"},{"line_number":50,"context_line":"        for new_server in new_servers:"},{"line_number":51,"context_line":"            new_server_name \u003d new_server.target.to_text()"},{"line_number":52,"context_line":"            if new_server_name not in servers:"},{"line_number":53,"context_line":"                values \u003d {"},{"line_number":54,"context_line":"                    \u0027name\u0027: new_server_name"},{"line_number":55,"context_line":"                }"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAS3%2F%2FJBc%3D","line":52,"in_reply_to":"AAAAS3%2F%2FJPs%3D","updated":"2013-10-03 16:16:44.000000000","message":"Say someone batch-imports a lot of zones, all with the same NS. That\u0027s a lot of requests to Central that should be avoided...","commit_id":"db0f9b0b87ed7a53c6987844c86dad0b2036d2aa"},{"author":{"_account_id":8099,"name":"Graham Hayes","email":"gr@ham.ie","username":"graham"},"change_message_id":"f7d1d78561ae7a229871b8c4371df08303138ee5","unresolved":false,"context_lines":[{"line_number":55,"context_line":"                }"},{"line_number":56,"context_line":"                central_api.create_server(context, values)"},{"line_number":57,"context_line":""},{"line_number":58,"context_line":""},{"line_number":59,"context_line":"    def _create_records(self, context, zone_id, dnszone):"},{"line_number":60,"context_line":"        \"\"\" Creates the records \"\"\""},{"line_number":61,"context_line":"        for record_name in dnszone.nodes.keys():"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAS3%2F%2FJR8%3D","line":58,"updated":"2013-10-03 15:21:07.000000000","message":"flake8 - 1 line before a function definition","commit_id":"db0f9b0b87ed7a53c6987844c86dad0b2036d2aa"},{"author":{"_account_id":8864,"name":"Artom Lifshitz","email":"notartom@gmail.com","username":"artom"},"change_message_id":"c49e0b6d88ea332aebb300a2b0a93d0e47012881","unresolved":false,"context_lines":[{"line_number":55,"context_line":"                }"},{"line_number":56,"context_line":"                central_api.create_server(context, values)"},{"line_number":57,"context_line":""},{"line_number":58,"context_line":""},{"line_number":59,"context_line":"    def _create_records(self, context, zone_id, dnszone):"},{"line_number":60,"context_line":"        \"\"\" Creates the records \"\"\""},{"line_number":61,"context_line":"        for record_name in dnszone.nodes.keys():"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAS3%2F%2FJBU%3D","line":58,"in_reply_to":"AAAAS3%2F%2FJR8%3D","updated":"2013-10-03 16:16:44.000000000","message":"Done","commit_id":"db0f9b0b87ed7a53c6987844c86dad0b2036d2aa"},{"author":{"_account_id":8099,"name":"Graham Hayes","email":"gr@ham.ie","username":"graham"},"change_message_id":"f7d1d78561ae7a229871b8c4371df08303138ee5","unresolved":false,"context_lines":[{"line_number":78,"context_line":"                        }"},{"line_number":79,"context_line":"                        central_api.create_record(context, zone_id, values)"},{"line_number":80,"context_line":""},{"line_number":81,"context_line":""},{"line_number":82,"context_line":"    def _parse_request(self, request):"},{"line_number":83,"context_line":"        \"\"\" Parses the POSTed zonefile into a dnspython zone object \"\"\""},{"line_number":84,"context_line":"        if request.headers[\u0027Content-type\u0027] !\u003d \u0027text/dns\u0027:"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAS3%2F%2FJR0%3D","line":81,"updated":"2013-10-03 15:21:07.000000000","message":"flake8 - 1 line before a function definition","commit_id":"db0f9b0b87ed7a53c6987844c86dad0b2036d2aa"},{"author":{"_account_id":8864,"name":"Artom Lifshitz","email":"notartom@gmail.com","username":"artom"},"change_message_id":"c49e0b6d88ea332aebb300a2b0a93d0e47012881","unresolved":false,"context_lines":[{"line_number":78,"context_line":"                        }"},{"line_number":79,"context_line":"                        central_api.create_record(context, zone_id, values)"},{"line_number":80,"context_line":""},{"line_number":81,"context_line":""},{"line_number":82,"context_line":"    def _parse_request(self, request):"},{"line_number":83,"context_line":"        \"\"\" Parses the POSTed zonefile into a dnspython zone object \"\"\""},{"line_number":84,"context_line":"        if request.headers[\u0027Content-type\u0027] !\u003d \u0027text/dns\u0027:"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAS3%2F%2FJBQ%3D","line":81,"in_reply_to":"AAAAS3%2F%2FJR0%3D","updated":"2013-10-03 16:16:44.000000000","message":"Done","commit_id":"db0f9b0b87ed7a53c6987844c86dad0b2036d2aa"},{"author":{"_account_id":8099,"name":"Graham Hayes","email":"gr@ham.ie","username":"graham"},"change_message_id":"f7d1d78561ae7a229871b8c4371df08303138ee5","unresolved":false,"context_lines":[{"line_number":86,"context_line":"                                                    \u0027 text/dns\u0027)"},{"line_number":87,"context_line":"        try:"},{"line_number":88,"context_line":"            dnszone \u003d dns.zone.from_text(request.body,"},{"line_number":89,"context_line":"                                         # Don\u0027t relativize, otherwise we end up"},{"line_number":90,"context_line":"                                         # with \u0027@\u0027 record names."},{"line_number":91,"context_line":"                                         relativize\u003dFalse,"},{"line_number":92,"context_line":"                                         # Dont check origin, we allow missing NS"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAS3%2F%2FJRs%3D","line":89,"updated":"2013-10-03 15:21:07.000000000","message":"flake8 - the comment lines are over 79 chars","commit_id":"db0f9b0b87ed7a53c6987844c86dad0b2036d2aa"},{"author":{"_account_id":8864,"name":"Artom Lifshitz","email":"notartom@gmail.com","username":"artom"},"change_message_id":"c49e0b6d88ea332aebb300a2b0a93d0e47012881","unresolved":false,"context_lines":[{"line_number":86,"context_line":"                                                    \u0027 text/dns\u0027)"},{"line_number":87,"context_line":"        try:"},{"line_number":88,"context_line":"            dnszone \u003d dns.zone.from_text(request.body,"},{"line_number":89,"context_line":"                                         # Don\u0027t relativize, otherwise we end up"},{"line_number":90,"context_line":"                                         # with \u0027@\u0027 record names."},{"line_number":91,"context_line":"                                         relativize\u003dFalse,"},{"line_number":92,"context_line":"                                         # Dont check origin, we allow missing NS"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAS3%2F%2FJBM%3D","line":89,"in_reply_to":"AAAAS3%2F%2FJRs%3D","updated":"2013-10-03 16:16:44.000000000","message":"Done","commit_id":"db0f9b0b87ed7a53c6987844c86dad0b2036d2aa"},{"author":{"_account_id":8099,"name":"Graham Hayes","email":"gr@ham.ie","username":"graham"},"change_message_id":"f7d1d78561ae7a229871b8c4371df08303138ee5","unresolved":false,"context_lines":[{"line_number":100,"context_line":"        except dns.exception.SyntaxError:"},{"line_number":101,"context_line":"            raise exceptions.BadRequest(\u0027Malformed zonefile.\u0027)"},{"line_number":102,"context_line":"        return dnszone"},{"line_number":103,"context_line":""},{"line_number":104,"context_line":""},{"line_number":105,"context_line":"    @pecan.expose(template\u003d\u0027json:\u0027, content_type\u003d\u0027application/json\u0027)"},{"line_number":106,"context_line":"    def post(self):"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAS3%2F%2FJRo%3D","line":103,"updated":"2013-10-03 15:21:07.000000000","message":"flake8 - 1 line before a function definition","commit_id":"db0f9b0b87ed7a53c6987844c86dad0b2036d2aa"},{"author":{"_account_id":8864,"name":"Artom Lifshitz","email":"notartom@gmail.com","username":"artom"},"change_message_id":"c49e0b6d88ea332aebb300a2b0a93d0e47012881","unresolved":false,"context_lines":[{"line_number":100,"context_line":"        except dns.exception.SyntaxError:"},{"line_number":101,"context_line":"            raise exceptions.BadRequest(\u0027Malformed zonefile.\u0027)"},{"line_number":102,"context_line":"        return dnszone"},{"line_number":103,"context_line":""},{"line_number":104,"context_line":""},{"line_number":105,"context_line":"    @pecan.expose(template\u003d\u0027json:\u0027, content_type\u003d\u0027application/json\u0027)"},{"line_number":106,"context_line":"    def post(self):"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAS3%2F%2FJBE%3D","line":103,"in_reply_to":"AAAAS3%2F%2FJRo%3D","updated":"2013-10-03 16:16:44.000000000","message":"Done","commit_id":"db0f9b0b87ed7a53c6987844c86dad0b2036d2aa"},{"author":{"_account_id":8099,"name":"Graham Hayes","email":"gr@ham.ie","username":"graham"},"change_message_id":"f7d1d78561ae7a229871b8c4371df08303138ee5","unresolved":false,"context_lines":[{"line_number":121,"context_line":"        response.headers[\u0027Location\u0027] \u003d self._view._get_resource_href(request,"},{"line_number":122,"context_line":"                                                                     zone)"},{"line_number":123,"context_line":"        return self._view.detail(context, request, zone)"},{"line_number":124,"context_line":""},{"line_number":125,"context_line":""},{"line_number":126,"context_line":"    @pecan.expose(template\u003dNone, content_type\u003d\u0027text/dns\u0027)"},{"line_number":127,"context_line":"    def get_one(self, zone_id):"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAS3%2F%2FJRk%3D","line":124,"updated":"2013-10-03 15:21:07.000000000","message":"flake8 - 1 line before a function definition","commit_id":"db0f9b0b87ed7a53c6987844c86dad0b2036d2aa"},{"author":{"_account_id":8864,"name":"Artom Lifshitz","email":"notartom@gmail.com","username":"artom"},"change_message_id":"c49e0b6d88ea332aebb300a2b0a93d0e47012881","unresolved":false,"context_lines":[{"line_number":121,"context_line":"        response.headers[\u0027Location\u0027] \u003d self._view._get_resource_href(request,"},{"line_number":122,"context_line":"                                                                     zone)"},{"line_number":123,"context_line":"        return self._view.detail(context, request, zone)"},{"line_number":124,"context_line":""},{"line_number":125,"context_line":""},{"line_number":126,"context_line":"    @pecan.expose(template\u003dNone, content_type\u003d\u0027text/dns\u0027)"},{"line_number":127,"context_line":"    def get_one(self, zone_id):"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAS3%2F%2FJBA%3D","line":124,"in_reply_to":"AAAAS3%2F%2FJRk%3D","updated":"2013-10-03 16:16:44.000000000","message":"Done","commit_id":"db0f9b0b87ed7a53c6987844c86dad0b2036d2aa"},{"author":{"_account_id":8094,"name":"Vinod Mangalpally","email":"mrvinod@outlook.com","username":"vinodmr"},"change_message_id":"db85b3591c0efba808a25381bc7b3ada87008be4","unresolved":false,"context_lines":[{"line_number":73,"context_line":"                        # created"},{"line_number":74,"context_line":"                        values \u003d {"},{"line_number":75,"context_line":"                            \u0027type\u0027: record_type,"},{"line_number":76,"context_line":"                            \u0027data\u0027: rdata.to_text(),"},{"line_number":77,"context_line":"                            \u0027name\u0027: record_name.to_text()"},{"line_number":78,"context_line":"                        }"},{"line_number":79,"context_line":"                        central_api.create_record(context, zone_id, values)"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAATH%2F%2F8J4%3D","line":76,"updated":"2013-10-08 14:10:52.000000000","message":"For MX and SRV records you could have a \u0027priority\u0027 field too.","commit_id":"cd98dc9cdfe3b449549b063f1c97f399cd11d23e"},{"author":{"_account_id":8864,"name":"Artom Lifshitz","email":"notartom@gmail.com","username":"artom"},"change_message_id":"865aece3f842c6f980cead050853564697cf35a9","unresolved":false,"context_lines":[{"line_number":73,"context_line":"                        # created"},{"line_number":74,"context_line":"                        values \u003d {"},{"line_number":75,"context_line":"                            \u0027type\u0027: record_type,"},{"line_number":76,"context_line":"                            \u0027data\u0027: rdata.to_text(),"},{"line_number":77,"context_line":"                            \u0027name\u0027: record_name.to_text()"},{"line_number":78,"context_line":"                        }"},{"line_number":79,"context_line":"                        central_api.create_record(context, zone_id, values)"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAATH%2F%2Ft2I%3D","line":76,"in_reply_to":"AAAATH%2F%2F8J4%3D","updated":"2013-10-10 21:31:14.000000000","message":"More than could, I have to. Thanks for noticing, should be fixed in the next patchset.","commit_id":"cd98dc9cdfe3b449549b063f1c97f399cd11d23e"},{"author":{"_account_id":8094,"name":"Vinod Mangalpally","email":"mrvinod@outlook.com","username":"vinodmr"},"change_message_id":"559ad64af31e38acfe218f48d298ff98a4d9b3d8","unresolved":false,"context_lines":[{"line_number":102,"context_line":""},{"line_number":103,"context_line":"    @pecan.expose(template\u003d\u0027json:\u0027, content_type\u003d\u0027application/json\u0027)"},{"line_number":104,"context_line":"    def post(self):"},{"line_number":105,"context_line":"        \"\"\" Import Zone \"\"\""},{"line_number":106,"context_line":"        request \u003d pecan.request"},{"line_number":107,"context_line":"        response \u003d pecan.response"},{"line_number":108,"context_line":"        context \u003d request.environ[\u0027context\u0027]"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAATH%2F%2F4VI%3D","line":105,"updated":"2013-10-08 15:07:26.000000000","message":"Can we import the contents that we export?","commit_id":"cd98dc9cdfe3b449549b063f1c97f399cd11d23e"},{"author":{"_account_id":8101,"name":"Emmanuel Ankutse","email":"emmanuel.ankutse@rackspace.com","username":"emmanuel.ankutse"},"change_message_id":"cec6580db991e24dae24846d7bb9d67666115744","unresolved":false,"context_lines":[{"line_number":102,"context_line":""},{"line_number":103,"context_line":"    @pecan.expose(template\u003d\u0027json:\u0027, content_type\u003d\u0027application/json\u0027)"},{"line_number":104,"context_line":"    def post(self):"},{"line_number":105,"context_line":"        \"\"\" Import Zone \"\"\""},{"line_number":106,"context_line":"        request \u003d pecan.request"},{"line_number":107,"context_line":"        response \u003d pecan.response"},{"line_number":108,"context_line":"        context \u003d request.environ[\u0027context\u0027]"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAATH%2F%2FzYw%3D","line":105,"updated":"2013-10-09 16:01:06.000000000","message":"I am assuming that a \"wrapper\" somewhere is able to read a zone file in order to call this method. Would this be a client of sorts?","commit_id":"cd98dc9cdfe3b449549b063f1c97f399cd11d23e"},{"author":{"_account_id":8864,"name":"Artom Lifshitz","email":"notartom@gmail.com","username":"artom"},"change_message_id":"865aece3f842c6f980cead050853564697cf35a9","unresolved":false,"context_lines":[{"line_number":102,"context_line":""},{"line_number":103,"context_line":"    @pecan.expose(template\u003d\u0027json:\u0027, content_type\u003d\u0027application/json\u0027)"},{"line_number":104,"context_line":"    def post(self):"},{"line_number":105,"context_line":"        \"\"\" Import Zone \"\"\""},{"line_number":106,"context_line":"        request \u003d pecan.request"},{"line_number":107,"context_line":"        response \u003d pecan.response"},{"line_number":108,"context_line":"        context \u003d request.environ[\u0027context\u0027]"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAATH%2F%2Ft18%3D","line":105,"in_reply_to":"AAAATH%2F%2F4VI%3D","updated":"2013-10-10 21:31:14.000000000","message":"I don\u0027t understand what you by that.","commit_id":"cd98dc9cdfe3b449549b063f1c97f399cd11d23e"},{"author":{"_account_id":8864,"name":"Artom Lifshitz","email":"notartom@gmail.com","username":"artom"},"change_message_id":"865aece3f842c6f980cead050853564697cf35a9","unresolved":false,"context_lines":[{"line_number":102,"context_line":""},{"line_number":103,"context_line":"    @pecan.expose(template\u003d\u0027json:\u0027, content_type\u003d\u0027application/json\u0027)"},{"line_number":104,"context_line":"    def post(self):"},{"line_number":105,"context_line":"        \"\"\" Import Zone \"\"\""},{"line_number":106,"context_line":"        request \u003d pecan.request"},{"line_number":107,"context_line":"        response \u003d pecan.response"},{"line_number":108,"context_line":"        context \u003d request.environ[\u0027context\u0027]"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAATH%2F%2Ft14%3D","line":105,"in_reply_to":"AAAATH%2F%2FzYw%3D","updated":"2013-10-10 21:31:14.000000000","message":"There\u0027s the zoneextractor script that I submitted in https://review.openstack.org/#/c/49555/...","commit_id":"cd98dc9cdfe3b449549b063f1c97f399cd11d23e"},{"author":{"_account_id":8094,"name":"Vinod Mangalpally","email":"mrvinod@outlook.com","username":"vinodmr"},"change_message_id":"559ad64af31e38acfe218f48d298ff98a4d9b3d8","unresolved":false,"context_lines":[{"line_number":113,"context_line":"        try:"},{"line_number":114,"context_line":"            self._create_records(context, zone[\u0027id\u0027], dnszone)"},{"line_number":115,"context_line":"        except Exception as e:"},{"line_number":116,"context_line":"            central_api.delete_domain(context, zone[\u0027id\u0027])"},{"line_number":117,"context_line":"            raise e"},{"line_number":118,"context_line":"        response.status_int \u003d 201"},{"line_number":119,"context_line":"        response.headers[\u0027Location\u0027] \u003d self._view._get_resource_href(request,"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAATH%2F%2F4Vc%3D","line":116,"updated":"2013-10-08 15:07:26.000000000","message":"Some servers may be created in the call self._create_servers call.  If so on exceptions, those are not rolled back","commit_id":"cd98dc9cdfe3b449549b063f1c97f399cd11d23e"},{"author":{"_account_id":8864,"name":"Artom Lifshitz","email":"notartom@gmail.com","username":"artom"},"change_message_id":"b92b9cbbdd6ef6dd8029b717e773d8dc2012b7d8","unresolved":false,"context_lines":[{"line_number":113,"context_line":"        try:"},{"line_number":114,"context_line":"            self._create_records(context, zone[\u0027id\u0027], dnszone)"},{"line_number":115,"context_line":"        except Exception as e:"},{"line_number":116,"context_line":"            central_api.delete_domain(context, zone[\u0027id\u0027])"},{"line_number":117,"context_line":"            raise e"},{"line_number":118,"context_line":"        response.status_int \u003d 201"},{"line_number":119,"context_line":"        response.headers[\u0027Location\u0027] \u003d self._view._get_resource_href(request,"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAATH%2F%2FqXM%3D","line":116,"in_reply_to":"AAAATH%2F%2F4Vc%3D","updated":"2013-10-11 15:22:53.000000000","message":"Should be fixed in next patchset.","commit_id":"cd98dc9cdfe3b449549b063f1c97f399cd11d23e"},{"author":{"_account_id":741,"name":"Kiall Mac Innes","email":"kiall@macinnes.ie","username":"kiall"},"change_message_id":"a904c7edbe27d95f4bc997e2898c506c939e7f0c","unresolved":false,"context_lines":[{"line_number":137,"context_line":"        context \u003d request.environ[\u0027context\u0027]"},{"line_number":138,"context_line":"        dnszone \u003d self._parse_request(request)"},{"line_number":139,"context_line":"        # TODO(artom) This should probably be handled with transactions"},{"line_number":140,"context_line":"        servers \u003d self._create_servers(context, dnszone)"},{"line_number":141,"context_line":"        zone \u003d None"},{"line_number":142,"context_line":"        try:"},{"line_number":143,"context_line":"            # Try creating the zone and records"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAATH%2F%2FaVo%3D","line":140,"updated":"2013-10-16 14:56:44.000000000","message":"So, Servers are a global thing - typically pointing at the physical DNS servers managed by the operator.. \n\nWe shouldn\u0027t be creating them for users this way :)","commit_id":"e722404a388a947b45a30d039754f9bb8dd82783"},{"author":{"_account_id":8864,"name":"Artom Lifshitz","email":"notartom@gmail.com","username":"artom"},"change_message_id":"4f44e57cfae2d79e985c23272d3defd314e22c29","unresolved":false,"context_lines":[{"line_number":137,"context_line":"        context \u003d request.environ[\u0027context\u0027]"},{"line_number":138,"context_line":"        dnszone \u003d self._parse_request(request)"},{"line_number":139,"context_line":"        # TODO(artom) This should probably be handled with transactions"},{"line_number":140,"context_line":"        servers \u003d self._create_servers(context, dnszone)"},{"line_number":141,"context_line":"        zone \u003d None"},{"line_number":142,"context_line":"        try:"},{"line_number":143,"context_line":"            # Try creating the zone and records"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAATH%2F%2FZRY%3D","line":140,"in_reply_to":"AAAATH%2F%2FaVo%3D","updated":"2013-10-16 18:36:30.000000000","message":"Done","commit_id":"e722404a388a947b45a30d039754f9bb8dd82783"}],"designate/api/v2/controllers/zones.py":[{"author":{"_account_id":741,"name":"Kiall Mac Innes","email":"kiall@macinnes.ie","username":"kiall"},"change_message_id":"a070e840013284937b23d61fdc0d6a5e6475ff6e","unresolved":false,"context_lines":[{"line_number":41,"context_line":"        \"\"\" Get Zone \"\"\""},{"line_number":42,"context_line":"        request \u003d pecan.request"},{"line_number":43,"context_line":"        context \u003d request.environ[\u0027context\u0027]"},{"line_number":44,"context_line":"        if \u0027test/goat\u0027 in request.accept:"},{"line_number":45,"context_line":"            # Hack to forbid missing Accept headers"},{"line_number":46,"context_line":"            # http://docs.webob.org/en/latest/reference.html#accept-headers"},{"line_number":47,"context_line":"            raise exceptions.UnsupportedAccept("}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAATn%2F%2Fk80%3D","line":44,"updated":"2013-11-01 02:12:48.000000000","message":"I\u0027m not sure I follow this bit!\n\nShould this not be in a final \"else\" block?","commit_id":"9f0e9a28be5f7dc51bcd40d3f664ecaa7926435c"},{"author":{"_account_id":741,"name":"Kiall Mac Innes","email":"kiall@macinnes.ie","username":"kiall"},"change_message_id":"a070e840013284937b23d61fdc0d6a5e6475ff6e","unresolved":false,"context_lines":[{"line_number":53,"context_line":""},{"line_number":54,"context_line":"    def _get_json(self, request, context, zone_id):"},{"line_number":55,"context_line":"        \"\"\" \u0027Normal\u0027 zone get \"\"\""},{"line_number":56,"context_line":"        # TODO(kiall): Validate we have a sane UUID for zone_id"},{"line_number":57,"context_line":""},{"line_number":58,"context_line":"        zone \u003d central_api.get_domain(context, zone_id)"},{"line_number":59,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAATn%2F%2Fk8o%3D","line":56,"updated":"2013-11-01 02:12:48.000000000","message":"This TODO should move up to right before the text/goat line, it applies to all formats","commit_id":"9f0e9a28be5f7dc51bcd40d3f664ecaa7926435c"},{"author":{"_account_id":741,"name":"Kiall Mac Innes","email":"kiall@macinnes.ie","username":"kiall"},"change_message_id":"a070e840013284937b23d61fdc0d6a5e6475ff6e","unresolved":false,"context_lines":[{"line_number":139,"context_line":"        except exceptions.Base as e:"},{"line_number":140,"context_line":"            central_api.delete_domain(context, zone[\u0027id\u0027])"},{"line_number":141,"context_line":"            raise e"},{"line_number":142,"context_line":"        if zone[\u0027status\u0027] \u003d\u003d \u0027PENDING\u0027:"},{"line_number":143,"context_line":"            response.status_int \u003d 202"},{"line_number":144,"context_line":"        else:"},{"line_number":145,"context_line":"            response.status_int \u003d 201"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAATn%2F%2Fk8M%3D","line":142,"updated":"2013-11-01 02:12:48.000000000","message":"Only because I have other comments in the file anyway, I\u0027ll say it :)\n\nCan we add a newline between the try/except and if/else for readability?","commit_id":"9f0e9a28be5f7dc51bcd40d3f664ecaa7926435c"},{"author":{"_account_id":741,"name":"Kiall Mac Innes","email":"kiall@macinnes.ie","username":"kiall"},"change_message_id":"a070e840013284937b23d61fdc0d6a5e6475ff6e","unresolved":false,"context_lines":[{"line_number":214,"context_line":"        # NOTE: This is a hack and a half.. But Pecan needs it."},{"line_number":215,"context_line":"        return \u0027\u0027"},{"line_number":216,"context_line":""},{"line_number":217,"context_line":"    def _create_zone(self, context, dnszone):"},{"line_number":218,"context_line":"        \"\"\" Creates the initial zone \"\"\""},{"line_number":219,"context_line":"        # dnspython never builds a zone with more than one SOA, even if we give"},{"line_number":220,"context_line":"        # it a zonefile that contains more than one"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAATn%2F%2Fk7k%3D","line":217,"updated":"2013-11-01 02:12:48.000000000","message":"At some point in the future, we should move the methods below this point somewhere reusabe.. I can see these being useful in other areas!\n\nFor now though, Let\u0027s drop a TODO above `def create_zone` line and get this merged :)","commit_id":"9f0e9a28be5f7dc51bcd40d3f664ecaa7926435c"}],"designate/tests/__init__.py":[{"author":{"_account_id":8099,"name":"Graham Hayes","email":"gr@ham.ie","username":"graham"},"change_message_id":"7d0fdc4e62b2013fa3b6b85f8f8de1dc9c4a72ce","unresolved":false,"context_lines":[{"line_number":88,"context_line":"        {\u0027name\u0027: \u0027mail.%s\u0027, \u0027type\u0027: \u0027A\u0027, \u0027data\u0027: \u0027192.0.2.2\u0027}"},{"line_number":89,"context_line":"    ]"},{"line_number":90,"context_line":""},{"line_number":91,"context_line":"    def setUp(self):"},{"line_number":92,"context_line":"        super(TestCase, self).setUp()"},{"line_number":93,"context_line":""},{"line_number":94,"context_line":"        self.mox \u003d mox.Mox()"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAATH%2F%2FaXA%3D","line":91,"updated":"2013-10-16 14:50:53.000000000","message":"Seems to be 2 of these methods?","commit_id":"e722404a388a947b45a30d039754f9bb8dd82783"},{"author":{"_account_id":8864,"name":"Artom Lifshitz","email":"notartom@gmail.com","username":"artom"},"change_message_id":"4f44e57cfae2d79e985c23272d3defd314e22c29","unresolved":false,"context_lines":[{"line_number":88,"context_line":"        {\u0027name\u0027: \u0027mail.%s\u0027, \u0027type\u0027: \u0027A\u0027, \u0027data\u0027: \u0027192.0.2.2\u0027}"},{"line_number":89,"context_line":"    ]"},{"line_number":90,"context_line":""},{"line_number":91,"context_line":"    def setUp(self):"},{"line_number":92,"context_line":"        super(TestCase, self).setUp()"},{"line_number":93,"context_line":""},{"line_number":94,"context_line":"        self.mox \u003d mox.Mox()"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAATH%2F%2FaF4%3D","line":91,"in_reply_to":"AAAATH%2F%2FaXA%3D","updated":"2013-10-16 18:36:30.000000000","message":"Not sure what happened - looks like a rogue paste...","commit_id":"e722404a388a947b45a30d039754f9bb8dd82783"},{"author":{"_account_id":741,"name":"Kiall Mac Innes","email":"kiall@macinnes.ie","username":"kiall"},"change_message_id":"a904c7edbe27d95f4bc997e2898c506c939e7f0c","unresolved":false,"context_lines":[{"line_number":125,"context_line":""},{"line_number":126,"context_line":"        self.admin_context \u003d self.get_admin_context()"},{"line_number":127,"context_line":""},{"line_number":128,"context_line":"    def tearDown(self):"},{"line_number":129,"context_line":"        self.reset_notifications()"},{"line_number":130,"context_line":"        policy.reset()"},{"line_number":131,"context_line":"        storage.teardown_schema()"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAATH%2F%2FaVA%3D","line":128,"updated":"2013-10-16 14:56:44.000000000","message":"2 of these too :)","commit_id":"e722404a388a947b45a30d039754f9bb8dd82783"},{"author":{"_account_id":8864,"name":"Artom Lifshitz","email":"notartom@gmail.com","username":"artom"},"change_message_id":"4f44e57cfae2d79e985c23272d3defd314e22c29","unresolved":false,"context_lines":[{"line_number":125,"context_line":""},{"line_number":126,"context_line":"        self.admin_context \u003d self.get_admin_context()"},{"line_number":127,"context_line":""},{"line_number":128,"context_line":"    def tearDown(self):"},{"line_number":129,"context_line":"        self.reset_notifications()"},{"line_number":130,"context_line":"        policy.reset()"},{"line_number":131,"context_line":"        storage.teardown_schema()"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAATH%2F%2FaF0%3D","line":128,"in_reply_to":"AAAATH%2F%2FaVA%3D","updated":"2013-10-16 18:36:30.000000000","message":"Done","commit_id":"e722404a388a947b45a30d039754f9bb8dd82783"},{"author":{"_account_id":741,"name":"Kiall Mac Innes","email":"kiall@macinnes.ie","username":"kiall"},"change_message_id":"a904c7edbe27d95f4bc997e2898c506c939e7f0c","unresolved":false,"context_lines":[{"line_number":133,"context_line":"        self.mox.UnsetStubs()"},{"line_number":134,"context_line":"        super(TestCase, self).tearDown()"},{"line_number":135,"context_line":""},{"line_number":136,"context_line":"    def skip(self, message\u003dNone):"},{"line_number":137,"context_line":"        raise nose.SkipTest(message)"},{"line_number":138,"context_line":""},{"line_number":139,"context_line":"    # Config Methods"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAATH%2F%2FaU4%3D","line":136,"updated":"2013-10-16 14:56:44.000000000","message":".. and 2 of these","commit_id":"e722404a388a947b45a30d039754f9bb8dd82783"},{"author":{"_account_id":8864,"name":"Artom Lifshitz","email":"notartom@gmail.com","username":"artom"},"change_message_id":"4f44e57cfae2d79e985c23272d3defd314e22c29","unresolved":false,"context_lines":[{"line_number":133,"context_line":"        self.mox.UnsetStubs()"},{"line_number":134,"context_line":"        super(TestCase, self).tearDown()"},{"line_number":135,"context_line":""},{"line_number":136,"context_line":"    def skip(self, message\u003dNone):"},{"line_number":137,"context_line":"        raise nose.SkipTest(message)"},{"line_number":138,"context_line":""},{"line_number":139,"context_line":"    # Config Methods"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAATH%2F%2FaFw%3D","line":136,"in_reply_to":"AAAATH%2F%2FaU4%3D","updated":"2013-10-16 18:36:30.000000000","message":"Done","commit_id":"e722404a388a947b45a30d039754f9bb8dd82783"},{"author":{"_account_id":741,"name":"Kiall Mac Innes","email":"kiall@macinnes.ie","username":"kiall"},"change_message_id":"a904c7edbe27d95f4bc997e2898c506c939e7f0c","unresolved":false,"context_lines":[{"line_number":138,"context_line":""},{"line_number":139,"context_line":"    # Config Methods"},{"line_number":140,"context_line":"    def config(self, **kwargs):"},{"line_number":141,"context_line":"        group \u003d kwargs.pop(\u0027group\u0027, None)"},{"line_number":142,"context_line":""},{"line_number":143,"context_line":""},{"line_number":144,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAATH%2F%2FaUw%3D","line":141,"updated":"2013-10-16 14:56:44.000000000","message":"and half of this one!","commit_id":"e722404a388a947b45a30d039754f9bb8dd82783"},{"author":{"_account_id":8864,"name":"Artom Lifshitz","email":"notartom@gmail.com","username":"artom"},"change_message_id":"4f44e57cfae2d79e985c23272d3defd314e22c29","unresolved":false,"context_lines":[{"line_number":138,"context_line":""},{"line_number":139,"context_line":"    # Config Methods"},{"line_number":140,"context_line":"    def config(self, **kwargs):"},{"line_number":141,"context_line":"        group \u003d kwargs.pop(\u0027group\u0027, None)"},{"line_number":142,"context_line":""},{"line_number":143,"context_line":""},{"line_number":144,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAATH%2F%2FaFs%3D","line":141,"in_reply_to":"AAAATH%2F%2FaUw%3D","updated":"2013-10-16 18:36:30.000000000","message":"Done","commit_id":"e722404a388a947b45a30d039754f9bb8dd82783"}],"designate/tests/malformed_example.com.zone":[{"author":{"_account_id":741,"name":"Kiall Mac Innes","email":"kiall@macinnes.ie","username":"kiall"},"change_message_id":"a904c7edbe27d95f4bc997e2898c506c939e7f0c","unresolved":false,"context_lines":[{"line_number":14,"context_line":"           `;\u0027\\\\__-\u0027 \\_"},{"line_number":15,"context_line":"              | )  _ \\ \\"},{"line_number":16,"context_line":"             / / ``   w w"},{"line_number":17,"context_line":"            w w"},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"cname.example.com.      600 IN CNAME    example.com."},{"line_number":20,"context_line":"example.com.            600 IN MX       5   192.0.0.2"}],"source_content_type":"application/octet-stream","patch_set":7,"id":"AAAATH%2F%2FaW4%3D","line":17,"updated":"2013-10-16 14:56:44.000000000","message":"Nice :)","commit_id":"e722404a388a947b45a30d039754f9bb8dd82783"}]}
