)]}'
{"doc/source/conventions.rst":[{"author":{"_account_id":6524,"name":"Henry Gessau","email":"HenryG@gessau.net","username":"gessau"},"change_message_id":"84dec5d52dda51f8d462adc71fb034a4d061035b","unresolved":false,"context_lines":[{"line_number":76,"context_line":"to be favorably reviewed. Good candidates for this area are things that"},{"line_number":77,"context_line":"we want to refactor, but are lower priority, AND they have been around for"},{"line_number":78,"context_line":"a long time with no changes (i.e. an existing history of stability)."},{"line_number":79,"context_line":""},{"line_number":80,"context_line":""},{"line_number":81,"context_line":""},{"line_number":82,"context_line":""},{"line_number":83,"context_line":""},{"line_number":84,"context_line":""},{"line_number":85,"context_line":""}],"source_content_type":"text/x-rst","patch_set":14,"id":"9a68dd71_960abf24","line":85,"range":{"start_line":79,"start_character":0,"end_line":85,"end_character":0},"updated":"2016-01-26 02:44:23.000000000","message":"So many blank lines.","commit_id":"99e8f27b3b4d0ba24d01c472733628c0c1edf0ae"},{"author":{"_account_id":10980,"name":"Doug Wiegley","email":"dougwig@parkside.io","username":"dougw"},"change_message_id":"266e9f1c46d59eeaaad26abdfd3bb6bf416061ec","unresolved":false,"context_lines":[{"line_number":76,"context_line":"to be favorably reviewed. Good candidates for this area are things that"},{"line_number":77,"context_line":"we want to refactor, but are lower priority, AND they have been around for"},{"line_number":78,"context_line":"a long time with no changes (i.e. an existing history of stability)."},{"line_number":79,"context_line":""},{"line_number":80,"context_line":""},{"line_number":81,"context_line":""},{"line_number":82,"context_line":""},{"line_number":83,"context_line":""},{"line_number":84,"context_line":""},{"line_number":85,"context_line":""}],"source_content_type":"text/x-rst","patch_set":14,"id":"7a5de9d1_54d5aab6","line":85,"range":{"start_line":79,"start_character":0,"end_line":85,"end_character":0},"in_reply_to":"9a68dd71_960abf24","updated":"2016-01-29 06:47:00.000000000","message":"Done","commit_id":"99e8f27b3b4d0ba24d01c472733628c0c1edf0ae"}],"neutron_lib/config.py":[{"author":{"_account_id":10980,"name":"Doug Wiegley","email":"dougwig@parkside.io","username":"dougw"},"change_message_id":"fcea04c0de234f0be7961db36ed9c6d8928df2b6","unresolved":false,"context_lines":[{"line_number":58,"context_line":""},{"line_number":59,"context_line":"def setup_logging():"},{"line_number":60,"context_line":"    \"\"\"Sets up the logging options for a log with supplied name.\"\"\""},{"line_number":61,"context_line":"    product_name \u003d \"neutron\""},{"line_number":62,"context_line":"    logging.setup(cfg.CONF, product_name)"},{"line_number":63,"context_line":"    LOG.info(_LI(\"Logging enabled!\"))"},{"line_number":64,"context_line":"    LOG.info(_LI(\"%(prog)s version %(version)s\"),"}],"source_content_type":"text/x-python","patch_set":13,"id":"9a68dd71_f8908f97","line":61,"range":{"start_line":61,"start_character":20,"end_line":61,"end_character":27},"updated":"2016-01-21 04:38:37.000000000","message":"I think that since that token will end up in admin logs, neutron is more appropriate.  Else everyone\u0027s logs will be \"neutron-lib\". We could require separate names as a function param, but then every plugin will have its own log names.","commit_id":"61c2c742b003f49991ac2b89cc1c48c03d661ea2"},{"author":{"_account_id":6524,"name":"Henry Gessau","email":"HenryG@gessau.net","username":"gessau"},"change_message_id":"87284533f43945a0223d7384bb9b95514297e074","unresolved":false,"context_lines":[{"line_number":58,"context_line":""},{"line_number":59,"context_line":"def setup_logging():"},{"line_number":60,"context_line":"    \"\"\"Sets up the logging options for a log with supplied name.\"\"\""},{"line_number":61,"context_line":"    product_name \u003d \"neutron\""},{"line_number":62,"context_line":"    logging.setup(cfg.CONF, product_name)"},{"line_number":63,"context_line":"    LOG.info(_LI(\"Logging enabled!\"))"},{"line_number":64,"context_line":"    LOG.info(_LI(\"%(prog)s version %(version)s\"),"}],"source_content_type":"text/x-python","patch_set":13,"id":"9a68dd71_f1f50f83","line":61,"updated":"2016-01-21 04:02:30.000000000","message":"neutron or neutron_lib or neutron-lib ?","commit_id":"61c2c742b003f49991ac2b89cc1c48c03d661ea2"}],"neutron_lib/legacy/README.rst":[{"author":{"_account_id":6524,"name":"Henry Gessau","email":"HenryG@gessau.net","username":"gessau"},"change_message_id":"9446a71cb5f59a7a55d91e8f23a9fd78654df826","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":5,"id":"da6ed579_a9ae7d96","line":17,"updated":"2016-01-15 19:48:20.000000000","message":"I think this is a reasonable approach.","commit_id":"23712c6e9afd57c065463d4b3812d8b02820bb9e"},{"author":{"_account_id":748,"name":"Armando Migliaccio","email":"armamig@gmail.com","username":"armando-migliaccio"},"change_message_id":"f7859f4d075c21e7a1e63ee10c8ae18888b8ccf4","unresolved":false,"context_lines":[{"line_number":4,"context_line":""},{"line_number":5,"context_line":"This submodule is for routines that will be maintained with a long-term"},{"line_number":6,"context_line":"backwards compatibility interface contract, but which are not considered"},{"line_number":7,"context_line":"\"library worthy\" by the neutron core team."},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"The legacy module is for those existing modules that are in wide use,"},{"line_number":10,"context_line":"so we can get them into a versioned location and out of neutron, but which"}],"source_content_type":"text/x-rst","patch_set":9,"id":"da6ed579_e144811c","line":7,"updated":"2016-01-16 02:50:34.000000000","message":"not considered library worthy may be interpreted that they are not supposed to be in the library in the first place, no?","commit_id":"9ced307fe2e0e4f7fe63d7e83fc7927c61902063"},{"author":{"_account_id":748,"name":"Armando Migliaccio","email":"armamig@gmail.com","username":"armando-migliaccio"},"change_message_id":"f7859f4d075c21e7a1e63ee10c8ae18888b8ccf4","unresolved":false,"context_lines":[{"line_number":8,"context_line":""},{"line_number":9,"context_line":"The legacy module is for those existing modules that are in wide use,"},{"line_number":10,"context_line":"so we can get them into a versioned location and out of neutron, but which"},{"line_number":11,"context_line":"we know need to be rewritten/refactored."},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"Anything in this directory will likely get a new interface in the top-level"},{"line_number":14,"context_line":"library sometime in the near future, and then a debtcollector deprecation"}],"source_content_type":"text/x-rst","patch_set":9,"id":"da6ed579_61c4115f","line":11,"updated":"2016-01-16 02:50:34.000000000","message":"this feels like everything that should go in lib. Can you elaborate a bit further?","commit_id":"9ced307fe2e0e4f7fe63d7e83fc7927c61902063"},{"author":{"_account_id":748,"name":"Armando Migliaccio","email":"armamig@gmail.com","username":"armando-migliaccio"},"change_message_id":"f7859f4d075c21e7a1e63ee10c8ae18888b8ccf4","unresolved":false,"context_lines":[{"line_number":13,"context_line":"Anything in this directory will likely get a new interface in the top-level"},{"line_number":14,"context_line":"library sometime in the near future, and then a debtcollector deprecation"},{"line_number":15,"context_line":"notice. Expect to get current cycle plus one release of maintenance at that"},{"line_number":16,"context_line":"point, and then they will be removed."}],"source_content_type":"text/x-rst","patch_set":9,"id":"da6ed579_e1f6c1f8","line":16,"range":{"start_line":16,"start_character":29,"end_line":16,"end_character":36},"updated":"2016-01-16 02:50:34.000000000","message":"I understand now what you mean. I am not sure I\u0027d agree to add rpc to legacy, but that said, wasn\u0027t the _ accomplishing the same objective? I thought that was the reason why callbacks is _callbacks?\n\nI\u0027d elaborate a bit more about this to give better defined criteria as to what should go in here.","commit_id":"9ced307fe2e0e4f7fe63d7e83fc7927c61902063"}],"neutron_lib/legacy/rpc.py":[{"author":{"_account_id":6524,"name":"Henry Gessau","email":"HenryG@gessau.net","username":"gessau"},"change_message_id":"9446a71cb5f59a7a55d91e8f23a9fd78654df826","unresolved":false,"context_lines":[{"line_number":220,"context_line":""},{"line_number":221,"context_line":""},{"line_number":222,"context_line":"# functions"},{"line_number":223,"context_line":"@removals.removed_kwarg(\u0027new\u0027)"},{"line_number":224,"context_line":"def create_connection(new\u003dTrue):"},{"line_number":225,"context_line":"    # NOTE(salv-orlando): This is a clever interpretation of the factory design"},{"line_number":226,"context_line":"    # pattern aimed at preventing plugins from initializing RPC servers upon"}],"source_content_type":"text/x-python","patch_set":5,"id":"da6ed579_69c6454b","line":223,"updated":"2016-01-15 19:48:20.000000000","message":"Do not carry over to lib.","commit_id":"23712c6e9afd57c065463d4b3812d8b02820bb9e"},{"author":{"_account_id":6524,"name":"Henry Gessau","email":"HenryG@gessau.net","username":"gessau"},"change_message_id":"84dec5d52dda51f8d462adc71fb034a4d061035b","unresolved":false,"context_lines":[{"line_number":24,"context_line":""},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"# Ensure that the control exchange is set correctly"},{"line_number":27,"context_line":"oslo_messaging.set_transport_defaults(control_exchange\u003d\u0027neutron\u0027)"},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":30,"context_line":""}],"source_content_type":"text/x-python","patch_set":14,"id":"9a68dd71_39dae417","line":27,"range":{"start_line":27,"start_character":56,"end_line":27,"end_character":63},"updated":"2016-01-26 02:44:23.000000000","message":"This makes it hard for code that is not part of neutron to use. We could leave it up to the user to invoke or make it config driven, etc.","commit_id":"99e8f27b3b4d0ba24d01c472733628c0c1edf0ae"},{"author":{"_account_id":6524,"name":"Henry Gessau","email":"HenryG@gessau.net","username":"gessau"},"change_message_id":"84dec5d52dda51f8d462adc71fb034a4d061035b","unresolved":false,"context_lines":[{"line_number":37,"context_line":"EXTRA_EXMODS \u003d []"},{"line_number":38,"context_line":""},{"line_number":39,"context_line":""},{"line_number":40,"context_line":"TRANSPORT_ALIASES \u003d {"},{"line_number":41,"context_line":"    \u0027neutron.openstack.common.rpc.impl_fake\u0027: \u0027fake\u0027,"},{"line_number":42,"context_line":"    \u0027neutron.openstack.common.rpc.impl_qpid\u0027: \u0027qpid\u0027,"},{"line_number":43,"context_line":"    \u0027neutron.openstack.common.rpc.impl_kombu\u0027: \u0027rabbit\u0027,"},{"line_number":44,"context_line":"    \u0027neutron.openstack.common.rpc.impl_zmq\u0027: \u0027zmq\u0027,"},{"line_number":45,"context_line":"    \u0027neutron.rpc.impl_fake\u0027: \u0027fake\u0027,"},{"line_number":46,"context_line":"    \u0027neutron.rpc.impl_qpid\u0027: \u0027qpid\u0027,"},{"line_number":47,"context_line":"    \u0027neutron.rpc.impl_kombu\u0027: \u0027rabbit\u0027,"},{"line_number":48,"context_line":"    \u0027neutron.rpc.impl_zmq\u0027: \u0027zmq\u0027,"},{"line_number":49,"context_line":"}"},{"line_number":50,"context_line":""},{"line_number":51,"context_line":"# If you want to disable RPC traffic, and you used to use this global,"},{"line_number":52,"context_line":"# then start calling disable_actual_rpc() instead."}],"source_content_type":"text/x-python","patch_set":14,"id":"9a68dd71_995c304c","line":49,"range":{"start_line":40,"start_character":1,"end_line":49,"end_character":1},"updated":"2016-01-26 02:44:23.000000000","message":"I am not sure what these are, but they look like neutron entrypoints. Perhaps users of neutron-lib can pass this in as a parameter to init()?","commit_id":"99e8f27b3b4d0ba24d01c472733628c0c1edf0ae"},{"author":{"_account_id":6524,"name":"Henry Gessau","email":"HenryG@gessau.net","username":"gessau"},"change_message_id":"84dec5d52dda51f8d462adc71fb034a4d061035b","unresolved":false,"context_lines":[{"line_number":104,"context_line":"                                         \u0027eventlet\u0027, serializer)"},{"line_number":105,"context_line":""},{"line_number":106,"context_line":""},{"line_number":107,"context_line":"def get_notifier(service\u003dNone, host\u003dNone, publisher_id\u003dNone):"},{"line_number":108,"context_line":"    assert NOTIFIER is not None"},{"line_number":109,"context_line":"    if not publisher_id:"},{"line_number":110,"context_line":"        publisher_id \u003d \"%s.%s\" % (service, host or cfg.CONF.host)"}],"source_content_type":"text/x-python","patch_set":14,"id":"9a68dd71_acdbf44d","line":107,"range":{"start_line":107,"start_character":17,"end_line":107,"end_character":24},"updated":"2016-01-26 02:44:23.000000000","message":"This argument shadows the import from line 21. It is not a problem now since the \u0027service\u0027 import is not used in this method. But neutron-lib is a lib and we should be careful about these things.\n\nSince we do not want to change the signature of this method, you will need to change the name of the import on line 21, to something like\n\n from oslo_service import service as os_service","commit_id":"99e8f27b3b4d0ba24d01c472733628c0c1edf0ae"},{"author":{"_account_id":6524,"name":"Henry Gessau","email":"HenryG@gessau.net","username":"gessau"},"change_message_id":"84dec5d52dda51f8d462adc71fb034a4d061035b","unresolved":false,"context_lines":[{"line_number":112,"context_line":""},{"line_number":113,"context_line":""},{"line_number":114,"context_line":"class RequestContextSerializer(om_serializer.Serializer):"},{"line_number":115,"context_line":"    \"\"\"Used to convert RPC common context into Neutron Context.\"\"\""},{"line_number":116,"context_line":""},{"line_number":117,"context_line":"    def __init__(self, base\u003dNone):"},{"line_number":118,"context_line":"        super(RequestContextSerializer, self).__init__()"}],"source_content_type":"text/x-python","patch_set":14,"id":"9a68dd71_ef60fea6","line":115,"range":{"start_line":115,"start_character":47,"end_line":115,"end_character":54},"updated":"2016-01-26 02:44:23.000000000","message":"What makes this a \u0027Neutron\u0027 Context?","commit_id":"99e8f27b3b4d0ba24d01c472733628c0c1edf0ae"},{"author":{"_account_id":6524,"name":"Henry Gessau","email":"HenryG@gessau.net","username":"gessau"},"change_message_id":"84dec5d52dda51f8d462adc71fb034a4d061035b","unresolved":false,"context_lines":[{"line_number":134,"context_line":"    # The following is not used anywhere and pulls in some yucky deps"},{"line_number":135,"context_line":"    # oslo_messaging requires the entry point, so put in a dummy"},{"line_number":136,"context_line":"    def deserialize_context(self, ctxt):"},{"line_number":137,"context_line":"        raise exceptions.NotSupported()"},{"line_number":138,"context_line":""},{"line_number":139,"context_line":""},{"line_number":140,"context_line":"class Service(service.Service):"}],"source_content_type":"text/x-python","patch_set":14,"id":"9a68dd71_8cadd0ea","line":137,"range":{"start_line":137,"start_character":25,"end_line":137,"end_character":37},"updated":"2016-01-26 02:44:23.000000000","message":"That exception does not exist. Maybe use base Python NotImplementedError instead?","commit_id":"99e8f27b3b4d0ba24d01c472733628c0c1edf0ae"},{"author":{"_account_id":6659,"name":"Paul Michali","email":"pc@michali.net","username":"pcm"},"change_message_id":"83f0cda3ecb65a83644e2dd13851458f02d18a4f","unresolved":false,"context_lines":[{"line_number":218,"context_line":""},{"line_number":219,"context_line":""},{"line_number":220,"context_line":"def create_connection():"},{"line_number":221,"context_line":"    # NOTE(salv-orlando): This is a clever interpretation of the factory design"},{"line_number":222,"context_line":"    # pattern aimed at preventing plugins from initializing RPC servers upon"},{"line_number":223,"context_line":"    # initialization when they are running in the REST over HTTP API server."},{"line_number":224,"context_line":"    # The educated reader will perfectly be able to see that this a fairly"}],"source_content_type":"text/x-python","patch_set":14,"id":"9a68dd71_e2d763bd","line":221,"updated":"2016-01-21 15:29:57.000000000","message":"Comments from PS4","commit_id":"99e8f27b3b4d0ba24d01c472733628c0c1edf0ae"}],"neutron_lib/rpc.py":[{"author":{"_account_id":6524,"name":"Henry Gessau","email":"HenryG@gessau.net","username":"gessau"},"change_message_id":"6b9401fe2fbdef1fcb755717c466b558a6e04690","unresolved":false,"context_lines":[{"line_number":51,"context_line":"# they\u0027re however widely used throughout the code base. It should be set to"},{"line_number":52,"context_line":"# true if the RPC server is not running in the current process space. This"},{"line_number":53,"context_line":"# will prevent get_connection from creating connections to the AMQP server"},{"line_number":54,"context_line":"RPC_DISABLED \u003d False"},{"line_number":55,"context_line":""},{"line_number":56,"context_line":""},{"line_number":57,"context_line":"def init(conf):"}],"source_content_type":"text/x-python","patch_set":3,"id":"da6ed579_b61b7680","line":54,"updated":"2016-01-14 22:31:35.000000000","message":"This is a terrible design for a lib. Can we do it a better way?","commit_id":"6e99275203a6f7082501df4fec83a2b882c7de61"},{"author":{"_account_id":6524,"name":"Henry Gessau","email":"HenryG@gessau.net","username":"gessau"},"change_message_id":"6b9401fe2fbdef1fcb755717c466b558a6e04690","unresolved":false,"context_lines":[{"line_number":209,"context_line":"        pass"},{"line_number":210,"context_line":""},{"line_number":211,"context_line":""},{"line_number":212,"context_line":"# functions"},{"line_number":213,"context_line":"@removals.removed_kwarg(\u0027new\u0027)"},{"line_number":214,"context_line":"def create_connection(new\u003dTrue):"},{"line_number":215,"context_line":"    # NOTE(salv-orlando): This is a clever interpretation of the factory design"}],"source_content_type":"text/x-python","patch_set":3,"id":"da6ed579_565d5a45","line":212,"updated":"2016-01-14 22:31:35.000000000","message":"Useless comment?","commit_id":"6e99275203a6f7082501df4fec83a2b882c7de61"},{"author":{"_account_id":6524,"name":"Henry Gessau","email":"HenryG@gessau.net","username":"gessau"},"change_message_id":"6b9401fe2fbdef1fcb755717c466b558a6e04690","unresolved":false,"context_lines":[{"line_number":210,"context_line":""},{"line_number":211,"context_line":""},{"line_number":212,"context_line":"# functions"},{"line_number":213,"context_line":"@removals.removed_kwarg(\u0027new\u0027)"},{"line_number":214,"context_line":"def create_connection(new\u003dTrue):"},{"line_number":215,"context_line":"    # NOTE(salv-orlando): This is a clever interpretation of the factory design"},{"line_number":216,"context_line":"    # patter aimed at preventing plugins from initializing RPC servers upon"}],"source_content_type":"text/x-python","patch_set":3,"id":"da6ed579_167cc2b3","line":213,"updated":"2016-01-14 22:31:35.000000000","message":"Can we leave removed args in neutron and not bring them into neutron-lib?","commit_id":"6e99275203a6f7082501df4fec83a2b882c7de61"},{"author":{"_account_id":6659,"name":"Paul Michali","email":"pc@michali.net","username":"pcm"},"change_message_id":"12d6ed75cc42cf2dd57094be9cb1b362137a1fe8","unresolved":false,"context_lines":[{"line_number":128,"context_line":"    def serialize_context(self, ctxt):"},{"line_number":129,"context_line":"        return ctxt.to_dict()"},{"line_number":130,"context_line":""},{"line_number":131,"context_line":"    # The following is not used anywhere and pulls in some yucky deps"},{"line_number":132,"context_line":"    def deserialize_context(self, ctxt):"},{"line_number":133,"context_line":"        raise exceptions.NotSupported()"},{"line_number":134,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"da6ed579_c8cbb0a2","line":131,"updated":"2016-01-15 18:21:25.000000000","message":"Is there a reason to leave this in here?","commit_id":"02b874d245d9bcaf1dc862ebf1ec680485488322"},{"author":{"_account_id":6659,"name":"Paul Michali","email":"pc@michali.net","username":"pcm"},"change_message_id":"12d6ed75cc42cf2dd57094be9cb1b362137a1fe8","unresolved":false,"context_lines":[{"line_number":217,"context_line":"@removals.removed_kwarg(\u0027new\u0027)"},{"line_number":218,"context_line":"def create_connection(new\u003dTrue):"},{"line_number":219,"context_line":"    # NOTE(salv-orlando): This is a clever interpretation of the factory design"},{"line_number":220,"context_line":"    # patter aimed at preventing plugins from initializing RPC servers upon"},{"line_number":221,"context_line":"    # initialization when they are running in the REST over HTTP API server."},{"line_number":222,"context_line":"    # The educated reader will perfectly be able that this a fairly dirty hack"},{"line_number":223,"context_line":"    # to avoid having to change the initialization process of every plugin."}],"source_content_type":"text/x-python","patch_set":4,"id":"da6ed579_c883b001","line":220,"range":{"start_line":220,"start_character":6,"end_line":220,"end_character":12},"updated":"2016-01-15 18:21:25.000000000","message":"patter -\u003e pattern","commit_id":"02b874d245d9bcaf1dc862ebf1ec680485488322"},{"author":{"_account_id":6659,"name":"Paul Michali","email":"pc@michali.net","username":"pcm"},"change_message_id":"12d6ed75cc42cf2dd57094be9cb1b362137a1fe8","unresolved":false,"context_lines":[{"line_number":219,"context_line":"    # NOTE(salv-orlando): This is a clever interpretation of the factory design"},{"line_number":220,"context_line":"    # patter aimed at preventing plugins from initializing RPC servers upon"},{"line_number":221,"context_line":"    # initialization when they are running in the REST over HTTP API server."},{"line_number":222,"context_line":"    # The educated reader will perfectly be able that this a fairly dirty hack"},{"line_number":223,"context_line":"    # to avoid having to change the initialization process of every plugin."},{"line_number":224,"context_line":"    if RPC_DISABLED:"},{"line_number":225,"context_line":"        return VoidConnection()"}],"source_content_type":"text/x-python","patch_set":4,"id":"da6ed579_c89ad061","line":222,"range":{"start_line":222,"start_character":44,"end_line":222,"end_character":48},"updated":"2016-01-15 18:21:25.000000000","message":"able -\u003e able to see","commit_id":"02b874d245d9bcaf1dc862ebf1ec680485488322"},{"author":{"_account_id":6659,"name":"Paul Michali","email":"pc@michali.net","username":"pcm"},"change_message_id":"12d6ed75cc42cf2dd57094be9cb1b362137a1fe8","unresolved":false,"context_lines":[{"line_number":220,"context_line":"    # patter aimed at preventing plugins from initializing RPC servers upon"},{"line_number":221,"context_line":"    # initialization when they are running in the REST over HTTP API server."},{"line_number":222,"context_line":"    # The educated reader will perfectly be able that this a fairly dirty hack"},{"line_number":223,"context_line":"    # to avoid having to change the initialization process of every plugin."},{"line_number":224,"context_line":"    if RPC_DISABLED:"},{"line_number":225,"context_line":"        return VoidConnection()"},{"line_number":226,"context_line":"    return Connection()"}],"source_content_type":"text/x-python","patch_set":4,"id":"da6ed579_a8ae7c7e","line":223,"updated":"2016-01-15 18:21:25.000000000","message":"Would this be the time to change the way plugins use RPC, rather than continuing the hack?","commit_id":"02b874d245d9bcaf1dc862ebf1ec680485488322"},{"author":{"_account_id":10980,"name":"Doug Wiegley","email":"dougwig@parkside.io","username":"dougw"},"change_message_id":"18acfc28cabad3e8278bbe96576353c1aad9c7a6","unresolved":false,"context_lines":[{"line_number":220,"context_line":"    # patter aimed at preventing plugins from initializing RPC servers upon"},{"line_number":221,"context_line":"    # initialization when they are running in the REST over HTTP API server."},{"line_number":222,"context_line":"    # The educated reader will perfectly be able that this a fairly dirty hack"},{"line_number":223,"context_line":"    # to avoid having to change the initialization process of every plugin."},{"line_number":224,"context_line":"    if RPC_DISABLED:"},{"line_number":225,"context_line":"        return VoidConnection()"},{"line_number":226,"context_line":"    return Connection()"}],"source_content_type":"text/x-python","patch_set":4,"id":"9a68dd71_9e92729e","line":223,"in_reply_to":"da6ed579_a8ae7c7e","updated":"2016-01-21 19:15:09.000000000","message":"Possibly, but it\u0027s not on the mitaka short-list at present, which is why it\u0027s in legacy. I\u0027d opt to get this into legacy, and begin that refactor after.","commit_id":"02b874d245d9bcaf1dc862ebf1ec680485488322"}],"neutron_lib/tests/_base.py":[{"author":{"_account_id":6524,"name":"Henry Gessau","email":"HenryG@gessau.net","username":"gessau"},"change_message_id":"fddcc1590d456ff11f4620b4434226f21e9af986","unresolved":false,"context_lines":[{"line_number":13,"context_line":"# License for the specific language governing permissions and limitations"},{"line_number":14,"context_line":"# under the License."},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"# import contextlib"},{"line_number":17,"context_line":"import logging as std_logging"},{"line_number":18,"context_line":"import os"},{"line_number":19,"context_line":"import os.path"}],"source_content_type":"text/x-python","patch_set":16,"id":"7a5de9d1_6189dfc8","line":16,"updated":"2016-01-29 20:19:08.000000000","message":"Nit: remove","commit_id":"41a49c41bd161b206a5183891b33febb7672aa1d"},{"author":{"_account_id":10980,"name":"Doug Wiegley","email":"dougwig@parkside.io","username":"dougw"},"change_message_id":"f73ae57e90eeae1af385b208fa0ae103a60ab0ed","unresolved":false,"context_lines":[{"line_number":13,"context_line":"# License for the specific language governing permissions and limitations"},{"line_number":14,"context_line":"# under the License."},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"# import contextlib"},{"line_number":17,"context_line":"import logging as std_logging"},{"line_number":18,"context_line":"import os"},{"line_number":19,"context_line":"import os.path"}],"source_content_type":"text/x-python","patch_set":16,"id":"7a5de9d1_c4b8e1ca","line":16,"in_reply_to":"7a5de9d1_6189dfc8","updated":"2016-01-29 20:32:54.000000000","message":"Done","commit_id":"41a49c41bd161b206a5183891b33febb7672aa1d"},{"author":{"_account_id":8873,"name":"Assaf Muller","email":"amuller@redhat.com","username":"amuller"},"change_message_id":"5c61140439b864c59ad5fb387c511b31e91d3934","unresolved":false,"context_lines":[{"line_number":104,"context_line":"class BaseTestCase(testtools.TestCase):"},{"line_number":105,"context_line":"    \"\"\"Same great taste, less filling."},{"line_number":106,"context_line":""},{"line_number":107,"context_line":"    BaseTestCase is responsible for doing lots of plugin-centric setup"},{"line_number":108,"context_line":"    that not all tests require (or can tolerate).  This class provides"},{"line_number":109,"context_line":"    only functionality that is common across all tests."},{"line_number":110,"context_line":"    \"\"\""}],"source_content_type":"text/x-python","patch_set":18,"id":"7a5de9d1_9fb796f4","line":107,"updated":"2016-01-29 20:53:47.000000000","message":"What \u003dD\n\nIt looks like you copied over DietTestCase and renamed it to BaseTestCase. The docstring doesn\u0027t make sense anymore.","commit_id":"d543f10da7ffea3c5a0b6d46ee70ad952ce751f6"}],"neutron_lib/tests/base.py":[{"author":{"_account_id":6524,"name":"Henry Gessau","email":"HenryG@gessau.net","username":"gessau"},"change_message_id":"84dec5d52dda51f8d462adc71fb034a4d061035b","unresolved":false,"context_lines":[{"line_number":19,"context_line":"import os.path"},{"line_number":20,"context_line":"import random"},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"import eventlet.timeout"},{"line_number":23,"context_line":"import fixtures"},{"line_number":24,"context_line":"import mock"},{"line_number":25,"context_line":"from oslo_config import cfg"}],"source_content_type":"text/x-python","patch_set":14,"id":"9a68dd71_4fbeeaae","line":22,"range":{"start_line":22,"start_character":7,"end_line":22,"end_character":15},"updated":"2016-01-26 02:44:23.000000000","message":"I am not sure why but I feel slightly uneasy about using eventlet in a lib. We\u0027re now in the test section though, so probably no big deal.","commit_id":"99e8f27b3b4d0ba24d01c472733628c0c1edf0ae"},{"author":{"_account_id":10980,"name":"Doug Wiegley","email":"dougwig@parkside.io","username":"dougw"},"change_message_id":"266e9f1c46d59eeaaad26abdfd3bb6bf416061ec","unresolved":false,"context_lines":[{"line_number":19,"context_line":"import os.path"},{"line_number":20,"context_line":"import random"},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"import eventlet.timeout"},{"line_number":23,"context_line":"import fixtures"},{"line_number":24,"context_line":"import mock"},{"line_number":25,"context_line":"from oslo_config import cfg"}],"source_content_type":"text/x-python","patch_set":14,"id":"7a5de9d1_54a36a4f","line":22,"range":{"start_line":22,"start_character":7,"end_line":22,"end_character":15},"in_reply_to":"9a68dd71_4fbeeaae","updated":"2016-01-29 06:47:00.000000000","message":"eventlet shouldn\u0027t be here, agreed.","commit_id":"99e8f27b3b4d0ba24d01c472733628c0c1edf0ae"},{"author":{"_account_id":6524,"name":"Henry Gessau","email":"HenryG@gessau.net","username":"gessau"},"change_message_id":"84dec5d52dda51f8d462adc71fb034a4d061035b","unresolved":false,"context_lines":[{"line_number":75,"context_line":""},{"line_number":76,"context_line":"def get_rand_device_name(prefix\u003d\u0027test\u0027):"},{"line_number":77,"context_line":"    return get_rand_name("},{"line_number":78,"context_line":"        max_length\u003dconstants.DEVICE_NAME_MAX_LEN, prefix\u003dprefix)"},{"line_number":79,"context_line":""},{"line_number":80,"context_line":""},{"line_number":81,"context_line":"def bool_from_env(key, strict\u003dFalse, default\u003dFalse):"}],"source_content_type":"text/x-python","patch_set":14,"id":"9a68dd71_8fe5c209","line":78,"range":{"start_line":78,"start_character":29,"end_line":78,"end_character":48},"updated":"2016-01-26 02:44:23.000000000","message":"This constant is not in neutron-lib yet.","commit_id":"99e8f27b3b4d0ba24d01c472733628c0c1edf0ae"},{"author":{"_account_id":10980,"name":"Doug Wiegley","email":"dougwig@parkside.io","username":"dougw"},"change_message_id":"266e9f1c46d59eeaaad26abdfd3bb6bf416061ec","unresolved":false,"context_lines":[{"line_number":75,"context_line":""},{"line_number":76,"context_line":"def get_rand_device_name(prefix\u003d\u0027test\u0027):"},{"line_number":77,"context_line":"    return get_rand_name("},{"line_number":78,"context_line":"        max_length\u003dconstants.DEVICE_NAME_MAX_LEN, prefix\u003dprefix)"},{"line_number":79,"context_line":""},{"line_number":80,"context_line":""},{"line_number":81,"context_line":"def bool_from_env(key, strict\u003dFalse, default\u003dFalse):"}],"source_content_type":"text/x-python","patch_set":14,"id":"7a5de9d1_54712adf","line":78,"range":{"start_line":78,"start_character":29,"end_line":78,"end_character":48},"in_reply_to":"9a68dd71_8fe5c209","updated":"2016-01-29 06:47:00.000000000","message":"Done","commit_id":"99e8f27b3b4d0ba24d01c472733628c0c1edf0ae"},{"author":{"_account_id":6524,"name":"Henry Gessau","email":"HenryG@gessau.net","username":"gessau"},"change_message_id":"84dec5d52dda51f8d462adc71fb034a4d061035b","unresolved":false,"context_lines":[{"line_number":84,"context_line":""},{"line_number":85,"context_line":""},{"line_number":86,"context_line":"def get_test_timeout(default\u003d0):"},{"line_number":87,"context_line":"    return int(os.environ.get(\u0027OS_TEST_TIMEOUT\u0027, 0))"},{"line_number":88,"context_line":""},{"line_number":89,"context_line":""},{"line_number":90,"context_line":"def sanitize_log_path(path):"}],"source_content_type":"text/x-python","patch_set":14,"id":"9a68dd71_ef91de47","line":87,"range":{"start_line":87,"start_character":49,"end_line":87,"end_character":50},"updated":"2016-01-26 02:44:23.000000000","message":"I am pretty sure we should put \u0027default\u0027 here. I am not sure why this was not done in Neutron, but for a lib it would make sense. Setting OS_TEST_TIMEOUT in the environment still overrides any programmatic value.","commit_id":"99e8f27b3b4d0ba24d01c472733628c0c1edf0ae"},{"author":{"_account_id":10980,"name":"Doug Wiegley","email":"dougwig@parkside.io","username":"dougw"},"change_message_id":"266e9f1c46d59eeaaad26abdfd3bb6bf416061ec","unresolved":false,"context_lines":[{"line_number":84,"context_line":""},{"line_number":85,"context_line":""},{"line_number":86,"context_line":"def get_test_timeout(default\u003d0):"},{"line_number":87,"context_line":"    return int(os.environ.get(\u0027OS_TEST_TIMEOUT\u0027, 0))"},{"line_number":88,"context_line":""},{"line_number":89,"context_line":""},{"line_number":90,"context_line":"def sanitize_log_path(path):"}],"source_content_type":"text/x-python","patch_set":14,"id":"7a5de9d1_9467a224","line":87,"range":{"start_line":87,"start_character":49,"end_line":87,"end_character":50},"in_reply_to":"9a68dd71_ef91de47","updated":"2016-01-29 06:47:00.000000000","message":"Done","commit_id":"99e8f27b3b4d0ba24d01c472733628c0c1edf0ae"},{"author":{"_account_id":6524,"name":"Henry Gessau","email":"HenryG@gessau.net","username":"gessau"},"change_message_id":"84dec5d52dda51f8d462adc71fb034a4d061035b","unresolved":false,"context_lines":[{"line_number":114,"context_line":"    def setUp(self):"},{"line_number":115,"context_line":"        super(BaseTestCase, self).setUp()"},{"line_number":116,"context_line":""},{"line_number":117,"context_line":"        # # FIXME(amuller): this must be called in the Neutron unit tests base"},{"line_number":118,"context_line":"        # # class to initialize the DB connection string. Moving this may cause"},{"line_number":119,"context_line":"        # # non-deterministic failures. Bug #1489098 for more info."},{"line_number":120,"context_line":"        config.set_db_defaults()"},{"line_number":121,"context_line":""},{"line_number":122,"context_line":"        # Configure this first to ensure pm debugging support for setUp()"}],"source_content_type":"text/x-python","patch_set":14,"id":"9a68dd71_8fcce289","line":119,"range":{"start_line":117,"start_character":0,"end_line":119,"end_character":67},"updated":"2016-01-26 02:44:23.000000000","message":"Nit: comments can start with just one # symbol.","commit_id":"99e8f27b3b4d0ba24d01c472733628c0c1edf0ae"},{"author":{"_account_id":10980,"name":"Doug Wiegley","email":"dougwig@parkside.io","username":"dougw"},"change_message_id":"266e9f1c46d59eeaaad26abdfd3bb6bf416061ec","unresolved":false,"context_lines":[{"line_number":114,"context_line":"    def setUp(self):"},{"line_number":115,"context_line":"        super(BaseTestCase, self).setUp()"},{"line_number":116,"context_line":""},{"line_number":117,"context_line":"        # # FIXME(amuller): this must be called in the Neutron unit tests base"},{"line_number":118,"context_line":"        # # class to initialize the DB connection string. Moving this may cause"},{"line_number":119,"context_line":"        # # non-deterministic failures. Bug #1489098 for more info."},{"line_number":120,"context_line":"        config.set_db_defaults()"},{"line_number":121,"context_line":""},{"line_number":122,"context_line":"        # Configure this first to ensure pm debugging support for setUp()"}],"source_content_type":"text/x-python","patch_set":14,"id":"7a5de9d1_4f2433ae","line":119,"range":{"start_line":117,"start_character":0,"end_line":119,"end_character":67},"in_reply_to":"9a68dd71_8fcce289","updated":"2016-01-29 06:47:00.000000000","message":"Done","commit_id":"99e8f27b3b4d0ba24d01c472733628c0c1edf0ae"},{"author":{"_account_id":6524,"name":"Henry Gessau","email":"HenryG@gessau.net","username":"gessau"},"change_message_id":"84dec5d52dda51f8d462adc71fb034a4d061035b","unresolved":false,"context_lines":[{"line_number":174,"context_line":""},{"line_number":175,"context_line":"    @contextlib.contextmanager"},{"line_number":176,"context_line":"    def assert_max_execution_time(self, max_execution_time\u003d5):"},{"line_number":177,"context_line":"        with eventlet.timeout.Timeout(max_execution_time, False):"},{"line_number":178,"context_line":"            yield"},{"line_number":179,"context_line":"            return"},{"line_number":180,"context_line":"        self.fail(\u0027Execution of this test timed out\u0027)"}],"source_content_type":"text/x-python","patch_set":14,"id":"9a68dd71_aa1e745c","line":177,"range":{"start_line":177,"start_character":13,"end_line":177,"end_character":21},"updated":"2016-01-26 02:44:23.000000000","message":"Is there another way to do this not using eventlet? There is a very tiny lib on PyPI called stopit that provides this functionality without eventlet.\n\nI am probably being paranoid about eventlet though.","commit_id":"99e8f27b3b4d0ba24d01c472733628c0c1edf0ae"},{"author":{"_account_id":10980,"name":"Doug Wiegley","email":"dougwig@parkside.io","username":"dougw"},"change_message_id":"266e9f1c46d59eeaaad26abdfd3bb6bf416061ec","unresolved":false,"context_lines":[{"line_number":174,"context_line":""},{"line_number":175,"context_line":"    @contextlib.contextmanager"},{"line_number":176,"context_line":"    def assert_max_execution_time(self, max_execution_time\u003d5):"},{"line_number":177,"context_line":"        with eventlet.timeout.Timeout(max_execution_time, False):"},{"line_number":178,"context_line":"            yield"},{"line_number":179,"context_line":"            return"},{"line_number":180,"context_line":"        self.fail(\u0027Execution of this test timed out\u0027)"}],"source_content_type":"text/x-python","patch_set":14,"id":"7a5de9d1_8f2a2b7d","line":177,"range":{"start_line":177,"start_character":13,"end_line":177,"end_character":21},"in_reply_to":"9a68dd71_aa1e745c","updated":"2016-01-29 06:47:00.000000000","message":"Done","commit_id":"99e8f27b3b4d0ba24d01c472733628c0c1edf0ae"}],"neutron_lib/tests/tools.py":[{"author":{"_account_id":6524,"name":"Henry Gessau","email":"HenryG@gessau.net","username":"gessau"},"change_message_id":"87284533f43945a0223d7384bb9b95514297e074","unresolved":false,"context_lines":[{"line_number":49,"context_line":"        self.addCleanup(warnings.resetwarnings)"},{"line_number":50,"context_line":"        for wtype in self.warning_types:"},{"line_number":51,"context_line":"            warnings.filterwarnings("},{"line_number":52,"context_line":"                \"always\", category\u003dwtype, module\u003d\u0027^neutron\\\\.\u0027)"}],"source_content_type":"text/x-python","patch_set":13,"id":"9a68dd71_11b6a38a","line":52,"range":{"start_line":52,"start_character":51,"end_line":52,"end_character":58},"updated":"2016-01-21 04:02:30.000000000","message":"neutron_lib ?","commit_id":"61c2c742b003f49991ac2b89cc1c48c03d661ea2"},{"author":{"_account_id":10980,"name":"Doug Wiegley","email":"dougwig@parkside.io","username":"dougw"},"change_message_id":"fcea04c0de234f0be7961db36ed9c6d8928df2b6","unresolved":false,"context_lines":[{"line_number":49,"context_line":"        self.addCleanup(warnings.resetwarnings)"},{"line_number":50,"context_line":"        for wtype in self.warning_types:"},{"line_number":51,"context_line":"            warnings.filterwarnings("},{"line_number":52,"context_line":"                \"always\", category\u003dwtype, module\u003d\u0027^neutron\\\\.\u0027)"}],"source_content_type":"text/x-python","patch_set":13,"id":"9a68dd71_f8e72f3e","line":52,"range":{"start_line":52,"start_character":51,"end_line":52,"end_character":58},"in_reply_to":"9a68dd71_11b6a38a","updated":"2016-01-21 04:38:37.000000000","message":"oh, yep, I think you\u0027re right.","commit_id":"61c2c742b003f49991ac2b89cc1c48c03d661ea2"}],"neutron_lib/tests/unit/api/test_validators.py":[{"author":{"_account_id":6524,"name":"Henry Gessau","email":"HenryG@gessau.net","username":"gessau"},"change_message_id":"84dec5d52dda51f8d462adc71fb034a4d061035b","unresolved":false,"context_lines":[{"line_number":274,"context_line":"        # an equivalent to test_validate_ip_address_bsd."},{"line_number":275,"context_line":"        ip_addr \u003d \u00271\u0027 * 59"},{"line_number":276,"context_line":"        msg \u003d validators.validate_ip_address(ip_addr)"},{"line_number":277,"context_line":"        try:"},{"line_number":278,"context_line":"            self.assertEqual(\"\u0027%s\u0027 is not a valid IP address\" % ip_addr, msg)"},{"line_number":279,"context_line":"        except testtools.matchers._impl.MismatchError:"},{"line_number":280,"context_line":"            # BSD"},{"line_number":281,"context_line":"            self.assertEqual("},{"line_number":282,"context_line":"                \"\u0027%s\u0027 is not an accepted IP address, \""},{"line_number":283,"context_line":"                \"\u0027199.28.113.199\u0027 is recommended\" % ip_addr, msg)"},{"line_number":284,"context_line":""},{"line_number":285,"context_line":"        ip_addr \u003d \u00271.1.1.1 has whitespace\u0027"},{"line_number":286,"context_line":"        msg \u003d validators.validate_ip_address(ip_addr)"}],"source_content_type":"text/x-python","patch_set":14,"id":"9a68dd71_aa33d460","line":283,"range":{"start_line":277,"start_character":0,"end_line":283,"end_character":65},"updated":"2016-01-26 02:44:23.000000000","message":"Where does this change come from? I don\u0027t see it in Neutron.","commit_id":"99e8f27b3b4d0ba24d01c472733628c0c1edf0ae"},{"author":{"_account_id":10980,"name":"Doug Wiegley","email":"dougwig@parkside.io","username":"dougw"},"change_message_id":"266e9f1c46d59eeaaad26abdfd3bb6bf416061ec","unresolved":false,"context_lines":[{"line_number":274,"context_line":"        # an equivalent to test_validate_ip_address_bsd."},{"line_number":275,"context_line":"        ip_addr \u003d \u00271\u0027 * 59"},{"line_number":276,"context_line":"        msg \u003d validators.validate_ip_address(ip_addr)"},{"line_number":277,"context_line":"        try:"},{"line_number":278,"context_line":"            self.assertEqual(\"\u0027%s\u0027 is not a valid IP address\" % ip_addr, msg)"},{"line_number":279,"context_line":"        except testtools.matchers._impl.MismatchError:"},{"line_number":280,"context_line":"            # BSD"},{"line_number":281,"context_line":"            self.assertEqual("},{"line_number":282,"context_line":"                \"\u0027%s\u0027 is not an accepted IP address, \""},{"line_number":283,"context_line":"                \"\u0027199.28.113.199\u0027 is recommended\" % ip_addr, msg)"},{"line_number":284,"context_line":""},{"line_number":285,"context_line":"        ip_addr \u003d \u00271.1.1.1 has whitespace\u0027"},{"line_number":286,"context_line":"        msg \u003d validators.validate_ip_address(ip_addr)"}],"source_content_type":"text/x-python","patch_set":14,"id":"7a5de9d1_34e90e81","line":283,"range":{"start_line":277,"start_character":0,"end_line":283,"end_character":65},"in_reply_to":"9a68dd71_aa33d460","updated":"2016-01-29 06:47:00.000000000","message":"Fix for mac vs linux. Similar tweak elsewhere, but this was a new test, and I\u0027m the first to hit it with a mac.","commit_id":"99e8f27b3b4d0ba24d01c472733628c0c1edf0ae"},{"author":{"_account_id":6524,"name":"Henry Gessau","email":"HenryG@gessau.net","username":"gessau"},"change_message_id":"fddcc1590d456ff11f4620b4434226f21e9af986","unresolved":false,"context_lines":[{"line_number":274,"context_line":"        # an equivalent to test_validate_ip_address_bsd."},{"line_number":275,"context_line":"        ip_addr \u003d \u00271\u0027 * 59"},{"line_number":276,"context_line":"        msg \u003d validators.validate_ip_address(ip_addr)"},{"line_number":277,"context_line":"        try:"},{"line_number":278,"context_line":"            self.assertEqual(\"\u0027%s\u0027 is not a valid IP address\" % ip_addr, msg)"},{"line_number":279,"context_line":"        except testtools.matchers._impl.MismatchError:"},{"line_number":280,"context_line":"            # BSD"},{"line_number":281,"context_line":"            self.assertEqual("},{"line_number":282,"context_line":"                \"\u0027%s\u0027 is not an accepted IP address, \""},{"line_number":283,"context_line":"                \"\u0027199.28.113.199\u0027 is recommended\" % ip_addr, msg)"},{"line_number":284,"context_line":""},{"line_number":285,"context_line":"        ip_addr \u003d \u00271.1.1.1 has whitespace\u0027"},{"line_number":286,"context_line":"        msg \u003d validators.validate_ip_address(ip_addr)"}],"source_content_type":"text/x-python","patch_set":16,"id":"7a5de9d1_c476a1a3","line":283,"range":{"start_line":277,"start_character":0,"end_line":283,"end_character":65},"updated":"2016-01-29 20:19:08.000000000","message":"I don\u0027t have a mac, but I think you don\u0027t need this.\nI think instead we need https://review.openstack.org/267850\nI think.","commit_id":"41a49c41bd161b206a5183891b33febb7672aa1d"},{"author":{"_account_id":10980,"name":"Doug Wiegley","email":"dougwig@parkside.io","username":"dougw"},"change_message_id":"f73ae57e90eeae1af385b208fa0ae103a60ab0ed","unresolved":false,"context_lines":[{"line_number":274,"context_line":"        # an equivalent to test_validate_ip_address_bsd."},{"line_number":275,"context_line":"        ip_addr \u003d \u00271\u0027 * 59"},{"line_number":276,"context_line":"        msg \u003d validators.validate_ip_address(ip_addr)"},{"line_number":277,"context_line":"        try:"},{"line_number":278,"context_line":"            self.assertEqual(\"\u0027%s\u0027 is not a valid IP address\" % ip_addr, msg)"},{"line_number":279,"context_line":"        except testtools.matchers._impl.MismatchError:"},{"line_number":280,"context_line":"            # BSD"},{"line_number":281,"context_line":"            self.assertEqual("},{"line_number":282,"context_line":"                \"\u0027%s\u0027 is not an accepted IP address, \""},{"line_number":283,"context_line":"                \"\u0027199.28.113.199\u0027 is recommended\" % ip_addr, msg)"},{"line_number":284,"context_line":""},{"line_number":285,"context_line":"        ip_addr \u003d \u00271.1.1.1 has whitespace\u0027"},{"line_number":286,"context_line":"        msg \u003d validators.validate_ip_address(ip_addr)"}],"source_content_type":"text/x-python","patch_set":16,"id":"7a5de9d1_c42d41ff","line":283,"range":{"start_line":277,"start_character":0,"end_line":283,"end_character":65},"in_reply_to":"7a5de9d1_c476a1a3","updated":"2016-01-29 20:32:54.000000000","message":"Done","commit_id":"41a49c41bd161b206a5183891b33febb7672aa1d"}],"neutron_lib/utils.py":[{"author":{"_account_id":6524,"name":"Henry Gessau","email":"HenryG@gessau.net","username":"gessau"},"change_message_id":"84dec5d52dda51f8d462adc71fb034a4d061035b","unresolved":false,"context_lines":[{"line_number":19,"context_line":"import socket"},{"line_number":20,"context_line":""},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"def get_hostname():"},{"line_number":23,"context_line":"    return socket.gethostname()"}],"source_content_type":"text/x-python","patch_set":14,"id":"9a68dd71_6a295ce5","line":23,"range":{"start_line":22,"start_character":0,"end_line":23,"end_character":31},"updated":"2016-01-26 02:44:23.000000000","message":"I find only one usage in config.py so I think we can just import socket there, and omit this module altogether for now.","commit_id":"99e8f27b3b4d0ba24d01c472733628c0c1edf0ae"},{"author":{"_account_id":10980,"name":"Doug Wiegley","email":"dougwig@parkside.io","username":"dougw"},"change_message_id":"266e9f1c46d59eeaaad26abdfd3bb6bf416061ec","unresolved":false,"context_lines":[{"line_number":19,"context_line":"import socket"},{"line_number":20,"context_line":""},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"def get_hostname():"},{"line_number":23,"context_line":"    return socket.gethostname()"}],"source_content_type":"text/x-python","patch_set":14,"id":"7a5de9d1_345b4e89","line":23,"range":{"start_line":22,"start_character":0,"end_line":23,"end_character":31},"in_reply_to":"9a68dd71_6a295ce5","updated":"2016-01-29 06:47:00.000000000","message":"Done","commit_id":"99e8f27b3b4d0ba24d01c472733628c0c1edf0ae"}],"tox.ini":[{"author":{"_account_id":6524,"name":"Henry Gessau","email":"HenryG@gessau.net","username":"gessau"},"change_message_id":"6b9401fe2fbdef1fcb755717c466b558a6e04690","unresolved":false,"context_lines":[{"line_number":40,"context_line":"# E265 block comment should start with ‘# ‘"},{"line_number":41,"context_line":"# H404 multi line docstring should start with a summary"},{"line_number":42,"context_line":"# H405 multi line docstring summary not separated with an empty line"},{"line_number":43,"context_line":"ignore \u003d E125,E126,E128,E129,E265,H404,H405"},{"line_number":44,"context_line":"show-source \u003d True"},{"line_number":45,"context_line":"builtins \u003d _"},{"line_number":46,"context_line":"exclude\u003d.venv,.git,.tox,dist,doc,*lib/python*,*egg,build"}],"source_content_type":"text/x-properties","patch_set":3,"id":"da6ed579_ea957e32","line":43,"updated":"2016-01-14 22:31:35.000000000","message":":(","commit_id":"6e99275203a6f7082501df4fec83a2b882c7de61"}]}
