)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":8688,"name":"Alexis Lee","email":"openstack@lxsli.co.uk","username":"lxsli"},"change_message_id":"eabf04ce6e234bbc20349e430c174d099db90c53","unresolved":false,"context_lines":[{"line_number":11,"context_line":"correct hostname are specified in a config file."},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"A hostname refers to a valid DNS or hostname. It must not be longer than"},{"line_number":14,"context_line":"255 characters, have a segment greater than 63 characters and start or"},{"line_number":15,"context_line":"end with a hyphen."},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"Closes-Bug: #1508943"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":7,"id":"dae33548_c0610f3b","line":14,"range":{"start_line":14,"start_character":0,"end_line":14,"end_character":3},"updated":"2016-02-17 17:42:05.000000000","message":"253","commit_id":"ae55fe15d124aa800cc60c80dc80ce297fa0c400"},{"author":{"_account_id":9796,"name":"ChangBo Guo","email":"glongwave@gmail.com","username":"gcb"},"change_message_id":"a8137d57bf3add64f40008500485a89afea4c218","unresolved":false,"context_lines":[{"line_number":11,"context_line":"correct hostname are specified in a config file."},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"A hostname refers to a valid DNS or hostname. It must not be longer than"},{"line_number":14,"context_line":"255 characters, have a segment greater than 63 characters and start or"},{"line_number":15,"context_line":"end with a hyphen."},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"Closes-Bug: #1508943"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":7,"id":"dae33548_d8cf3154","line":14,"range":{"start_line":14,"start_character":0,"end_line":14,"end_character":3},"in_reply_to":"dae33548_c0610f3b","updated":"2016-02-18 04:54:14.000000000","message":"Done","commit_id":"ae55fe15d124aa800cc60c80dc80ce297fa0c400"}],"oslo_config/cfg.py":[{"author":{"_account_id":9796,"name":"ChangBo Guo","email":"glongwave@gmail.com","username":"gcb"},"change_message_id":"6da3d0cd36584ea92558e3d1c0b3105f5d0e436f","unresolved":false,"context_lines":[{"line_number":1172,"context_line":""},{"line_number":1173,"context_line":"    Option with ``type`` :class:`oslo_config.types.Hostname`"},{"line_number":1174,"context_line":""},{"line_number":1175,"context_line":"    .. versionadded:: 2.7"},{"line_number":1176,"context_line":"    \"\"\""},{"line_number":1177,"context_line":""},{"line_number":1178,"context_line":"    def __init__(self, name, **kwargs):"}],"source_content_type":"text/x-python","patch_set":5,"id":"9a8ffd7b_c899f37a","line":1175,"updated":"2015-12-02 12:27:52.000000000","message":"s/2.7/3.1","commit_id":"b1e5ee7ff01bdf601951c9588e237adc70bc9676"},{"author":{"_account_id":8119,"name":"Eric Brown","email":"eric_wade_brown@yahoo.com","username":"ericwb"},"change_message_id":"da9dc15ac9f937a79d895f9fc7f5e1131bf6d940","unresolved":false,"context_lines":[{"line_number":1172,"context_line":""},{"line_number":1173,"context_line":"    Option with ``type`` :class:`oslo_config.types.Hostname`"},{"line_number":1174,"context_line":""},{"line_number":1175,"context_line":"    .. versionadded:: 2.7"},{"line_number":1176,"context_line":"    \"\"\""},{"line_number":1177,"context_line":""},{"line_number":1178,"context_line":"    def __init__(self, name, **kwargs):"}],"source_content_type":"text/x-python","patch_set":5,"id":"7a740942_d6fbb879","line":1175,"in_reply_to":"9a8ffd7b_c899f37a","updated":"2015-12-07 23:35:56.000000000","message":"Now 3.2","commit_id":"b1e5ee7ff01bdf601951c9588e237adc70bc9676"},{"author":{"_account_id":8119,"name":"Eric Brown","email":"eric_wade_brown@yahoo.com","username":"ericwb"},"change_message_id":"5c4527c0485fa0c20a22b2cf4808b58b2989e8b7","unresolved":false,"context_lines":[{"line_number":46,"context_line":"For convenience, there are predefined option subclasses in"},{"line_number":47,"context_line":":mod:`oslo_config.cfg` that set the option `type` as in the following table:"},{"line_number":48,"context_line":""},{"line_number":49,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d  \u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":50,"context_line":"Type                                  Option"},{"line_number":51,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d  \u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":52,"context_line":":class:`oslo_config.types.String`     - :class:`oslo_config.cfg.StrOpt`"},{"line_number":53,"context_line":"                                      - :class:`oslo_config.cfg.SubCommandOpt`"},{"line_number":54,"context_line":":class:`oslo_config.types.Boolean`    :class:`oslo_config.cfg.BoolOpt`"},{"line_number":55,"context_line":":class:`oslo_config.types.Integer`    - :class:`oslo_config.cfg.IntOpt`"},{"line_number":56,"context_line":"                                      - :class:`oslo_config.cfg.PortOpt`"},{"line_number":57,"context_line":":class:`oslo_config.types.Float`      :class:`oslo_config.cfg.FloatOpt`"},{"line_number":58,"context_line":":class:`oslo_config.types.List`       :class:`oslo_config.cfg.ListOpt`"},{"line_number":59,"context_line":":class:`oslo_config.types.Dict`       :class:`oslo_config.cfg.DictOpt`"},{"line_number":60,"context_line":":class:`oslo_config.types.IPAddress`  :class:`oslo_config.cfg.IPOpt`"},{"line_number":61,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d  \u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":62,"context_line":""},{"line_number":63,"context_line":"For :class:`oslo_config.cfg.MultiOpt` the `item_type` parameter defines"},{"line_number":64,"context_line":"the type of the values. For convenience, :class:`oslo_config.cfg.MultiStrOpt`"}],"source_content_type":"text/x-python","patch_set":6,"id":"7a5de9d1_11aa7285","line":61,"range":{"start_line":49,"start_character":0,"end_line":61,"end_character":44},"updated":"2016-02-01 19:25:30.000000000","message":"Also add info here on the Hostname Opt","commit_id":"96ee8e268ce75a0a2118d0b9e44b1bb541b3dbd7"},{"author":{"_account_id":9796,"name":"ChangBo Guo","email":"glongwave@gmail.com","username":"gcb"},"change_message_id":"7e662e28669f0883de8e35e93b490c7cead82185","unresolved":false,"context_lines":[{"line_number":46,"context_line":"For convenience, there are predefined option subclasses in"},{"line_number":47,"context_line":":mod:`oslo_config.cfg` that set the option `type` as in the following table:"},{"line_number":48,"context_line":""},{"line_number":49,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d  \u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":50,"context_line":"Type                                  Option"},{"line_number":51,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d  \u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":52,"context_line":":class:`oslo_config.types.String`     - :class:`oslo_config.cfg.StrOpt`"},{"line_number":53,"context_line":"                                      - :class:`oslo_config.cfg.SubCommandOpt`"},{"line_number":54,"context_line":":class:`oslo_config.types.Boolean`    :class:`oslo_config.cfg.BoolOpt`"},{"line_number":55,"context_line":":class:`oslo_config.types.Integer`    - :class:`oslo_config.cfg.IntOpt`"},{"line_number":56,"context_line":"                                      - :class:`oslo_config.cfg.PortOpt`"},{"line_number":57,"context_line":":class:`oslo_config.types.Float`      :class:`oslo_config.cfg.FloatOpt`"},{"line_number":58,"context_line":":class:`oslo_config.types.List`       :class:`oslo_config.cfg.ListOpt`"},{"line_number":59,"context_line":":class:`oslo_config.types.Dict`       :class:`oslo_config.cfg.DictOpt`"},{"line_number":60,"context_line":":class:`oslo_config.types.IPAddress`  :class:`oslo_config.cfg.IPOpt`"},{"line_number":61,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d  \u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":62,"context_line":""},{"line_number":63,"context_line":"For :class:`oslo_config.cfg.MultiOpt` the `item_type` parameter defines"},{"line_number":64,"context_line":"the type of the values. For convenience, :class:`oslo_config.cfg.MultiStrOpt`"}],"source_content_type":"text/x-python","patch_set":6,"id":"dae33548_ba40a035","line":61,"range":{"start_line":49,"start_character":0,"end_line":61,"end_character":44},"in_reply_to":"7a5de9d1_11aa7285","updated":"2016-02-17 10:46:48.000000000","message":"Done","commit_id":"96ee8e268ce75a0a2118d0b9e44b1bb541b3dbd7"},{"author":{"_account_id":8119,"name":"Eric Brown","email":"eric_wade_brown@yahoo.com","username":"ericwb"},"change_message_id":"2b29e89cdce0a013d029326aa553de8d8b0a313a","unresolved":false,"context_lines":[{"line_number":1246,"context_line":""},{"line_number":1247,"context_line":"    Option with ``type`` :class:`oslo_config.types.Hostname`"},{"line_number":1248,"context_line":""},{"line_number":1249,"context_line":"    .. versionadded:: 3.3"},{"line_number":1250,"context_line":"    \"\"\""},{"line_number":1251,"context_line":""},{"line_number":1252,"context_line":"    def __init__(self, name, **kwargs):"}],"source_content_type":"text/x-python","patch_set":6,"id":"7a5de9d1_d6237054","line":1249,"range":{"start_line":1249,"start_character":22,"end_line":1249,"end_character":25},"updated":"2016-02-01 19:00:52.000000000","message":"You\u0027ll need to update this to current. 3.5 as of now, but may change by the time you rebase.","commit_id":"96ee8e268ce75a0a2118d0b9e44b1bb541b3dbd7"},{"author":{"_account_id":9796,"name":"ChangBo Guo","email":"glongwave@gmail.com","username":"gcb"},"change_message_id":"7e662e28669f0883de8e35e93b490c7cead82185","unresolved":false,"context_lines":[{"line_number":1246,"context_line":""},{"line_number":1247,"context_line":"    Option with ``type`` :class:`oslo_config.types.Hostname`"},{"line_number":1248,"context_line":""},{"line_number":1249,"context_line":"    .. versionadded:: 3.3"},{"line_number":1250,"context_line":"    \"\"\""},{"line_number":1251,"context_line":""},{"line_number":1252,"context_line":"    def __init__(self, name, **kwargs):"}],"source_content_type":"text/x-python","patch_set":6,"id":"dae33548_1a61ccd3","line":1249,"range":{"start_line":1249,"start_character":22,"end_line":1249,"end_character":25},"in_reply_to":"7a5de9d1_d6237054","updated":"2016-02-17 10:46:48.000000000","message":"Done","commit_id":"96ee8e268ce75a0a2118d0b9e44b1bb541b3dbd7"}],"oslo_config/tests/test_types.py":[{"author":{"_account_id":11650,"name":"Tom Cammann","email":"tom.cammann@hpe.com","username":"cammann"},"change_message_id":"f38afcac5dfb43788b23e232938c86010e77f472","unresolved":false,"context_lines":[{"line_number":513,"context_line":"    def test_should_return_same_hostname_if_valid(self):"},{"line_number":514,"context_line":"        self.assertConvertedValue(\u0027foo.bar\u0027, \u0027foo.bar\u0027)"},{"line_number":515,"context_line":""},{"line_number":516,"context_line":"    # def test_hostname_with_quote_is_invalid(self):"},{"line_number":517,"context_line":"    #     self.type_instance \u003d types.String(quotes\u003dTrue)"},{"line_number":518,"context_line":"    #     self.assertInvalid(\u0027\"foo.bar\"\u0027)"},{"line_number":519,"context_line":"    #     self.assertInvalid(\"\u0027bar.baz\u0027\")"}],"source_content_type":"text/x-python","patch_set":1,"id":"3a29b11f_9319a424","line":516,"updated":"2015-10-22 14:26:57.000000000","message":"forgot to uncomment/remove.","commit_id":"ba0c33434ca1a04eb247ba24db516493b88b3f64"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"0d3b57c2a31ec9a85dc2779a70ab83261740eaa0","unresolved":false,"context_lines":[{"line_number":504,"context_line":"class HostnameTypeTests(TypeTestHelper, unittest.TestCase):"},{"line_number":505,"context_line":"    type \u003d types.Hostname()"},{"line_number":506,"context_line":""},{"line_number":507,"context_line":"    def assertConvertedEqual(self, value):"},{"line_number":508,"context_line":"        self.assertConvertedValue(value, value)"},{"line_number":509,"context_line":""},{"line_number":510,"context_line":"    def test_empty_hostname_fails(self):"}],"source_content_type":"text/x-python","patch_set":4,"id":"da85f559_9724fa0c","line":507,"updated":"2015-11-12 16:45:45.000000000","message":"what\u0027s the point of this? add a comment.","commit_id":"bf45ef3fde69e1702057b731e761bb14b4963fd5"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"0d3b57c2a31ec9a85dc2779a70ab83261740eaa0","unresolved":false,"context_lines":[{"line_number":511,"context_line":"        self.assertInvalid(\u0027\u0027)"},{"line_number":512,"context_line":""},{"line_number":513,"context_line":"    def test_should_return_same_hostname_if_valid(self):"},{"line_number":514,"context_line":"        self.assertConvertedValue(\u0027foo.bar\u0027, \u0027foo.bar\u0027)"},{"line_number":515,"context_line":""},{"line_number":516,"context_line":"    def test_trailing_quote_is_invalid(self):"},{"line_number":517,"context_line":"        self.assertInvalid(\u0027foo.bar\"\u0027)"}],"source_content_type":"text/x-python","patch_set":4,"id":"da85f559_b7333e61","line":514,"updated":"2015-11-12 16:45:45.000000000","message":"use assertConvertedEqual","commit_id":"bf45ef3fde69e1702057b731e761bb14b4963fd5"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"0d3b57c2a31ec9a85dc2779a70ab83261740eaa0","unresolved":false,"context_lines":[{"line_number":550,"context_line":"    def test_valid_hostname(self):"},{"line_number":551,"context_line":"        self.assertConvertedEqual(\u0027cell1.nova.site1\u0027)"},{"line_number":552,"context_line":"        self.assertConvertedEqual(\u0027site01001\u0027)"},{"line_number":553,"context_line":"        self.assertConvertedEqual(\u0027home-site-here.org.com\u0027)"},{"line_number":554,"context_line":"        self.assertConvertedEqual(\u0027192.168.0.1\u0027)"},{"line_number":555,"context_line":"        self.assertConvertedEqual(\u00271.1.1\u0027)"},{"line_number":556,"context_line":"        self.assertConvertedEqual(\u0027localhost\u0027)"}],"source_content_type":"text/x-python","patch_set":4,"id":"da85f559_f22eb441","line":553,"updated":"2015-11-12 16:45:45.000000000","message":"there should be a test for a hostname that ends in .\n\nalso, one that begins in . (invalid?)\n\nalso, one that has 2 .. together. (0-length segment, invalid?)","commit_id":"bf45ef3fde69e1702057b731e761bb14b4963fd5"},{"author":{"_account_id":11650,"name":"Tom Cammann","email":"tom.cammann@hpe.com","username":"cammann"},"change_message_id":"c9500f85c1be0e19144ae2d0f9cd53b1e1f4b243","unresolved":false,"context_lines":[{"line_number":550,"context_line":"    def test_valid_hostname(self):"},{"line_number":551,"context_line":"        self.assertConvertedEqual(\u0027cell1.nova.site1\u0027)"},{"line_number":552,"context_line":"        self.assertConvertedEqual(\u0027site01001\u0027)"},{"line_number":553,"context_line":"        self.assertConvertedEqual(\u0027home-site-here.org.com\u0027)"},{"line_number":554,"context_line":"        self.assertConvertedEqual(\u0027192.168.0.1\u0027)"},{"line_number":555,"context_line":"        self.assertConvertedEqual(\u00271.1.1\u0027)"},{"line_number":556,"context_line":"        self.assertConvertedEqual(\u0027localhost\u0027)"}],"source_content_type":"text/x-python","patch_set":4,"id":"ba8a016a_ac9c2e6a","line":553,"in_reply_to":"da85f559_f22eb441","updated":"2015-11-17 16:08:37.000000000","message":"\"..\" is tested in line 538\n\nA trailing \".\" is tested on line 547\n\nI can add one for a leading .","commit_id":"bf45ef3fde69e1702057b731e761bb14b4963fd5"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"0d3b57c2a31ec9a85dc2779a70ab83261740eaa0","unresolved":false,"context_lines":[{"line_number":552,"context_line":"        self.assertConvertedEqual(\u0027site01001\u0027)"},{"line_number":553,"context_line":"        self.assertConvertedEqual(\u0027home-site-here.org.com\u0027)"},{"line_number":554,"context_line":"        self.assertConvertedEqual(\u0027192.168.0.1\u0027)"},{"line_number":555,"context_line":"        self.assertConvertedEqual(\u00271.1.1\u0027)"},{"line_number":556,"context_line":"        self.assertConvertedEqual(\u0027localhost\u0027)"},{"line_number":557,"context_line":""},{"line_number":558,"context_line":"    def test_max_segment_size(self):"}],"source_content_type":"text/x-python","patch_set":4,"id":"da85f559_57177244","line":555,"updated":"2015-11-12 16:45:45.000000000","message":"there should also be IPv6 addresses tested.","commit_id":"bf45ef3fde69e1702057b731e761bb14b4963fd5"},{"author":{"_account_id":11650,"name":"Tom Cammann","email":"tom.cammann@hpe.com","username":"cammann"},"change_message_id":"c9500f85c1be0e19144ae2d0f9cd53b1e1f4b243","unresolved":false,"context_lines":[{"line_number":552,"context_line":"        self.assertConvertedEqual(\u0027site01001\u0027)"},{"line_number":553,"context_line":"        self.assertConvertedEqual(\u0027home-site-here.org.com\u0027)"},{"line_number":554,"context_line":"        self.assertConvertedEqual(\u0027192.168.0.1\u0027)"},{"line_number":555,"context_line":"        self.assertConvertedEqual(\u00271.1.1\u0027)"},{"line_number":556,"context_line":"        self.assertConvertedEqual(\u0027localhost\u0027)"},{"line_number":557,"context_line":""},{"line_number":558,"context_line":"    def test_max_segment_size(self):"}],"source_content_type":"text/x-python","patch_set":4,"id":"ba8a016a_cc265216","line":555,"in_reply_to":"da85f559_57177244","updated":"2015-11-17 16:08:37.000000000","message":"IPv6 is not a hostname.","commit_id":"bf45ef3fde69e1702057b731e761bb14b4963fd5"},{"author":{"_account_id":8688,"name":"Alexis Lee","email":"openstack@lxsli.co.uk","username":"lxsli"},"change_message_id":"517e8d2f3a6cefc075b50f97c0dc99cf00f69065","unresolved":false,"context_lines":[{"line_number":577,"context_line":""},{"line_number":578,"context_line":"    def test_not_equal_to_other_class(self):"},{"line_number":579,"context_line":"        self.assertFalse(types.Hostname() \u003d\u003d types.Integer())"},{"line_number":580,"context_line":"        self.assertFalse(types.Hostname() \u003d\u003d types.String())"},{"line_number":581,"context_line":""},{"line_number":582,"context_line":"    def test_invalid_characters(self):"},{"line_number":583,"context_line":"        self.assertInvalid(\u0027\"host\"\u0027)"}],"source_content_type":"text/x-python","patch_set":6,"id":"7a5de9d1_02bab4c0","line":580,"updated":"2016-01-28 16:22:52.000000000","message":"Why not assertNotEqual?","commit_id":"96ee8e268ce75a0a2118d0b9e44b1bb541b3dbd7"},{"author":{"_account_id":9796,"name":"ChangBo Guo","email":"glongwave@gmail.com","username":"gcb"},"change_message_id":"7e662e28669f0883de8e35e93b490c7cead82185","unresolved":false,"context_lines":[{"line_number":577,"context_line":""},{"line_number":578,"context_line":"    def test_not_equal_to_other_class(self):"},{"line_number":579,"context_line":"        self.assertFalse(types.Hostname() \u003d\u003d types.Integer())"},{"line_number":580,"context_line":"        self.assertFalse(types.Hostname() \u003d\u003d types.String())"},{"line_number":581,"context_line":""},{"line_number":582,"context_line":"    def test_invalid_characters(self):"},{"line_number":583,"context_line":"        self.assertInvalid(\u0027\"host\"\u0027)"}],"source_content_type":"text/x-python","patch_set":6,"id":"dae33548_ba53806a","line":580,"in_reply_to":"7a5de9d1_02bab4c0","updated":"2016-02-17 10:46:48.000000000","message":"Done","commit_id":"96ee8e268ce75a0a2118d0b9e44b1bb541b3dbd7"},{"author":{"_account_id":8688,"name":"Alexis Lee","email":"openstack@lxsli.co.uk","username":"lxsli"},"change_message_id":"517e8d2f3a6cefc075b50f97c0dc99cf00f69065","unresolved":false,"context_lines":[{"line_number":580,"context_line":"        self.assertFalse(types.Hostname() \u003d\u003d types.String())"},{"line_number":581,"context_line":""},{"line_number":582,"context_line":"    def test_invalid_characters(self):"},{"line_number":583,"context_line":"        self.assertInvalid(\u0027\"host\"\u0027)"},{"line_number":584,"context_line":"        self.assertInvalid(\"h\u0027ost\u0027\")"},{"line_number":585,"context_line":"        self.assertInvalid(\"h\u0027ost\")"},{"line_number":586,"context_line":"        self.assertInvalid(\"host_01.co.uk\")"}],"source_content_type":"text/x-python","patch_set":6,"id":"7a5de9d1_7f8545ab","line":583,"updated":"2016-01-28 16:22:52.000000000","message":"Can we do something more like:\n\n  for sym in \"\u0027$%\":\n    self.assertInvalid(\"aaa%sbbb\" % sym)","commit_id":"96ee8e268ce75a0a2118d0b9e44b1bb541b3dbd7"},{"author":{"_account_id":9796,"name":"ChangBo Guo","email":"glongwave@gmail.com","username":"gcb"},"change_message_id":"7e662e28669f0883de8e35e93b490c7cead82185","unresolved":false,"context_lines":[{"line_number":580,"context_line":"        self.assertFalse(types.Hostname() \u003d\u003d types.String())"},{"line_number":581,"context_line":""},{"line_number":582,"context_line":"    def test_invalid_characters(self):"},{"line_number":583,"context_line":"        self.assertInvalid(\u0027\"host\"\u0027)"},{"line_number":584,"context_line":"        self.assertInvalid(\"h\u0027ost\u0027\")"},{"line_number":585,"context_line":"        self.assertInvalid(\"h\u0027ost\")"},{"line_number":586,"context_line":"        self.assertInvalid(\"host_01.co.uk\")"}],"source_content_type":"text/x-python","patch_set":6,"id":"dae33548_7038f93d","line":583,"in_reply_to":"7a5de9d1_7f8545ab","updated":"2016-02-17 10:46:48.000000000","message":"will add these characters","commit_id":"96ee8e268ce75a0a2118d0b9e44b1bb541b3dbd7"},{"author":{"_account_id":8688,"name":"Alexis Lee","email":"openstack@lxsli.co.uk","username":"lxsli"},"change_message_id":"517e8d2f3a6cefc075b50f97c0dc99cf00f69065","unresolved":false,"context_lines":[{"line_number":615,"context_line":"                           \"0123456789012345678901234567890123.com\")"},{"line_number":616,"context_line":""},{"line_number":617,"context_line":"    def test_max_hostname_size(self):"},{"line_number":618,"context_line":"        test_str \u003d (\"host.name.here.is.too.long.to.be.a.valid.host\""},{"line_number":619,"context_line":"                    \".name.as.it.must.be.under.two.hunderdred.and\""},{"line_number":620,"context_line":"                    \".fifty.five.characters.long.and.this.hostname\""},{"line_number":621,"context_line":"                    \".is.one.character.longer.than.the.maximum.number\""}],"source_content_type":"text/x-python","patch_set":6,"id":"7a5de9d1_25633ade","line":618,"updated":"2016-01-28 16:22:52.000000000","message":"What about \u0027.\u0027.join(\u0027x\u0027*63 for x in range(5)) ?","commit_id":"96ee8e268ce75a0a2118d0b9e44b1bb541b3dbd7"},{"author":{"_account_id":8688,"name":"Alexis Lee","email":"openstack@lxsli.co.uk","username":"lxsli"},"change_message_id":"eabf04ce6e234bbc20349e430c174d099db90c53","unresolved":false,"context_lines":[{"line_number":612,"context_line":""},{"line_number":613,"context_line":"    def test_max_segment_size(self):"},{"line_number":614,"context_line":"        self.assertConvertedEqual(\"host.com.012345678901234567890123456789\""},{"line_number":615,"context_line":"                                  \"01234567890123456789012345678901.com\")"},{"line_number":616,"context_line":"        self.assertInvalid(\"hostname.com.012345678901234567890123456789\""},{"line_number":617,"context_line":"                           \"0123456789012345678901234567890123.com\")"},{"line_number":618,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"dae33548_806a677f","line":615,"updated":"2016-02-17 17:42:05.000000000","message":"nit: I wouldn\u0027t have to len this string manually if you did something more like:\n\n  \"a.%s.c\" % (\"b\" * 63)\n\nI see this technique was used on L620.","commit_id":"ae55fe15d124aa800cc60c80dc80ce297fa0c400"},{"author":{"_account_id":9796,"name":"ChangBo Guo","email":"glongwave@gmail.com","username":"gcb"},"change_message_id":"a8137d57bf3add64f40008500485a89afea4c218","unresolved":false,"context_lines":[{"line_number":612,"context_line":""},{"line_number":613,"context_line":"    def test_max_segment_size(self):"},{"line_number":614,"context_line":"        self.assertConvertedEqual(\"host.com.012345678901234567890123456789\""},{"line_number":615,"context_line":"                                  \"01234567890123456789012345678901.com\")"},{"line_number":616,"context_line":"        self.assertInvalid(\"hostname.com.012345678901234567890123456789\""},{"line_number":617,"context_line":"                           \"0123456789012345678901234567890123.com\")"},{"line_number":618,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"dae33548_3820ddf6","line":615,"in_reply_to":"dae33548_806a677f","updated":"2016-02-18 04:54:14.000000000","message":"Done","commit_id":"ae55fe15d124aa800cc60c80dc80ce297fa0c400"}],"oslo_config/types.py":[{"author":{"_account_id":1669,"name":"Julien Danjou","display_name":"jd","email":"julien@danjou.info","username":"jdanjou"},"change_message_id":"e4c231adc1539960332543f9f849bff05e7563f9","unresolved":false,"context_lines":[{"line_number":463,"context_line":"    BASE_TYPES \u003d six.string_types"},{"line_number":464,"context_line":""},{"line_number":465,"context_line":"    def __init__(self):"},{"line_number":466,"context_line":"        super(Hostname, self).__init__()"},{"line_number":467,"context_line":""},{"line_number":468,"context_line":"    def __call__(self, value):"},{"line_number":469,"context_line":"        \"\"\"Check hostname is valid."}],"source_content_type":"text/x-python","patch_set":2,"id":"1a26ad4f_51bae5e2","line":466,"updated":"2015-10-27 23:34:31.000000000","message":"Both lines are useless here.","commit_id":"b87e0991562e51acd1a801d9017304d66c6bb411"},{"author":{"_account_id":11650,"name":"Tom Cammann","email":"tom.cammann@hpe.com","username":"cammann"},"change_message_id":"518c56f32aaec621e78e6cbd38c615593dc8372c","unresolved":false,"context_lines":[{"line_number":463,"context_line":"    BASE_TYPES \u003d six.string_types"},{"line_number":464,"context_line":""},{"line_number":465,"context_line":"    def __init__(self):"},{"line_number":466,"context_line":"        super(Hostname, self).__init__()"},{"line_number":467,"context_line":""},{"line_number":468,"context_line":"    def __call__(self, value):"},{"line_number":469,"context_line":"        \"\"\"Check hostname is valid."}],"source_content_type":"text/x-python","patch_set":2,"id":"1a26ad4f_0ae16bfe","line":466,"in_reply_to":"1a26ad4f_51bae5e2","updated":"2015-10-29 06:18:07.000000000","message":"Will change.","commit_id":"b87e0991562e51acd1a801d9017304d66c6bb411"},{"author":{"_account_id":1669,"name":"Julien Danjou","display_name":"jd","email":"julien@danjou.info","username":"jdanjou"},"change_message_id":"6f53dc5e490fb377183b40be921a8238550842e3","unresolved":false,"context_lines":[{"line_number":478,"context_line":""},{"line_number":479,"context_line":"        if len(value) \u003d\u003d 0:"},{"line_number":480,"context_line":"            raise ValueError(\"Cannot have 0 len hostname\")"},{"line_number":481,"context_line":"        if len(value) \u003e 255:"},{"line_number":482,"context_line":"            raise ValueError(\"%s hostname is greater than 255 chars\" % value)"},{"line_number":483,"context_line":"        if value[-1] \u003d\u003d \".\":"},{"line_number":484,"context_line":"            value \u003d value[:-1]"}],"source_content_type":"text/x-python","patch_set":2,"id":"1a26ad4f_35a288af","line":481,"updated":"2015-10-29 07:01:15.000000000","message":"I think it might be 254 or 253 here, see:\n\nhttp://blogs.msdn.com/b/oldnewthing/archive/2012/04/12/10292868.aspx","commit_id":"b87e0991562e51acd1a801d9017304d66c6bb411"},{"author":{"_account_id":1669,"name":"Julien Danjou","display_name":"jd","email":"julien@danjou.info","username":"jdanjou"},"change_message_id":"e4c231adc1539960332543f9f849bff05e7563f9","unresolved":false,"context_lines":[{"line_number":482,"context_line":"            raise ValueError(\"%s hostname is greater than 255 chars\" % value)"},{"line_number":483,"context_line":"        if value[-1] \u003d\u003d \".\":"},{"line_number":484,"context_line":"            value \u003d value[:-1]"},{"line_number":485,"context_line":"        allowed \u003d re.compile(\"(?!-)[A-Z\\d-]{1,63}(?\u003c!-)$\", re.IGNORECASE)"},{"line_number":486,"context_line":"        if any((not allowed.match(x)) for x in value.split(\".\")):"},{"line_number":487,"context_line":"            raise ValueError(\"%s is an invalid hostname\" % value)"},{"line_number":488,"context_line":"        return value"}],"source_content_type":"text/x-python","patch_set":2,"id":"1a26ad4f_91763d3d","line":485,"updated":"2015-10-27 23:34:31.000000000","message":"I might be dumb but I don\u0027t get where the 63 comes from.","commit_id":"b87e0991562e51acd1a801d9017304d66c6bb411"},{"author":{"_account_id":12952,"name":"ice yao","email":"yao3690093@gmail.com","username":"xiabing.yao"},"change_message_id":"e07e7b4bb05a272ec7fa19564cfc5231989b8b10","unresolved":false,"context_lines":[{"line_number":482,"context_line":"            raise ValueError(\"%s hostname is greater than 255 chars\" % value)"},{"line_number":483,"context_line":"        if value[-1] \u003d\u003d \".\":"},{"line_number":484,"context_line":"            value \u003d value[:-1]"},{"line_number":485,"context_line":"        allowed \u003d re.compile(\"(?!-)[A-Z\\d-]{1,63}(?\u003c!-)$\", re.IGNORECASE)"},{"line_number":486,"context_line":"        if any((not allowed.match(x)) for x in value.split(\".\")):"},{"line_number":487,"context_line":"            raise ValueError(\"%s is an invalid hostname\" % value)"},{"line_number":488,"context_line":"        return value"}],"source_content_type":"text/x-python","patch_set":2,"id":"3a29b11f_1ca1bda9","line":485,"updated":"2015-10-27 05:10:13.000000000","message":"You should check the hostname whether is valid.the method called for checking the hostname is getaddrinfo [1][2].\nReference:[1] https://github.com/openstack/keystone/blob/13f1da5bd0cd12aefd5eb2c39c3c59d398ad30bc/keystone/common/environment/eventlet_server.py#L102-L105 \n[2] https://docs.python.org/2/library/socket.html#socket.getaddrinfo","commit_id":"b87e0991562e51acd1a801d9017304d66c6bb411"},{"author":{"_account_id":1669,"name":"Julien Danjou","display_name":"jd","email":"julien@danjou.info","username":"jdanjou"},"change_message_id":"6f53dc5e490fb377183b40be921a8238550842e3","unresolved":false,"context_lines":[{"line_number":482,"context_line":"            raise ValueError(\"%s hostname is greater than 255 chars\" % value)"},{"line_number":483,"context_line":"        if value[-1] \u003d\u003d \".\":"},{"line_number":484,"context_line":"            value \u003d value[:-1]"},{"line_number":485,"context_line":"        allowed \u003d re.compile(\"(?!-)[A-Z\\d-]{1,63}(?\u003c!-)$\", re.IGNORECASE)"},{"line_number":486,"context_line":"        if any((not allowed.match(x)) for x in value.split(\".\")):"},{"line_number":487,"context_line":"            raise ValueError(\"%s is an invalid hostname\" % value)"},{"line_number":488,"context_line":"        return value"}],"source_content_type":"text/x-python","patch_set":2,"id":"1a26ad4f_55d70423","line":485,"in_reply_to":"1a26ad4f_0ab88be4","updated":"2015-10-29 07:01:15.000000000","message":"My bad!","commit_id":"b87e0991562e51acd1a801d9017304d66c6bb411"},{"author":{"_account_id":11650,"name":"Tom Cammann","email":"tom.cammann@hpe.com","username":"cammann"},"change_message_id":"518c56f32aaec621e78e6cbd38c615593dc8372c","unresolved":false,"context_lines":[{"line_number":482,"context_line":"            raise ValueError(\"%s hostname is greater than 255 chars\" % value)"},{"line_number":483,"context_line":"        if value[-1] \u003d\u003d \".\":"},{"line_number":484,"context_line":"            value \u003d value[:-1]"},{"line_number":485,"context_line":"        allowed \u003d re.compile(\"(?!-)[A-Z\\d-]{1,63}(?\u003c!-)$\", re.IGNORECASE)"},{"line_number":486,"context_line":"        if any((not allowed.match(x)) for x in value.split(\".\")):"},{"line_number":487,"context_line":"            raise ValueError(\"%s is an invalid hostname\" % value)"},{"line_number":488,"context_line":"        return value"}],"source_content_type":"text/x-python","patch_set":2,"id":"1a26ad4f_0ab88be4","line":485,"in_reply_to":"1a26ad4f_91763d3d","updated":"2015-10-29 06:18:07.000000000","message":"Segment size in dns can\u0027t be greater than 63 chars, this is mentioned in commit message and in the doc string :)","commit_id":"b87e0991562e51acd1a801d9017304d66c6bb411"},{"author":{"_account_id":11650,"name":"Tom Cammann","email":"tom.cammann@hpe.com","username":"cammann"},"change_message_id":"65ea1b850a71e099c86e329cc033e5a3ee148a3c","unresolved":false,"context_lines":[{"line_number":482,"context_line":"            raise ValueError(\"%s hostname is greater than 255 chars\" % value)"},{"line_number":483,"context_line":"        if value[-1] \u003d\u003d \".\":"},{"line_number":484,"context_line":"            value \u003d value[:-1]"},{"line_number":485,"context_line":"        allowed \u003d re.compile(\"(?!-)[A-Z\\d-]{1,63}(?\u003c!-)$\", re.IGNORECASE)"},{"line_number":486,"context_line":"        if any((not allowed.match(x)) for x in value.split(\".\")):"},{"line_number":487,"context_line":"            raise ValueError(\"%s is an invalid hostname\" % value)"},{"line_number":488,"context_line":"        return value"}],"source_content_type":"text/x-python","patch_set":2,"id":"1a26ad4f_368df67b","line":485,"in_reply_to":"3a29b11f_1ca1bda9","updated":"2015-10-27 07:00:53.000000000","message":"Using getaddrinfo would do a lookup and then return the IP, we do not want to do this.","commit_id":"b87e0991562e51acd1a801d9017304d66c6bb411"},{"author":{"_account_id":1669,"name":"Julien Danjou","display_name":"jd","email":"julien@danjou.info","username":"jdanjou"},"change_message_id":"9f7d802fa286bba214e6fe935848281a65667041","unresolved":false,"context_lines":[{"line_number":453,"context_line":"    BASE_TYPES \u003d six.string_types"},{"line_number":454,"context_line":""},{"line_number":455,"context_line":"    def __init__(self):"},{"line_number":456,"context_line":"        super(Hostname, self).__init__()"},{"line_number":457,"context_line":""},{"line_number":458,"context_line":"    def __call__(self, value):"},{"line_number":459,"context_line":"        \"\"\"Check hostname is valid."}],"source_content_type":"text/x-python","patch_set":3,"id":"da85f559_c977fa00","line":456,"updated":"2015-11-09 16:38:31.000000000","message":"Not needed AFAICT.","commit_id":"6509cc0e2620f043234ceefe5c9d1a7701d58c27"},{"author":{"_account_id":11650,"name":"Tom Cammann","email":"tom.cammann@hpe.com","username":"cammann"},"change_message_id":"b5968d8246e372384e3c9c3ca1a1d9b82a9f6aa3","unresolved":false,"context_lines":[{"line_number":453,"context_line":"    BASE_TYPES \u003d six.string_types"},{"line_number":454,"context_line":""},{"line_number":455,"context_line":"    def __init__(self):"},{"line_number":456,"context_line":"        super(Hostname, self).__init__()"},{"line_number":457,"context_line":""},{"line_number":458,"context_line":"    def __call__(self, value):"},{"line_number":459,"context_line":"        \"\"\"Check hostname is valid."}],"source_content_type":"text/x-python","patch_set":3,"id":"da85f559_14ec9128","line":456,"in_reply_to":"da85f559_c977fa00","updated":"2015-11-12 13:38:22.000000000","message":"Done","commit_id":"6509cc0e2620f043234ceefe5c9d1a7701d58c27"},{"author":{"_account_id":1669,"name":"Julien Danjou","display_name":"jd","email":"julien@danjou.info","username":"jdanjou"},"change_message_id":"9f7d802fa286bba214e6fe935848281a65667041","unresolved":false,"context_lines":[{"line_number":477,"context_line":"            raise ValueError(\"%s is an invalid hostname\" % value)"},{"line_number":478,"context_line":"        return value"},{"line_number":479,"context_line":""},{"line_number":480,"context_line":"    def __repr__(self):"},{"line_number":481,"context_line":"        return \u0027Hostname\u0027"},{"line_number":482,"context_line":""},{"line_number":483,"context_line":"    def __eq__(self, other):"}],"source_content_type":"text/x-python","patch_set":3,"id":"da85f559_69884ee8","line":480,"updated":"2015-11-09 16:38:31.000000000","message":"@staticmethod","commit_id":"6509cc0e2620f043234ceefe5c9d1a7701d58c27"},{"author":{"_account_id":11650,"name":"Tom Cammann","email":"tom.cammann@hpe.com","username":"cammann"},"change_message_id":"b5968d8246e372384e3c9c3ca1a1d9b82a9f6aa3","unresolved":false,"context_lines":[{"line_number":477,"context_line":"            raise ValueError(\"%s is an invalid hostname\" % value)"},{"line_number":478,"context_line":"        return value"},{"line_number":479,"context_line":""},{"line_number":480,"context_line":"    def __repr__(self):"},{"line_number":481,"context_line":"        return \u0027Hostname\u0027"},{"line_number":482,"context_line":""},{"line_number":483,"context_line":"    def __eq__(self, other):"}],"source_content_type":"text/x-python","patch_set":3,"id":"da85f559_8129219d","line":480,"in_reply_to":"da85f559_69884ee8","updated":"2015-11-12 13:38:22.000000000","message":"None of the other methods in this module have @staticmethod on __repr__  and typically you wouldn\u0027t use repr as a staticmethod.","commit_id":"6509cc0e2620f043234ceefe5c9d1a7701d58c27"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"0d3b57c2a31ec9a85dc2779a70ab83261740eaa0","unresolved":false,"context_lines":[{"line_number":448,"context_line":"            raise ValueError(\"%s is not IPv4 or IPv6 address\" % address)"},{"line_number":449,"context_line":""},{"line_number":450,"context_line":""},{"line_number":451,"context_line":"class Hostname(ConfigType):"},{"line_number":452,"context_line":""},{"line_number":453,"context_line":"    BASE_TYPES \u003d six.string_types"},{"line_number":454,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"da85f559_2c1cdc68","line":451,"updated":"2015-11-12 16:45:45.000000000","message":"According to the tests this also supports IP addresses, so this should be called HostnameOrIP","commit_id":"bf45ef3fde69e1702057b731e761bb14b4963fd5"},{"author":{"_account_id":11650,"name":"Tom Cammann","email":"tom.cammann@hpe.com","username":"cammann"},"change_message_id":"c9500f85c1be0e19144ae2d0f9cd53b1e1f4b243","unresolved":false,"context_lines":[{"line_number":448,"context_line":"            raise ValueError(\"%s is not IPv4 or IPv6 address\" % address)"},{"line_number":449,"context_line":""},{"line_number":450,"context_line":""},{"line_number":451,"context_line":"class Hostname(ConfigType):"},{"line_number":452,"context_line":""},{"line_number":453,"context_line":"    BASE_TYPES \u003d six.string_types"},{"line_number":454,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"ba8a016a_1f348fdc","line":451,"in_reply_to":"da85f559_2c1cdc68","updated":"2015-11-17 16:08:37.000000000","message":"It does not support IP addresses, it only supports IPv4 because it happens to be a subset of hostnames. It does not support IPv6.","commit_id":"bf45ef3fde69e1702057b731e761bb14b4963fd5"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"0d3b57c2a31ec9a85dc2779a70ab83261740eaa0","unresolved":false,"context_lines":[{"line_number":462,"context_line":""},{"line_number":463,"context_line":"        See from http://stackoverflow.com/a/2532344/"},{"line_number":464,"context_line":"        \"\"\""},{"line_number":465,"context_line":""},{"line_number":466,"context_line":"        if len(value) \u003d\u003d 0:"},{"line_number":467,"context_line":"            raise ValueError(\"Cannot have 0 len hostname\")"},{"line_number":468,"context_line":"        if len(value) \u003e 255:"}],"source_content_type":"text/x-python","patch_set":4,"id":"da85f559_b8332b61","line":465,"updated":"2015-11-12 16:45:45.000000000","message":"This should check IP addresses using whatever the python equivalent of getaddrinfo(3) is since it would be clearer.","commit_id":"bf45ef3fde69e1702057b731e761bb14b4963fd5"},{"author":{"_account_id":11650,"name":"Tom Cammann","email":"tom.cammann@hpe.com","username":"cammann"},"change_message_id":"c9500f85c1be0e19144ae2d0f9cd53b1e1f4b243","unresolved":false,"context_lines":[{"line_number":462,"context_line":""},{"line_number":463,"context_line":"        See from http://stackoverflow.com/a/2532344/"},{"line_number":464,"context_line":"        \"\"\""},{"line_number":465,"context_line":""},{"line_number":466,"context_line":"        if len(value) \u003d\u003d 0:"},{"line_number":467,"context_line":"            raise ValueError(\"Cannot have 0 len hostname\")"},{"line_number":468,"context_line":"        if len(value) \u003e 255:"}],"source_content_type":"text/x-python","patch_set":4,"id":"ba8a016a_bf80e347","line":465,"in_reply_to":"da85f559_af567ecb","updated":"2015-11-17 16:08:37.000000000","message":"This was suggested in patch set 2 and does not work.","commit_id":"bf45ef3fde69e1702057b731e761bb14b4963fd5"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"d05b57eaa5d44408cf46e029fe9cb943cedfb262","unresolved":false,"context_lines":[{"line_number":462,"context_line":""},{"line_number":463,"context_line":"        See from http://stackoverflow.com/a/2532344/"},{"line_number":464,"context_line":"        \"\"\""},{"line_number":465,"context_line":""},{"line_number":466,"context_line":"        if len(value) \u003d\u003d 0:"},{"line_number":467,"context_line":"            raise ValueError(\"Cannot have 0 len hostname\")"},{"line_number":468,"context_line":"        if len(value) \u003e 255:"}],"source_content_type":"text/x-python","patch_set":4,"id":"da85f559_af567ecb","line":465,"in_reply_to":"da85f559_b8332b61","updated":"2015-11-12 17:02:03.000000000","message":"It\u0027s like\n\n  socket.getaddrinfo(\u0027::1\u0027, None, 0, 0, 0, socket.AI_NUMERICHOST)\n\nsocket.gaierror is raised if a name is given instead of an IPv4 or v6 address.","commit_id":"bf45ef3fde69e1702057b731e761bb14b4963fd5"},{"author":{"_account_id":9107,"name":"Victor Stinner","email":"vstinner@redhat.com","username":"haypo"},"change_message_id":"d8e45e2caaf84742c6dca0c82fe481504485c322","unresolved":false,"context_lines":[{"line_number":615,"context_line":""},{"line_number":616,"context_line":"        Ensures that each segment"},{"line_number":617,"context_line":"        - Contains at least one character and a maximum of 63 characters"},{"line_number":618,"context_line":"        - Consists only of allowed characters"},{"line_number":619,"context_line":"        - Does not begin or end with a hyphen"},{"line_number":620,"context_line":""},{"line_number":621,"context_line":"        See from http://stackoverflow.com/a/2532344/"}],"source_content_type":"text/x-python","patch_set":6,"id":"dae33548_09c19f2e","line":618,"range":{"start_line":618,"start_character":35,"end_line":618,"end_character":45},"updated":"2016-02-16 19:45:28.000000000","message":"you may mention allowed characters: letters (A-Z), digits (0-9), hyphen (-)","commit_id":"96ee8e268ce75a0a2118d0b9e44b1bb541b3dbd7"},{"author":{"_account_id":9796,"name":"ChangBo Guo","email":"glongwave@gmail.com","username":"gcb"},"change_message_id":"7e662e28669f0883de8e35e93b490c7cead82185","unresolved":false,"context_lines":[{"line_number":615,"context_line":""},{"line_number":616,"context_line":"        Ensures that each segment"},{"line_number":617,"context_line":"        - Contains at least one character and a maximum of 63 characters"},{"line_number":618,"context_line":"        - Consists only of allowed characters"},{"line_number":619,"context_line":"        - Does not begin or end with a hyphen"},{"line_number":620,"context_line":""},{"line_number":621,"context_line":"        See from http://stackoverflow.com/a/2532344/"}],"source_content_type":"text/x-python","patch_set":6,"id":"dae33548_ee6a66b2","line":618,"range":{"start_line":618,"start_character":35,"end_line":618,"end_character":45},"in_reply_to":"dae33548_09c19f2e","updated":"2016-02-17 10:46:48.000000000","message":"Done","commit_id":"96ee8e268ce75a0a2118d0b9e44b1bb541b3dbd7"},{"author":{"_account_id":9107,"name":"Victor Stinner","email":"vstinner@redhat.com","username":"haypo"},"change_message_id":"d8e45e2caaf84742c6dca0c82fe481504485c322","unresolved":false,"context_lines":[{"line_number":616,"context_line":"        Ensures that each segment"},{"line_number":617,"context_line":"        - Contains at least one character and a maximum of 63 characters"},{"line_number":618,"context_line":"        - Consists only of allowed characters"},{"line_number":619,"context_line":"        - Does not begin or end with a hyphen"},{"line_number":620,"context_line":""},{"line_number":621,"context_line":"        See from http://stackoverflow.com/a/2532344/"},{"line_number":622,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":6,"id":"dae33548_09efdfb0","line":619,"range":{"start_line":619,"start_character":14,"end_line":619,"end_character":15},"updated":"2016-02-16 19:45:28.000000000","message":"You may document the maximum total length: 253 characters (or 255?).","commit_id":"96ee8e268ce75a0a2118d0b9e44b1bb541b3dbd7"},{"author":{"_account_id":8119,"name":"Eric Brown","email":"eric_wade_brown@yahoo.com","username":"ericwb"},"change_message_id":"2b29e89cdce0a013d029326aa553de8d8b0a313a","unresolved":false,"context_lines":[{"line_number":618,"context_line":"        - Consists only of allowed characters"},{"line_number":619,"context_line":"        - Does not begin or end with a hyphen"},{"line_number":620,"context_line":""},{"line_number":621,"context_line":"        See from http://stackoverflow.com/a/2532344/"},{"line_number":622,"context_line":"        \"\"\""},{"line_number":623,"context_line":""},{"line_number":624,"context_line":"        if len(value) \u003d\u003d 0:"}],"source_content_type":"text/x-python","patch_set":6,"id":"7a5de9d1_b6703441","line":621,"range":{"start_line":621,"start_character":17,"end_line":621,"end_character":52},"updated":"2016-02-01 19:00:52.000000000","message":"I think it\u0027s better to refer to an RFC rather than stackoverflow.","commit_id":"96ee8e268ce75a0a2118d0b9e44b1bb541b3dbd7"},{"author":{"_account_id":9107,"name":"Victor Stinner","email":"vstinner@redhat.com","username":"haypo"},"change_message_id":"d8e45e2caaf84742c6dca0c82fe481504485c322","unresolved":false,"context_lines":[{"line_number":618,"context_line":"        - Consists only of allowed characters"},{"line_number":619,"context_line":"        - Does not begin or end with a hyphen"},{"line_number":620,"context_line":""},{"line_number":621,"context_line":"        See from http://stackoverflow.com/a/2532344/"},{"line_number":622,"context_line":"        \"\"\""},{"line_number":623,"context_line":""},{"line_number":624,"context_line":"        if len(value) \u003d\u003d 0:"}],"source_content_type":"text/x-python","patch_set":6,"id":"dae33548_26313206","line":621,"range":{"start_line":621,"start_character":17,"end_line":621,"end_character":52},"in_reply_to":"7a5de9d1_b6703441","updated":"2016-02-16 19:45:28.000000000","message":"https://en.wikipedia.org/wiki/Hostname mentions https://tools.ietf.org/html/rfc952 \u0026 https://tools.ietf.org/html/rfc1123","commit_id":"96ee8e268ce75a0a2118d0b9e44b1bb541b3dbd7"},{"author":{"_account_id":9796,"name":"ChangBo Guo","email":"glongwave@gmail.com","username":"gcb"},"change_message_id":"7e662e28669f0883de8e35e93b490c7cead82185","unresolved":false,"context_lines":[{"line_number":618,"context_line":"        - Consists only of allowed characters"},{"line_number":619,"context_line":"        - Does not begin or end with a hyphen"},{"line_number":620,"context_line":""},{"line_number":621,"context_line":"        See from http://stackoverflow.com/a/2532344/"},{"line_number":622,"context_line":"        \"\"\""},{"line_number":623,"context_line":""},{"line_number":624,"context_line":"        if len(value) \u003d\u003d 0:"}],"source_content_type":"text/x-python","patch_set":6,"id":"dae33548_eea546a2","line":621,"range":{"start_line":621,"start_character":17,"end_line":621,"end_character":52},"in_reply_to":"dae33548_26313206","updated":"2016-02-17 10:46:48.000000000","message":"will use wiki link","commit_id":"96ee8e268ce75a0a2118d0b9e44b1bb541b3dbd7"},{"author":{"_account_id":9107,"name":"Victor Stinner","email":"vstinner@redhat.com","username":"haypo"},"change_message_id":"d8e45e2caaf84742c6dca0c82fe481504485c322","unresolved":false,"context_lines":[{"line_number":622,"context_line":"        \"\"\""},{"line_number":623,"context_line":""},{"line_number":624,"context_line":"        if len(value) \u003d\u003d 0:"},{"line_number":625,"context_line":"            raise ValueError(\"Cannot have 0 len hostname\")"},{"line_number":626,"context_line":"        if len(value) \u003e 255:"},{"line_number":627,"context_line":"            raise ValueError(\"%s hostname is greater than 255 chars\" % value)"},{"line_number":628,"context_line":"        if value[-1] \u003d\u003d \".\":"}],"source_content_type":"text/x-python","patch_set":6,"id":"dae33548_c6084630","line":625,"range":{"start_line":625,"start_character":44,"end_line":625,"end_character":47},"updated":"2016-02-16 19:45:28.000000000","message":"hum, i suggest: \"cannot have empty hostname\"","commit_id":"96ee8e268ce75a0a2118d0b9e44b1bb541b3dbd7"},{"author":{"_account_id":8119,"name":"Eric Brown","email":"eric_wade_brown@yahoo.com","username":"ericwb"},"change_message_id":"2b29e89cdce0a013d029326aa553de8d8b0a313a","unresolved":false,"context_lines":[{"line_number":622,"context_line":"        \"\"\""},{"line_number":623,"context_line":""},{"line_number":624,"context_line":"        if len(value) \u003d\u003d 0:"},{"line_number":625,"context_line":"            raise ValueError(\"Cannot have 0 len hostname\")"},{"line_number":626,"context_line":"        if len(value) \u003e 255:"},{"line_number":627,"context_line":"            raise ValueError(\"%s hostname is greater than 255 chars\" % value)"},{"line_number":628,"context_line":"        if value[-1] \u003d\u003d \".\":"}],"source_content_type":"text/x-python","patch_set":6,"id":"7a5de9d1_7695dc30","line":625,"range":{"start_line":625,"start_character":44,"end_line":625,"end_character":47},"updated":"2016-02-01 19:00:52.000000000","message":"length","commit_id":"96ee8e268ce75a0a2118d0b9e44b1bb541b3dbd7"},{"author":{"_account_id":9796,"name":"ChangBo Guo","email":"glongwave@gmail.com","username":"gcb"},"change_message_id":"7e662e28669f0883de8e35e93b490c7cead82185","unresolved":false,"context_lines":[{"line_number":622,"context_line":"        \"\"\""},{"line_number":623,"context_line":""},{"line_number":624,"context_line":"        if len(value) \u003d\u003d 0:"},{"line_number":625,"context_line":"            raise ValueError(\"Cannot have 0 len hostname\")"},{"line_number":626,"context_line":"        if len(value) \u003e 255:"},{"line_number":627,"context_line":"            raise ValueError(\"%s hostname is greater than 255 chars\" % value)"},{"line_number":628,"context_line":"        if value[-1] \u003d\u003d \".\":"}],"source_content_type":"text/x-python","patch_set":6,"id":"dae33548_ae97be38","line":625,"range":{"start_line":625,"start_character":44,"end_line":625,"end_character":47},"in_reply_to":"dae33548_c6084630","updated":"2016-02-17 10:46:48.000000000","message":"Done","commit_id":"96ee8e268ce75a0a2118d0b9e44b1bb541b3dbd7"},{"author":{"_account_id":9107,"name":"Victor Stinner","email":"vstinner@redhat.com","username":"haypo"},"change_message_id":"d8e45e2caaf84742c6dca0c82fe481504485c322","unresolved":false,"context_lines":[{"line_number":623,"context_line":""},{"line_number":624,"context_line":"        if len(value) \u003d\u003d 0:"},{"line_number":625,"context_line":"            raise ValueError(\"Cannot have 0 len hostname\")"},{"line_number":626,"context_line":"        if len(value) \u003e 255:"},{"line_number":627,"context_line":"            raise ValueError(\"%s hostname is greater than 255 chars\" % value)"},{"line_number":628,"context_line":"        if value[-1] \u003d\u003d \".\":"},{"line_number":629,"context_line":"            value \u003d value[:-1]"}],"source_content_type":"text/x-python","patch_set":6,"id":"dae33548_c93697e6","line":626,"range":{"start_line":626,"start_character":24,"end_line":626,"end_character":27},"updated":"2016-02-16 19:45:28.000000000","message":"where does 255 come from? In other sources, I found a maximum of 253 ASCII characters.","commit_id":"96ee8e268ce75a0a2118d0b9e44b1bb541b3dbd7"},{"author":{"_account_id":9796,"name":"ChangBo Guo","email":"glongwave@gmail.com","username":"gcb"},"change_message_id":"7e662e28669f0883de8e35e93b490c7cead82185","unresolved":false,"context_lines":[{"line_number":623,"context_line":""},{"line_number":624,"context_line":"        if len(value) \u003d\u003d 0:"},{"line_number":625,"context_line":"            raise ValueError(\"Cannot have 0 len hostname\")"},{"line_number":626,"context_line":"        if len(value) \u003e 255:"},{"line_number":627,"context_line":"            raise ValueError(\"%s hostname is greater than 255 chars\" % value)"},{"line_number":628,"context_line":"        if value[-1] \u003d\u003d \".\":"},{"line_number":629,"context_line":"            value \u003d value[:-1]"}],"source_content_type":"text/x-python","patch_set":6,"id":"dae33548_ce5de248","line":626,"range":{"start_line":626,"start_character":24,"end_line":626,"end_character":27},"in_reply_to":"dae33548_c93697e6","updated":"2016-02-17 10:46:48.000000000","message":"I guess from the stackoverflow link","commit_id":"96ee8e268ce75a0a2118d0b9e44b1bb541b3dbd7"},{"author":{"_account_id":8688,"name":"Alexis Lee","email":"openstack@lxsli.co.uk","username":"lxsli"},"change_message_id":"517e8d2f3a6cefc075b50f97c0dc99cf00f69065","unresolved":false,"context_lines":[{"line_number":624,"context_line":"        if len(value) \u003d\u003d 0:"},{"line_number":625,"context_line":"            raise ValueError(\"Cannot have 0 len hostname\")"},{"line_number":626,"context_line":"        if len(value) \u003e 255:"},{"line_number":627,"context_line":"            raise ValueError(\"%s hostname is greater than 255 chars\" % value)"},{"line_number":628,"context_line":"        if value[-1] \u003d\u003d \".\":"},{"line_number":629,"context_line":"            value \u003d value[:-1]"},{"line_number":630,"context_line":"        allowed \u003d re.compile(\"(?!-)[A-Z\\d-]{1,63}(?\u003c!-)$\", re.IGNORECASE)"}],"source_content_type":"text/x-python","patch_set":6,"id":"7a5de9d1_5fedec23","line":627,"updated":"2016-01-28 16:22:52.000000000","message":"nit: Generally when there\u0027s only one %s I like to put it at the end, after a colon. \"Hostname is greater than 255 chars: %s\"","commit_id":"96ee8e268ce75a0a2118d0b9e44b1bb541b3dbd7"},{"author":{"_account_id":9796,"name":"ChangBo Guo","email":"glongwave@gmail.com","username":"gcb"},"change_message_id":"7e662e28669f0883de8e35e93b490c7cead82185","unresolved":false,"context_lines":[{"line_number":624,"context_line":"        if len(value) \u003d\u003d 0:"},{"line_number":625,"context_line":"            raise ValueError(\"Cannot have 0 len hostname\")"},{"line_number":626,"context_line":"        if len(value) \u003e 255:"},{"line_number":627,"context_line":"            raise ValueError(\"%s hostname is greater than 255 chars\" % value)"},{"line_number":628,"context_line":"        if value[-1] \u003d\u003d \".\":"},{"line_number":629,"context_line":"            value \u003d value[:-1]"},{"line_number":630,"context_line":"        allowed \u003d re.compile(\"(?!-)[A-Z\\d-]{1,63}(?\u003c!-)$\", re.IGNORECASE)"}],"source_content_type":"text/x-python","patch_set":6,"id":"dae33548_aee69ead","line":627,"in_reply_to":"7a5de9d1_5fedec23","updated":"2016-02-17 10:46:48.000000000","message":"Done","commit_id":"96ee8e268ce75a0a2118d0b9e44b1bb541b3dbd7"},{"author":{"_account_id":9107,"name":"Victor Stinner","email":"vstinner@redhat.com","username":"haypo"},"change_message_id":"d8e45e2caaf84742c6dca0c82fe481504485c322","unresolved":false,"context_lines":[{"line_number":625,"context_line":"            raise ValueError(\"Cannot have 0 len hostname\")"},{"line_number":626,"context_line":"        if len(value) \u003e 255:"},{"line_number":627,"context_line":"            raise ValueError(\"%s hostname is greater than 255 chars\" % value)"},{"line_number":628,"context_line":"        if value[-1] \u003d\u003d \".\":"},{"line_number":629,"context_line":"            value \u003d value[:-1]"},{"line_number":630,"context_line":"        allowed \u003d re.compile(\"(?!-)[A-Z\\d-]{1,63}(?\u003c!-)$\", re.IGNORECASE)"},{"line_number":631,"context_line":"        if any((not allowed.match(x)) for x in value.split(\".\")):"}],"source_content_type":"text/x-python","patch_set":6,"id":"dae33548_098d1f7b","line":628,"range":{"start_line":628,"start_character":20,"end_line":628,"end_character":21},"updated":"2016-02-16 19:45:28.000000000","message":"use: if value.endswith(\".\"):","commit_id":"96ee8e268ce75a0a2118d0b9e44b1bb541b3dbd7"},{"author":{"_account_id":9796,"name":"ChangBo Guo","email":"glongwave@gmail.com","username":"gcb"},"change_message_id":"7e662e28669f0883de8e35e93b490c7cead82185","unresolved":false,"context_lines":[{"line_number":625,"context_line":"            raise ValueError(\"Cannot have 0 len hostname\")"},{"line_number":626,"context_line":"        if len(value) \u003e 255:"},{"line_number":627,"context_line":"            raise ValueError(\"%s hostname is greater than 255 chars\" % value)"},{"line_number":628,"context_line":"        if value[-1] \u003d\u003d \".\":"},{"line_number":629,"context_line":"            value \u003d value[:-1]"},{"line_number":630,"context_line":"        allowed \u003d re.compile(\"(?!-)[A-Z\\d-]{1,63}(?\u003c!-)$\", re.IGNORECASE)"},{"line_number":631,"context_line":"        if any((not allowed.match(x)) for x in value.split(\".\")):"}],"source_content_type":"text/x-python","patch_set":6,"id":"dae33548_a96b38f0","line":628,"range":{"start_line":628,"start_character":20,"end_line":628,"end_character":21},"in_reply_to":"dae33548_098d1f7b","updated":"2016-02-17 10:46:48.000000000","message":"Done","commit_id":"96ee8e268ce75a0a2118d0b9e44b1bb541b3dbd7"},{"author":{"_account_id":9107,"name":"Victor Stinner","email":"vstinner@redhat.com","username":"haypo"},"change_message_id":"d8e45e2caaf84742c6dca0c82fe481504485c322","unresolved":false,"context_lines":[{"line_number":627,"context_line":"            raise ValueError(\"%s hostname is greater than 255 chars\" % value)"},{"line_number":628,"context_line":"        if value[-1] \u003d\u003d \".\":"},{"line_number":629,"context_line":"            value \u003d value[:-1]"},{"line_number":630,"context_line":"        allowed \u003d re.compile(\"(?!-)[A-Z\\d-]{1,63}(?\u003c!-)$\", re.IGNORECASE)"},{"line_number":631,"context_line":"        if any((not allowed.match(x)) for x in value.split(\".\")):"},{"line_number":632,"context_line":"            raise ValueError(\"%s is an invalid hostname\" % value)"},{"line_number":633,"context_line":"        return value"}],"source_content_type":"text/x-python","patch_set":6,"id":"dae33548_29bbc328","line":630,"range":{"start_line":630,"start_character":28,"end_line":630,"end_character":36},"updated":"2016-02-16 19:45:28.000000000","message":"Please write 0-9 instead of \\d (or use re.ASCII flag), otherwise *all* Unicode digit characters are allowed.","commit_id":"96ee8e268ce75a0a2118d0b9e44b1bb541b3dbd7"},{"author":{"_account_id":8688,"name":"Alexis Lee","email":"openstack@lxsli.co.uk","username":"lxsli"},"change_message_id":"517e8d2f3a6cefc075b50f97c0dc99cf00f69065","unresolved":false,"context_lines":[{"line_number":627,"context_line":"            raise ValueError(\"%s hostname is greater than 255 chars\" % value)"},{"line_number":628,"context_line":"        if value[-1] \u003d\u003d \".\":"},{"line_number":629,"context_line":"            value \u003d value[:-1]"},{"line_number":630,"context_line":"        allowed \u003d re.compile(\"(?!-)[A-Z\\d-]{1,63}(?\u003c!-)$\", re.IGNORECASE)"},{"line_number":631,"context_line":"        if any((not allowed.match(x)) for x in value.split(\".\")):"},{"line_number":632,"context_line":"            raise ValueError(\"%s is an invalid hostname\" % value)"},{"line_number":633,"context_line":"        return value"}],"source_content_type":"text/x-python","patch_set":6,"id":"7a5de9d1_5fd40c46","line":630,"updated":"2016-01-28 16:22:52.000000000","message":"We could compile this as a class var","commit_id":"96ee8e268ce75a0a2118d0b9e44b1bb541b3dbd7"},{"author":{"_account_id":9796,"name":"ChangBo Guo","email":"glongwave@gmail.com","username":"gcb"},"change_message_id":"7e662e28669f0883de8e35e93b490c7cead82185","unresolved":false,"context_lines":[{"line_number":627,"context_line":"            raise ValueError(\"%s hostname is greater than 255 chars\" % value)"},{"line_number":628,"context_line":"        if value[-1] \u003d\u003d \".\":"},{"line_number":629,"context_line":"            value \u003d value[:-1]"},{"line_number":630,"context_line":"        allowed \u003d re.compile(\"(?!-)[A-Z\\d-]{1,63}(?\u003c!-)$\", re.IGNORECASE)"},{"line_number":631,"context_line":"        if any((not allowed.match(x)) for x in value.split(\".\")):"},{"line_number":632,"context_line":"            raise ValueError(\"%s is an invalid hostname\" % value)"},{"line_number":633,"context_line":"        return value"}],"source_content_type":"text/x-python","patch_set":6,"id":"dae33548_8970f4dd","line":630,"in_reply_to":"7a5de9d1_5fd40c46","updated":"2016-02-17 10:46:48.000000000","message":"Done","commit_id":"96ee8e268ce75a0a2118d0b9e44b1bb541b3dbd7"},{"author":{"_account_id":9796,"name":"ChangBo Guo","email":"glongwave@gmail.com","username":"gcb"},"change_message_id":"7e662e28669f0883de8e35e93b490c7cead82185","unresolved":false,"context_lines":[{"line_number":627,"context_line":"            raise ValueError(\"%s hostname is greater than 255 chars\" % value)"},{"line_number":628,"context_line":"        if value[-1] \u003d\u003d \".\":"},{"line_number":629,"context_line":"            value \u003d value[:-1]"},{"line_number":630,"context_line":"        allowed \u003d re.compile(\"(?!-)[A-Z\\d-]{1,63}(?\u003c!-)$\", re.IGNORECASE)"},{"line_number":631,"context_line":"        if any((not allowed.match(x)) for x in value.split(\".\")):"},{"line_number":632,"context_line":"            raise ValueError(\"%s is an invalid hostname\" % value)"},{"line_number":633,"context_line":"        return value"}],"source_content_type":"text/x-python","patch_set":6,"id":"dae33548_c9767cd6","line":630,"range":{"start_line":630,"start_character":28,"end_line":630,"end_character":36},"in_reply_to":"dae33548_29bbc328","updated":"2016-02-17 10:46:48.000000000","message":"Done","commit_id":"96ee8e268ce75a0a2118d0b9e44b1bb541b3dbd7"},{"author":{"_account_id":8119,"name":"Eric Brown","email":"eric_wade_brown@yahoo.com","username":"ericwb"},"change_message_id":"fd344891787f76a26c2dc0373db8704c561504a2","unresolved":false,"context_lines":[{"line_number":606,"context_line":""},{"line_number":607,"context_line":""},{"line_number":608,"context_line":"class Hostname(ConfigType):"},{"line_number":609,"context_line":""},{"line_number":610,"context_line":"    def __init__(self, type_name\u003d\u0027hostname value\u0027):"},{"line_number":611,"context_line":"        super(Hostname, self).__init__(type_name\u003dtype_name)"},{"line_number":612,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"dae33548_bba87d78","line":609,"updated":"2016-02-17 18:09:37.000000000","message":"Please add docstrings for this new type so it appears in the docs.","commit_id":"ae55fe15d124aa800cc60c80dc80ce297fa0c400"},{"author":{"_account_id":9796,"name":"ChangBo Guo","email":"glongwave@gmail.com","username":"gcb"},"change_message_id":"a8137d57bf3add64f40008500485a89afea4c218","unresolved":false,"context_lines":[{"line_number":606,"context_line":""},{"line_number":607,"context_line":""},{"line_number":608,"context_line":"class Hostname(ConfigType):"},{"line_number":609,"context_line":""},{"line_number":610,"context_line":"    def __init__(self, type_name\u003d\u0027hostname value\u0027):"},{"line_number":611,"context_line":"        super(Hostname, self).__init__(type_name\u003dtype_name)"},{"line_number":612,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"dae33548_039acab8","line":609,"in_reply_to":"dae33548_bba87d78","updated":"2016-02-18 04:54:14.000000000","message":"Done","commit_id":"ae55fe15d124aa800cc60c80dc80ce297fa0c400"},{"author":{"_account_id":8688,"name":"Alexis Lee","email":"openstack@lxsli.co.uk","username":"lxsli"},"change_message_id":"eabf04ce6e234bbc20349e430c174d099db90c53","unresolved":false,"context_lines":[{"line_number":620,"context_line":"        - Does not begin or end with a hyphen"},{"line_number":621,"context_line":"        - maximum total length 253 characters"},{"line_number":622,"context_line":""},{"line_number":623,"context_line":"         refer to https://en.wikipedia.org/wiki/Hostname"},{"line_number":624,"context_line":"        \"\"\""},{"line_number":625,"context_line":""},{"line_number":626,"context_line":"        if len(value) \u003d\u003d 0:"}],"source_content_type":"text/x-python","patch_set":7,"id":"dae33548_804707bb","line":623,"range":{"start_line":623,"start_character":18,"end_line":623,"end_character":56},"updated":"2016-02-17 17:42:05.000000000","message":"nit: Wikipedia isn\u0027t a good primary source. It references https://blogs.msdn.microsoft.com/oldnewthing/20120412-00/?p\u003d7873/ which explains the issue well.","commit_id":"ae55fe15d124aa800cc60c80dc80ce297fa0c400"},{"author":{"_account_id":9796,"name":"ChangBo Guo","email":"glongwave@gmail.com","username":"gcb"},"change_message_id":"a8137d57bf3add64f40008500485a89afea4c218","unresolved":false,"context_lines":[{"line_number":620,"context_line":"        - Does not begin or end with a hyphen"},{"line_number":621,"context_line":"        - maximum total length 253 characters"},{"line_number":622,"context_line":""},{"line_number":623,"context_line":"         refer to https://en.wikipedia.org/wiki/Hostname"},{"line_number":624,"context_line":"        \"\"\""},{"line_number":625,"context_line":""},{"line_number":626,"context_line":"        if len(value) \u003d\u003d 0:"}],"source_content_type":"text/x-python","patch_set":7,"id":"dae33548_e394068c","line":623,"range":{"start_line":623,"start_character":18,"end_line":623,"end_character":56},"in_reply_to":"dae33548_804707bb","updated":"2016-02-18 04:54:14.000000000","message":"Done","commit_id":"ae55fe15d124aa800cc60c80dc80ce297fa0c400"},{"author":{"_account_id":8119,"name":"Eric Brown","email":"eric_wade_brown@yahoo.com","username":"ericwb"},"change_message_id":"9ac12e77ff5a9c623ec1171b07aee44fcf9dca16","unresolved":false,"context_lines":[{"line_number":609,"context_line":"    \"\"\"Hostname type."},{"line_number":610,"context_line":""},{"line_number":611,"context_line":"    A hostname refers to a valid DNS or hostname. It must not be longer than"},{"line_number":612,"context_line":"    253 characters, have a segment greater than 63 characters and start or"},{"line_number":613,"context_line":"    end with a hyphen."},{"line_number":614,"context_line":""},{"line_number":615,"context_line":"    :param type_name: Type name to be used in the sample config file."}],"source_content_type":"text/x-python","patch_set":8,"id":"dae33548_3ee565a7","line":612,"range":{"start_line":612,"start_character":62,"end_line":612,"end_character":73},"updated":"2016-02-18 05:04:11.000000000","message":"Confusing, please rephrase. Sounds like it has to start and end with hypens.  Maybe as:\n\n63 characters, nor start or end...","commit_id":"eb4625e8cd0684d4b9b5ae3633dd072d794d7c83"},{"author":{"_account_id":9796,"name":"ChangBo Guo","email":"glongwave@gmail.com","username":"gcb"},"change_message_id":"79eec9a89b114a69c0354e0f54c73c4b4806718c","unresolved":false,"context_lines":[{"line_number":609,"context_line":"    \"\"\"Hostname type."},{"line_number":610,"context_line":""},{"line_number":611,"context_line":"    A hostname refers to a valid DNS or hostname. It must not be longer than"},{"line_number":612,"context_line":"    253 characters, have a segment greater than 63 characters and start or"},{"line_number":613,"context_line":"    end with a hyphen."},{"line_number":614,"context_line":""},{"line_number":615,"context_line":"    :param type_name: Type name to be used in the sample config file."}],"source_content_type":"text/x-python","patch_set":8,"id":"dae33548_726441b8","line":612,"range":{"start_line":612,"start_character":62,"end_line":612,"end_character":73},"in_reply_to":"dae33548_3ee565a7","updated":"2016-02-18 06:23:36.000000000","message":"Done","commit_id":"eb4625e8cd0684d4b9b5ae3633dd072d794d7c83"},{"author":{"_account_id":8119,"name":"Eric Brown","email":"eric_wade_brown@yahoo.com","username":"ericwb"},"change_message_id":"9ac12e77ff5a9c623ec1171b07aee44fcf9dca16","unresolved":false,"context_lines":[{"line_number":624,"context_line":""},{"line_number":625,"context_line":"        Ensures that each segment"},{"line_number":626,"context_line":"        - Contains at least one character and a maximum of 63 characters"},{"line_number":627,"context_line":"        - Consists only of allowed characters: letters (A-Z), digits (0-9)"},{"line_number":628,"context_line":"          and hyphen (-)"},{"line_number":629,"context_line":"        - Does not begin or end with a hyphen"},{"line_number":630,"context_line":"        - maximum total length 253 characters"}],"source_content_type":"text/x-python","patch_set":8,"id":"dae33548_fe8c9ddb","line":627,"range":{"start_line":627,"start_character":73,"end_line":627,"end_character":74},"updated":"2016-02-18 05:04:11.000000000","message":"),","commit_id":"eb4625e8cd0684d4b9b5ae3633dd072d794d7c83"},{"author":{"_account_id":8119,"name":"Eric Brown","email":"eric_wade_brown@yahoo.com","username":"ericwb"},"change_message_id":"9ac12e77ff5a9c623ec1171b07aee44fcf9dca16","unresolved":false,"context_lines":[{"line_number":624,"context_line":""},{"line_number":625,"context_line":"        Ensures that each segment"},{"line_number":626,"context_line":"        - Contains at least one character and a maximum of 63 characters"},{"line_number":627,"context_line":"        - Consists only of allowed characters: letters (A-Z), digits (0-9)"},{"line_number":628,"context_line":"          and hyphen (-)"},{"line_number":629,"context_line":"        - Does not begin or end with a hyphen"},{"line_number":630,"context_line":"        - maximum total length 253 characters"}],"source_content_type":"text/x-python","patch_set":8,"id":"dae33548_1ef7c159","line":627,"range":{"start_line":627,"start_character":56,"end_line":627,"end_character":59},"updated":"2016-02-18 05:04:11.000000000","message":"Not just capitals.  A-Z and a-z","commit_id":"eb4625e8cd0684d4b9b5ae3633dd072d794d7c83"},{"author":{"_account_id":8119,"name":"Eric Brown","email":"eric_wade_brown@yahoo.com","username":"ericwb"},"change_message_id":"9ac12e77ff5a9c623ec1171b07aee44fcf9dca16","unresolved":false,"context_lines":[{"line_number":625,"context_line":"        Ensures that each segment"},{"line_number":626,"context_line":"        - Contains at least one character and a maximum of 63 characters"},{"line_number":627,"context_line":"        - Consists only of allowed characters: letters (A-Z), digits (0-9)"},{"line_number":628,"context_line":"          and hyphen (-)"},{"line_number":629,"context_line":"        - Does not begin or end with a hyphen"},{"line_number":630,"context_line":"        - maximum total length 253 characters"},{"line_number":631,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"dae33548_1e8ea1cf","line":628,"range":{"start_line":628,"start_character":14,"end_line":628,"end_character":20},"updated":"2016-02-18 05:04:11.000000000","message":"hyphens","commit_id":"eb4625e8cd0684d4b9b5ae3633dd072d794d7c83"},{"author":{"_account_id":9796,"name":"ChangBo Guo","email":"glongwave@gmail.com","username":"gcb"},"change_message_id":"79eec9a89b114a69c0354e0f54c73c4b4806718c","unresolved":false,"context_lines":[{"line_number":625,"context_line":"        Ensures that each segment"},{"line_number":626,"context_line":"        - Contains at least one character and a maximum of 63 characters"},{"line_number":627,"context_line":"        - Consists only of allowed characters: letters (A-Z), digits (0-9)"},{"line_number":628,"context_line":"          and hyphen (-)"},{"line_number":629,"context_line":"        - Does not begin or end with a hyphen"},{"line_number":630,"context_line":"        - maximum total length 253 characters"},{"line_number":631,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"dae33548_f2f7b1d0","line":628,"range":{"start_line":628,"start_character":14,"end_line":628,"end_character":20},"in_reply_to":"dae33548_1e8ea1cf","updated":"2016-02-18 06:23:36.000000000","message":"Done","commit_id":"eb4625e8cd0684d4b9b5ae3633dd072d794d7c83"},{"author":{"_account_id":8119,"name":"Eric Brown","email":"eric_wade_brown@yahoo.com","username":"ericwb"},"change_message_id":"9ac12e77ff5a9c623ec1171b07aee44fcf9dca16","unresolved":false,"context_lines":[{"line_number":627,"context_line":"        - Consists only of allowed characters: letters (A-Z), digits (0-9)"},{"line_number":628,"context_line":"          and hyphen (-)"},{"line_number":629,"context_line":"        - Does not begin or end with a hyphen"},{"line_number":630,"context_line":"        - maximum total length 253 characters"},{"line_number":631,"context_line":""},{"line_number":632,"context_line":"        Fore more details , please see:"},{"line_number":633,"context_line":"        https://blogs.msdn.microsoft.com/oldnewthing/20120412-00/?p\u003d7873/"}],"source_content_type":"text/x-python","patch_set":8,"id":"dae33548_9eb8f176","line":630,"range":{"start_line":630,"start_character":24,"end_line":630,"end_character":34},"updated":"2016-02-18 05:04:11.000000000","message":"length of 253","commit_id":"eb4625e8cd0684d4b9b5ae3633dd072d794d7c83"},{"author":{"_account_id":9796,"name":"ChangBo Guo","email":"glongwave@gmail.com","username":"gcb"},"change_message_id":"79eec9a89b114a69c0354e0f54c73c4b4806718c","unresolved":false,"context_lines":[{"line_number":627,"context_line":"        - Consists only of allowed characters: letters (A-Z), digits (0-9)"},{"line_number":628,"context_line":"          and hyphen (-)"},{"line_number":629,"context_line":"        - Does not begin or end with a hyphen"},{"line_number":630,"context_line":"        - maximum total length 253 characters"},{"line_number":631,"context_line":""},{"line_number":632,"context_line":"        Fore more details , please see:"},{"line_number":633,"context_line":"        https://blogs.msdn.microsoft.com/oldnewthing/20120412-00/?p\u003d7873/"}],"source_content_type":"text/x-python","patch_set":8,"id":"dae33548_12fdf5b3","line":630,"range":{"start_line":630,"start_character":24,"end_line":630,"end_character":34},"in_reply_to":"dae33548_9eb8f176","updated":"2016-02-18 06:23:36.000000000","message":"Done","commit_id":"eb4625e8cd0684d4b9b5ae3633dd072d794d7c83"},{"author":{"_account_id":8119,"name":"Eric Brown","email":"eric_wade_brown@yahoo.com","username":"ericwb"},"change_message_id":"9ac12e77ff5a9c623ec1171b07aee44fcf9dca16","unresolved":false,"context_lines":[{"line_number":630,"context_line":"        - maximum total length 253 characters"},{"line_number":631,"context_line":""},{"line_number":632,"context_line":"        Fore more details , please see:"},{"line_number":633,"context_line":"        https://blogs.msdn.microsoft.com/oldnewthing/20120412-00/?p\u003d7873/"},{"line_number":634,"context_line":"        \"\"\""},{"line_number":635,"context_line":""},{"line_number":636,"context_line":"        if len(value) \u003d\u003d 0:"}],"source_content_type":"text/x-python","patch_set":8,"id":"dae33548_1ea50146","line":633,"updated":"2016-02-18 05:04:11.000000000","message":"Rather not reference microsoft website. Should reference an RFC.","commit_id":"eb4625e8cd0684d4b9b5ae3633dd072d794d7c83"},{"author":{"_account_id":9796,"name":"ChangBo Guo","email":"glongwave@gmail.com","username":"gcb"},"change_message_id":"79eec9a89b114a69c0354e0f54c73c4b4806718c","unresolved":false,"context_lines":[{"line_number":630,"context_line":"        - maximum total length 253 characters"},{"line_number":631,"context_line":""},{"line_number":632,"context_line":"        Fore more details , please see:"},{"line_number":633,"context_line":"        https://blogs.msdn.microsoft.com/oldnewthing/20120412-00/?p\u003d7873/"},{"line_number":634,"context_line":"        \"\"\""},{"line_number":635,"context_line":""},{"line_number":636,"context_line":"        if len(value) \u003d\u003d 0:"}],"source_content_type":"text/x-python","patch_set":8,"id":"dae33548_d2254d5c","line":633,"in_reply_to":"dae33548_1ea50146","updated":"2016-02-18 06:23:36.000000000","message":"ok, RFC :-)","commit_id":"eb4625e8cd0684d4b9b5ae3633dd072d794d7c83"},{"author":{"_account_id":8119,"name":"Eric Brown","email":"eric_wade_brown@yahoo.com","username":"ericwb"},"change_message_id":"9ac12e77ff5a9c623ec1171b07aee44fcf9dca16","unresolved":false,"context_lines":[{"line_number":634,"context_line":"        \"\"\""},{"line_number":635,"context_line":""},{"line_number":636,"context_line":"        if len(value) \u003d\u003d 0:"},{"line_number":637,"context_line":"            raise ValueError(\"Cannot have empty hostname\")"},{"line_number":638,"context_line":"        if len(value) \u003e 253:"},{"line_number":639,"context_line":"            raise ValueError(\"hostname is greater than 253 chars: %s\" % value)"},{"line_number":640,"context_line":"        if value.endswith(\".\"):"}],"source_content_type":"text/x-python","patch_set":8,"id":"dae33548_9e6f51fb","line":637,"range":{"start_line":637,"start_character":42,"end_line":637,"end_character":47},"updated":"2016-02-18 05:04:11.000000000","message":"an empty","commit_id":"eb4625e8cd0684d4b9b5ae3633dd072d794d7c83"},{"author":{"_account_id":8119,"name":"Eric Brown","email":"eric_wade_brown@yahoo.com","username":"ericwb"},"change_message_id":"9ac12e77ff5a9c623ec1171b07aee44fcf9dca16","unresolved":false,"context_lines":[{"line_number":636,"context_line":"        if len(value) \u003d\u003d 0:"},{"line_number":637,"context_line":"            raise ValueError(\"Cannot have empty hostname\")"},{"line_number":638,"context_line":"        if len(value) \u003e 253:"},{"line_number":639,"context_line":"            raise ValueError(\"hostname is greater than 253 chars: %s\" % value)"},{"line_number":640,"context_line":"        if value.endswith(\".\"):"},{"line_number":641,"context_line":"            value \u003d value[:-1]"},{"line_number":642,"context_line":"        allowed \u003d re.compile(\"(?!-)[A-Z0-9-]{1,63}(?\u003c!-)$\", re.IGNORECASE)"}],"source_content_type":"text/x-python","patch_set":8,"id":"dae33548_3e81e58f","line":639,"range":{"start_line":639,"start_character":59,"end_line":639,"end_character":64},"updated":"2016-02-18 05:04:11.000000000","message":"characters","commit_id":"eb4625e8cd0684d4b9b5ae3633dd072d794d7c83"},{"author":{"_account_id":9796,"name":"ChangBo Guo","email":"glongwave@gmail.com","username":"gcb"},"change_message_id":"79eec9a89b114a69c0354e0f54c73c4b4806718c","unresolved":false,"context_lines":[{"line_number":636,"context_line":"        if len(value) \u003d\u003d 0:"},{"line_number":637,"context_line":"            raise ValueError(\"Cannot have empty hostname\")"},{"line_number":638,"context_line":"        if len(value) \u003e 253:"},{"line_number":639,"context_line":"            raise ValueError(\"hostname is greater than 253 chars: %s\" % value)"},{"line_number":640,"context_line":"        if value.endswith(\".\"):"},{"line_number":641,"context_line":"            value \u003d value[:-1]"},{"line_number":642,"context_line":"        allowed \u003d re.compile(\"(?!-)[A-Z0-9-]{1,63}(?\u003c!-)$\", re.IGNORECASE)"}],"source_content_type":"text/x-python","patch_set":8,"id":"dae33548_32ec79f2","line":639,"range":{"start_line":639,"start_character":59,"end_line":639,"end_character":64},"in_reply_to":"dae33548_3e81e58f","updated":"2016-02-18 06:23:36.000000000","message":"Done","commit_id":"eb4625e8cd0684d4b9b5ae3633dd072d794d7c83"}]}
