)]}'
{"etc/proxy-server.conf-sample":[{"author":{"_account_id":7233,"name":"Matthew Oliver","email":"matt@oliver.net.au","username":"mattoliverau"},"change_message_id":"ae62645de067d32f481f0ef77fe6cc61b60c5040","unresolved":false,"context_lines":[{"line_number":544,"context_line":"# Specify the nameservers to use to do the CNAME resolution. If unset, the"},{"line_number":545,"context_line":"# system configuration is used. Multiple nameservers can be specified"},{"line_number":546,"context_line":"# separated by a comma"},{"line_number":547,"context_line":"# nameservers \u003d 127.0.0.1"},{"line_number":548,"context_line":""},{"line_number":549,"context_line":"# Note: Put staticweb just after your auth filter(s) in the pipeline"},{"line_number":550,"context_line":"[filter:staticweb]"}],"source_content_type":"application/octet-stream","patch_set":3,"id":"9a30ddce_839ac861","line":547,"updated":"2017-03-09 03:50:04.000000000","message":"I\u0027m torn here. giving an example is great and very useful, but we try to only put the default value in the actual commented out option (well try to anyway).\n\nMaybe we could do something like:\n\n # Specify the nameservers to use to do the CNAME resolution. If unset, the                                            \n # system configuration is used. Multiple nameservers can be specified                                                 \n # separated by a comma for example:                                                                                   \n #     nameservers: 127.0.0.1,127.0.0.2                                                                                         \n # nameservers \u003d","commit_id":"5659f0f7d18e24f47ee478ca7e69fb20b8ea67f6"},{"author":{"_account_id":13852,"name":"Romain LE DISEZ","email":"romain.le-disez@corp.ovh.com","username":"rledisez"},"change_message_id":"00a151b3a86df6c2094fb1c89116397b57d0ce57","unresolved":false,"context_lines":[{"line_number":544,"context_line":"# Specify the nameservers to use to do the CNAME resolution. If unset, the"},{"line_number":545,"context_line":"# system configuration is used. Multiple nameservers can be specified"},{"line_number":546,"context_line":"# separated by a comma"},{"line_number":547,"context_line":"# nameservers \u003d 127.0.0.1"},{"line_number":548,"context_line":""},{"line_number":549,"context_line":"# Note: Put staticweb just after your auth filter(s) in the pipeline"},{"line_number":550,"context_line":"[filter:staticweb]"}],"source_content_type":"application/octet-stream","patch_set":3,"id":"9a30ddce_7ca3aa4f","line":547,"in_reply_to":"9a30ddce_839ac861","updated":"2017-03-09 10:27:25.000000000","message":"Done","commit_id":"5659f0f7d18e24f47ee478ca7e69fb20b8ea67f6"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"ec3c9c4e069fdf194cf7aa4f12be0253ed2f8f77","unresolved":false,"context_lines":[{"line_number":550,"context_line":"# Specify the nameservers to use to do the CNAME resolution. If unset, the"},{"line_number":551,"context_line":"# system configuration is used. Multiple nameservers can be specified"},{"line_number":552,"context_line":"# separated by a comma. Default port 53 can be overriden. IPv6 is accepted."},{"line_number":553,"context_line":"# Example: 127.0.0.1, 127.0.0.2, 127.0.0.3:5353, ::1, [::1]:5353"},{"line_number":554,"context_line":"# nameservers \u003d"},{"line_number":555,"context_line":""},{"line_number":556,"context_line":"# Note: Put staticweb just after your auth filter(s) in the pipeline"}],"source_content_type":"application/octet-stream","patch_set":5,"id":"3f044301_fedf6437","line":553,"range":{"start_line":553,"start_character":49,"end_line":553,"end_character":52},"updated":"2017-05-11 06:34:45.000000000","message":"This would need to be \n\n [::1]\n\nyeah? I\u0027m fairly certain we\u0027ll throw an error with a bare\n\n ::1","commit_id":"bde1d25197ebbe101ce2cc44c41d0213704eb6d8"},{"author":{"_account_id":13852,"name":"Romain LE DISEZ","email":"romain.le-disez@corp.ovh.com","username":"rledisez"},"change_message_id":"d9a71c2620fe3fbd24869750960137b036c333ca","unresolved":false,"context_lines":[{"line_number":550,"context_line":"# Specify the nameservers to use to do the CNAME resolution. If unset, the"},{"line_number":551,"context_line":"# system configuration is used. Multiple nameservers can be specified"},{"line_number":552,"context_line":"# separated by a comma. Default port 53 can be overriden. IPv6 is accepted."},{"line_number":553,"context_line":"# Example: 127.0.0.1, 127.0.0.2, 127.0.0.3:5353, ::1, [::1]:5353"},{"line_number":554,"context_line":"# nameservers \u003d"},{"line_number":555,"context_line":""},{"line_number":556,"context_line":"# Note: Put staticweb just after your auth filter(s) in the pipeline"}],"source_content_type":"application/octet-stream","patch_set":5,"id":"3f044301_d7da3f76","line":553,"range":{"start_line":553,"start_character":49,"end_line":553,"end_character":52},"in_reply_to":"3f044301_fedf6437","updated":"2017-05-11 16:26:16.000000000","message":"Done","commit_id":"bde1d25197ebbe101ce2cc44c41d0213704eb6d8"}],"swift/common/middleware/cname_lookup.py":[{"author":{"_account_id":7233,"name":"Matthew Oliver","email":"matt@oliver.net.au","username":"mattoliverau"},"change_message_id":"ae62645de067d32f481f0ef77fe6cc61b60c5040","unresolved":false,"context_lines":[{"line_number":50,"context_line":"    \"\"\""},{"line_number":51,"context_line":"    Given a domain, returns its DNS CNAME mapping and DNS ttl."},{"line_number":52,"context_line":""},{"line_number":53,"context_line":"    :param domain: domain to query on"},{"line_number":54,"context_line":"    :returns: (ttl, result)"},{"line_number":55,"context_line":"    \"\"\""},{"line_number":56,"context_line":"    try:"}],"source_content_type":"text/x-python","patch_set":3,"id":"9a30ddce_83e808b6","line":53,"updated":"2017-03-09 03:50:04.000000000","message":"Need the nameservers param here.","commit_id":"5659f0f7d18e24f47ee478ca7e69fb20b8ea67f6"},{"author":{"_account_id":13852,"name":"Romain LE DISEZ","email":"romain.le-disez@corp.ovh.com","username":"rledisez"},"change_message_id":"00a151b3a86df6c2094fb1c89116397b57d0ce57","unresolved":false,"context_lines":[{"line_number":50,"context_line":"    \"\"\""},{"line_number":51,"context_line":"    Given a domain, returns its DNS CNAME mapping and DNS ttl."},{"line_number":52,"context_line":""},{"line_number":53,"context_line":"    :param domain: domain to query on"},{"line_number":54,"context_line":"    :returns: (ttl, result)"},{"line_number":55,"context_line":"    \"\"\""},{"line_number":56,"context_line":"    try:"}],"source_content_type":"text/x-python","patch_set":3,"id":"9a30ddce_9f6930c1","line":53,"in_reply_to":"9a30ddce_83e808b6","updated":"2017-03-09 10:27:25.000000000","message":"Done","commit_id":"5659f0f7d18e24f47ee478ca7e69fb20b8ea67f6"},{"author":{"_account_id":7233,"name":"Matthew Oliver","email":"matt@oliver.net.au","username":"mattoliverau"},"change_message_id":"ae62645de067d32f481f0ef77fe6cc61b60c5040","unresolved":false,"context_lines":[{"line_number":57,"context_line":"        resolver \u003d dns.resolver.Resolver()"},{"line_number":58,"context_line":"        if nameservers:"},{"line_number":59,"context_line":"            resolver.nameservers \u003d nameservers"},{"line_number":60,"context_line":"        answer \u003d resolver.query(domain, \u0027CNAME\u0027).rrset"},{"line_number":61,"context_line":"        ttl \u003d answer.ttl"},{"line_number":62,"context_line":"        result \u003d answer.items[0].to_text()"},{"line_number":63,"context_line":"        result \u003d result.rstrip(\u0027.\u0027)"}],"source_content_type":"text/x-python","patch_set":3,"id":"9a30ddce_a3a34c4e","line":60,"updated":"2017-03-09 03:50:04.000000000","message":"do we bother with any validation? What happens when someone fat fingers an nameserver ip?\n\nOn failure should we default to the system default, if more then 1 skip the failure?\n\n  from swift.common.utils import is_valid_ip\n  ...\n  nameservers \u003d [ns for ns in nameservers if is_valid_ip(ns)]\n\nAnd debug if there was a problem?","commit_id":"5659f0f7d18e24f47ee478ca7e69fb20b8ea67f6"},{"author":{"_account_id":13852,"name":"Romain LE DISEZ","email":"romain.le-disez@corp.ovh.com","username":"rledisez"},"change_message_id":"00a151b3a86df6c2094fb1c89116397b57d0ce57","unresolved":false,"context_lines":[{"line_number":57,"context_line":"        resolver \u003d dns.resolver.Resolver()"},{"line_number":58,"context_line":"        if nameservers:"},{"line_number":59,"context_line":"            resolver.nameservers \u003d nameservers"},{"line_number":60,"context_line":"        answer \u003d resolver.query(domain, \u0027CNAME\u0027).rrset"},{"line_number":61,"context_line":"        ttl \u003d answer.ttl"},{"line_number":62,"context_line":"        result \u003d answer.items[0].to_text()"},{"line_number":63,"context_line":"        result \u003d result.rstrip(\u0027.\u0027)"}],"source_content_type":"text/x-python","patch_set":3,"id":"9a30ddce_9f55b051","line":60,"in_reply_to":"9a30ddce_a3a34c4e","updated":"2017-03-09 10:27:25.000000000","message":"I don\u0027t like that code think it knows what\u0027s best for the operator. In my use case, system configuration would not work, it\u0027s by design. I prefer that we validate configuration on instantiation and stick to it then. if there is a config error, let\u0027s warn in log and fallback to system config. if custom nameservers are down, the operator should notice by himself.","commit_id":"5659f0f7d18e24f47ee478ca7e69fb20b8ea67f6"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"b4e13b9aeb42eba5a6488057becb2a6f1239df6c","unresolved":false,"context_lines":[{"line_number":41,"context_line":"    MODULE_DEPENDENCY_MET \u003d True"},{"line_number":42,"context_line":""},{"line_number":43,"context_line":"from swift.common.swob import Request, HTTPBadRequest"},{"line_number":44,"context_line":"from swift.common.utils import cache_from_env, get_logger, is_valid_ip, \\"},{"line_number":45,"context_line":"    list_from_csv, register_swift_info"},{"line_number":46,"context_line":""},{"line_number":47,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"3f044301_9537364e","line":44,"range":{"start_line":44,"start_character":59,"end_line":44,"end_character":70},"updated":"2017-05-10 06:52:11.000000000","message":"+1, good call","commit_id":"46413e9e7ad70f0f4349cbabaf802ffcb019bf85"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"b4e13b9aeb42eba5a6488057becb2a6f1239df6c","unresolved":false,"context_lines":[{"line_number":55,"context_line":"    :returns: (ttl, result)"},{"line_number":56,"context_line":"    \"\"\""},{"line_number":57,"context_line":"    try:"},{"line_number":58,"context_line":"        resolver \u003d dns.resolver.Resolver()"},{"line_number":59,"context_line":"        if nameservers:"},{"line_number":60,"context_line":"            resolver.nameservers \u003d nameservers"},{"line_number":61,"context_line":"        answer \u003d resolver.query(domain, \u0027CNAME\u0027).rrset"}],"source_content_type":"text/x-python","patch_set":4,"id":"3f044301_f561daaa","line":58,"updated":"2017-05-10 06:52:11.000000000","message":"Is it worth us instantiating a single resolver and hanging it off the middleware, rather than creating a new one for ever lookup?","commit_id":"46413e9e7ad70f0f4349cbabaf802ffcb019bf85"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"b4e13b9aeb42eba5a6488057becb2a6f1239df6c","unresolved":false,"context_lines":[{"line_number":97,"context_line":"                                if s.startswith(\u0027.\u0027)]"},{"line_number":98,"context_line":"        self.lookup_depth \u003d int(conf.get(\u0027lookup_depth\u0027, \u00271\u0027))"},{"line_number":99,"context_line":"        self.nameservers \u003d list_from_csv(conf.get(\u0027nameservers\u0027))"},{"line_number":100,"context_line":"        if self.nameservers and not all([is_valid_ip(ns)"},{"line_number":101,"context_line":"                                         for ns in self.nameservers]):"},{"line_number":102,"context_line":"            self.logger.warning(\u0027Invalid cname_lookup/nameservers \u0027"},{"line_number":103,"context_line":"                                \u0027configuration found. All nameserver must be \u0027"}],"source_content_type":"text/x-python","patch_set":4,"id":"3f044301_358f4276","line":100,"updated":"2017-05-10 06:52:11.000000000","message":"So there\u0027s no way to specify an alternate port? With my existing local DNS setup, I kinda want something like\n\n nameservers \u003d 10.0.2.3:5354\n\nMaybe something like http://paste.openstack.org/show/609239/ would be good? But I could submit that as a follow-up, too.","commit_id":"46413e9e7ad70f0f4349cbabaf802ffcb019bf85"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"0bed9495604b2d9d7f7ee7373b8db5bcf9e17cc6","unresolved":false,"context_lines":[{"line_number":97,"context_line":"                                if s.startswith(\u0027.\u0027)]"},{"line_number":98,"context_line":"        self.lookup_depth \u003d int(conf.get(\u0027lookup_depth\u0027, \u00271\u0027))"},{"line_number":99,"context_line":"        self.nameservers \u003d list_from_csv(conf.get(\u0027nameservers\u0027))"},{"line_number":100,"context_line":"        if self.nameservers and not all([is_valid_ip(ns)"},{"line_number":101,"context_line":"                                         for ns in self.nameservers]):"},{"line_number":102,"context_line":"            self.logger.warning(\u0027Invalid cname_lookup/nameservers \u0027"},{"line_number":103,"context_line":"                                \u0027configuration found. All nameserver must be \u0027"}],"source_content_type":"text/x-python","patch_set":4,"id":"3f044301_c2117b06","line":100,"in_reply_to":"3f044301_358f4276","updated":"2017-05-10 14:27:26.000000000","message":"Hmmm... but I changed the expected format for IPv6 addresses... What format do we typically expect for those in proxy-server configs?\n\n ::1\n\nor\n\n [::1]\n\n? Surely if we\u0027re dealing with port overrides we\u0027ll need something like\n\n [::1]:5354\n\nbut I\u0027m not sure how often that comes up in the proxy config...","commit_id":"46413e9e7ad70f0f4349cbabaf802ffcb019bf85"},{"author":{"_account_id":13852,"name":"Romain LE DISEZ","email":"romain.le-disez@corp.ovh.com","username":"rledisez"},"change_message_id":"d7880ea4b90e7879d20a06996d58e9770b65aa4c","unresolved":false,"context_lines":[{"line_number":97,"context_line":"                                if s.startswith(\u0027.\u0027)]"},{"line_number":98,"context_line":"        self.lookup_depth \u003d int(conf.get(\u0027lookup_depth\u0027, \u00271\u0027))"},{"line_number":99,"context_line":"        self.nameservers \u003d list_from_csv(conf.get(\u0027nameservers\u0027))"},{"line_number":100,"context_line":"        if self.nameservers and not all([is_valid_ip(ns)"},{"line_number":101,"context_line":"                                         for ns in self.nameservers]):"},{"line_number":102,"context_line":"            self.logger.warning(\u0027Invalid cname_lookup/nameservers \u0027"},{"line_number":103,"context_line":"                                \u0027configuration found. All nameserver must be \u0027"}],"source_content_type":"text/x-python","patch_set":4,"id":"3f044301_f86d3fcc","line":100,"in_reply_to":"3f044301_c2117b06","updated":"2017-05-10 22:49:15.000000000","message":"Well, parse_socket_string says:\n\"If an IPv6 address is specified it **must** be enclosed in [], like *[::1]* or *[::1]:11211*.\"\n\nSo i guess your change is fine.","commit_id":"46413e9e7ad70f0f4349cbabaf802ffcb019bf85"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"0bed9495604b2d9d7f7ee7373b8db5bcf9e17cc6","unresolved":false,"context_lines":[{"line_number":102,"context_line":"            self.logger.warning(\u0027Invalid cname_lookup/nameservers \u0027"},{"line_number":103,"context_line":"                                \u0027configuration found. All nameserver must be \u0027"},{"line_number":104,"context_line":"                                \u0027valid IPv4 or IPV6. Falling back to system \u0027"},{"line_number":105,"context_line":"                                \u0027configuration\u0027)"},{"line_number":106,"context_line":"            self.nameservers \u003d []"},{"line_number":107,"context_line":"        self.memcache \u003d None"},{"line_number":108,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"3f044301_02e403e0","line":105,"updated":"2017-05-10 14:27:26.000000000","message":"I\u0027m debating about whether to log a warning or just refuse to start... I mean, this is definitely an invalid-config issue -- I could understand dropping a warning if we tried (and failed) to contact the nameserver on startup or something, that might be a transient issue that will resolve itself. But there\u0027s *no way* we\u0027re going to start doing anything with this value until you go fix your config and restart the process -- seems like we may as well fail fast and loud.","commit_id":"46413e9e7ad70f0f4349cbabaf802ffcb019bf85"},{"author":{"_account_id":13852,"name":"Romain LE DISEZ","email":"romain.le-disez@corp.ovh.com","username":"rledisez"},"change_message_id":"d7880ea4b90e7879d20a06996d58e9770b65aa4c","unresolved":false,"context_lines":[{"line_number":102,"context_line":"            self.logger.warning(\u0027Invalid cname_lookup/nameservers \u0027"},{"line_number":103,"context_line":"                                \u0027configuration found. All nameserver must be \u0027"},{"line_number":104,"context_line":"                                \u0027valid IPv4 or IPV6. Falling back to system \u0027"},{"line_number":105,"context_line":"                                \u0027configuration\u0027)"},{"line_number":106,"context_line":"            self.nameservers \u003d []"},{"line_number":107,"context_line":"        self.memcache \u003d None"},{"line_number":108,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"3f044301_58455342","line":105,"in_reply_to":"3f044301_02e403e0","updated":"2017-05-10 22:49:15.000000000","message":"I actually agree with you. It should refuse to start.","commit_id":"46413e9e7ad70f0f4349cbabaf802ffcb019bf85"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"ec3c9c4e069fdf194cf7aa4f12be0253ed2f8f77","unresolved":false,"context_lines":[{"line_number":104,"context_line":"        except ValueError:"},{"line_number":105,"context_line":"            raise ValueError(\u0027Invalid cname_lookup/nameservers configuration \u0027"},{"line_number":106,"context_line":"                             \u0027found. All nameserver must be valid IPv4 or \u0027"},{"line_number":107,"context_line":"                             \u0027IPV6. Falling back to system configuration\u0027)"},{"line_number":108,"context_line":"        self.resolver \u003d dns.resolver.Resolver()"},{"line_number":109,"context_line":"        if nameservers:"},{"line_number":110,"context_line":"            self.resolver.nameservers \u003d [ip for (ip, port) in nameservers]"}],"source_content_type":"text/x-python","patch_set":5,"id":"3f044301_5ebe58d5","line":107,"range":{"start_line":107,"start_character":36,"end_line":107,"end_character":72},"updated":"2017-05-11 06:34:45.000000000","message":"We should probably strike this part now. And maybe mention the port override? Sorry, I hadn\u0027t updated that part...","commit_id":"bde1d25197ebbe101ce2cc44c41d0213704eb6d8"},{"author":{"_account_id":13852,"name":"Romain LE DISEZ","email":"romain.le-disez@corp.ovh.com","username":"rledisez"},"change_message_id":"d9a71c2620fe3fbd24869750960137b036c333ca","unresolved":false,"context_lines":[{"line_number":104,"context_line":"        except ValueError:"},{"line_number":105,"context_line":"            raise ValueError(\u0027Invalid cname_lookup/nameservers configuration \u0027"},{"line_number":106,"context_line":"                             \u0027found. All nameserver must be valid IPv4 or \u0027"},{"line_number":107,"context_line":"                             \u0027IPV6. Falling back to system configuration\u0027)"},{"line_number":108,"context_line":"        self.resolver \u003d dns.resolver.Resolver()"},{"line_number":109,"context_line":"        if nameservers:"},{"line_number":110,"context_line":"            self.resolver.nameservers \u003d [ip for (ip, port) in nameservers]"}],"source_content_type":"text/x-python","patch_set":5,"id":"3f044301_97e03728","line":107,"range":{"start_line":107,"start_character":36,"end_line":107,"end_character":72},"in_reply_to":"3f044301_5ebe58d5","updated":"2017-05-11 16:26:16.000000000","message":"Done","commit_id":"bde1d25197ebbe101ce2cc44c41d0213704eb6d8"}],"test/unit/common/middleware/test_cname_lookup.py":[{"author":{"_account_id":7233,"name":"Matthew Oliver","email":"matt@oliver.net.au","username":"mattoliverau"},"change_message_id":"ae62645de067d32f481f0ef77fe6cc61b60c5040","unresolved":false,"context_lines":[{"line_number":346,"context_line":"                except Exception:"},{"line_number":347,"context_line":"                    pass"},{"line_number":348,"context_line":""},{"line_number":349,"context_line":"                self.assertEqual(mocked_resolver.nameservers, None)"},{"line_number":350,"context_line":""},{"line_number":351,"context_line":"        # If nameservers provided in conf, resolver nameservers is unset"},{"line_number":352,"context_line":"        mocked_resolver.reset()"}],"source_content_type":"text/x-python","patch_set":3,"id":"9a30ddce_830d6892","line":349,"range":{"start_line":349,"start_character":27,"end_line":349,"end_character":32},"updated":"2017-03-09 03:50:04.000000000","message":"aelf.assertNone(mocked_resolver.nameservers)","commit_id":"5659f0f7d18e24f47ee478ca7e69fb20b8ea67f6"},{"author":{"_account_id":13852,"name":"Romain LE DISEZ","email":"romain.le-disez@corp.ovh.com","username":"rledisez"},"change_message_id":"00a151b3a86df6c2094fb1c89116397b57d0ce57","unresolved":false,"context_lines":[{"line_number":346,"context_line":"                except Exception:"},{"line_number":347,"context_line":"                    pass"},{"line_number":348,"context_line":""},{"line_number":349,"context_line":"                self.assertEqual(mocked_resolver.nameservers, None)"},{"line_number":350,"context_line":""},{"line_number":351,"context_line":"        # If nameservers provided in conf, resolver nameservers is unset"},{"line_number":352,"context_line":"        mocked_resolver.reset()"}],"source_content_type":"text/x-python","patch_set":3,"id":"9a30ddce_ffb5cc30","line":349,"range":{"start_line":349,"start_character":27,"end_line":349,"end_character":32},"in_reply_to":"9a30ddce_830d6892","updated":"2017-03-09 10:27:25.000000000","message":"Done","commit_id":"5659f0f7d18e24f47ee478ca7e69fb20b8ea67f6"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"b4e13b9aeb42eba5a6488057becb2a6f1239df6c","unresolved":false,"context_lines":[{"line_number":354,"context_line":"        with mock.patch(\u0027swift.common.middleware.cname_lookup.get_logger\u0027,"},{"line_number":355,"context_line":"                        return_value\u003dfake_logger):"},{"line_number":356,"context_line":"            mocked_resolver.reset()"},{"line_number":357,"context_line":"            conf \u003d {\u0027nameservers\u0027: \u0027127.0.0.1, 127.0.0.2, a.b.c.d\u0027}"},{"line_number":358,"context_line":"            app \u003d cname_lookup.CNAMELookupMiddleware(FakeApp(), conf)"},{"line_number":359,"context_line":"            self.assertEqual(app.nameservers, [])"},{"line_number":360,"context_line":"            log_lines \u003d app.logger.get_lines_for_level(\u0027warning\u0027)"}],"source_content_type":"text/x-python","patch_set":4,"id":"3f044301_9585f6d1","line":357,"updated":"2017-05-10 06:52:11.000000000","message":"This is the only case that has a list...and we have it emit a warning and fall back to default resolution. I\u0027d kinda like something to check that \u0027127.0.0.1, 127.0.0.2\u0027 is actually valid -- but again, seems reasonable as a follow-up...","commit_id":"46413e9e7ad70f0f4349cbabaf802ffcb019bf85"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"96137829c16b54f8d3c0e702803647231f0237f6","unresolved":false,"context_lines":[{"line_number":351,"context_line":"                app \u003d cname_lookup.CNAMELookupMiddleware(FakeApp(), conf)"},{"line_number":352,"context_line":"            except ValueError as err:"},{"line_number":353,"context_line":"                self.assertIn(\u0027Invalid cname_lookup/nameservers configuration\u0027,"},{"line_number":354,"context_line":"                              str(err))"},{"line_number":355,"context_line":""},{"line_number":356,"context_line":"        # If nameservers provided in conf, resolver nameservers is set"},{"line_number":357,"context_line":"        mocked_resolver.reset()"}],"source_content_type":"text/x-python","patch_set":5,"id":"3f044301_dea4a8a8","line":354,"updated":"2017-05-11 06:41:12.000000000","message":"Add a\n\n else:\n     self.fail(\u0027Expected ValueError to be raised\u0027)\n\n? Or use\n\n with self.assertRaises(ValueError) as exc_mgr:\n     self.assertIn(..., str(exc_mgr.exception))","commit_id":"bde1d25197ebbe101ce2cc44c41d0213704eb6d8"},{"author":{"_account_id":13852,"name":"Romain LE DISEZ","email":"romain.le-disez@corp.ovh.com","username":"rledisez"},"change_message_id":"d9a71c2620fe3fbd24869750960137b036c333ca","unresolved":false,"context_lines":[{"line_number":351,"context_line":"                app \u003d cname_lookup.CNAMELookupMiddleware(FakeApp(), conf)"},{"line_number":352,"context_line":"            except ValueError as err:"},{"line_number":353,"context_line":"                self.assertIn(\u0027Invalid cname_lookup/nameservers configuration\u0027,"},{"line_number":354,"context_line":"                              str(err))"},{"line_number":355,"context_line":""},{"line_number":356,"context_line":"        # If nameservers provided in conf, resolver nameservers is set"},{"line_number":357,"context_line":"        mocked_resolver.reset()"}],"source_content_type":"text/x-python","patch_set":5,"id":"3f044301_37c963ab","line":354,"in_reply_to":"3f044301_dea4a8a8","updated":"2017-05-11 16:26:16.000000000","message":"Done","commit_id":"bde1d25197ebbe101ce2cc44c41d0213704eb6d8"},{"author":{"_account_id":12261,"name":"Mahati","email":"mahati.chamarthy@gmail.com","username":"Mahati"},"change_message_id":"1543352ee4622d13b1f9bd7a8baf8babc5bd45ec","unresolved":false,"context_lines":[{"line_number":399,"context_line":"        self.assertEqual(mocked_resolver.nameservers, [\u0027127.0.0.1\u0027])"},{"line_number":400,"context_line":"        self.assertEqual(mocked_resolver.nameserver_ports, {\u0027127.0.0.1\u0027: 5354})"},{"line_number":401,"context_line":""},{"line_number":402,"context_line":"        # And IPv6 with port overrides"},{"line_number":403,"context_line":"        mocked_resolver.reset()"},{"line_number":404,"context_line":"        conf \u003d {\u0027nameservers\u0027: \u0027[2001:db8::ff00:42:8329]:1234\u0027}"},{"line_number":405,"context_line":"        with mock.patch(dns_module, return_value\u003dmocked_resolver):"}],"source_content_type":"text/x-python","patch_set":7,"id":"df140735_64314fa3","line":402,"updated":"2017-06-05 11:03:28.000000000","message":"Nice!","commit_id":"420e73fabd87ae54f8892b5343e5ff99498e6520"}]}
