)]}'
{"ironic/api/controllers/v1/driver.py":[{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"738b977b8a016d73e6b399e1db6c30c43a2e98b1","unresolved":false,"context_lines":[{"line_number":106,"context_line":""},{"line_number":107,"context_line":"    @wsme_pecan.wsexpose(wtypes.text, wtypes.text)"},{"line_number":108,"context_line":"    def methods(self, driver_name):"},{"line_number":109,"context_line":"        \"\"\"List the vendor methods supported by a given driver.\"\"\""},{"line_number":110,"context_line":"        topic \u003d pecan.request.rpcapi.get_topic_for_driver(driver_name)"},{"line_number":111,"context_line":"        return pecan.request.rpcapi.get_driver_vendor_passthru_methods("},{"line_number":112,"context_line":"                   pecan.request.context, driver_name, topic\u003dtopic)"}],"source_content_type":"text/x-python","patch_set":7,"id":"5a890539_89bc0c08","line":109,"updated":"2014-11-14 01:42:23.000000000","message":"is it just a list of methods, or the methods and descriptions/info for each method? Might be useful to elaborate/describe.","commit_id":"1082f24e07df9b2341d966bed743245c5c9d9ffb"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"c131b40e7e92136d14b3c543023a226a9935c4bd","unresolved":false,"context_lines":[{"line_number":106,"context_line":""},{"line_number":107,"context_line":"    @wsme_pecan.wsexpose(wtypes.text, wtypes.text)"},{"line_number":108,"context_line":"    def methods(self, driver_name):"},{"line_number":109,"context_line":"        \"\"\"List the vendor methods supported by a given driver.\"\"\""},{"line_number":110,"context_line":"        topic \u003d pecan.request.rpcapi.get_topic_for_driver(driver_name)"},{"line_number":111,"context_line":"        return pecan.request.rpcapi.get_driver_vendor_passthru_methods("},{"line_number":112,"context_line":"                   pecan.request.context, driver_name, topic\u003dtopic)"}],"source_content_type":"text/x-python","patch_set":7,"id":"5a890539_775c0dee","line":109,"in_reply_to":"5a890539_89bc0c08","updated":"2014-11-14 11:55:32.000000000","message":"Done","commit_id":"1082f24e07df9b2341d966bed743245c5c9d9ffb"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"738b977b8a016d73e6b399e1db6c30c43a2e98b1","unresolved":false,"context_lines":[{"line_number":109,"context_line":"        \"\"\"List the vendor methods supported by a given driver.\"\"\""},{"line_number":110,"context_line":"        topic \u003d pecan.request.rpcapi.get_topic_for_driver(driver_name)"},{"line_number":111,"context_line":"        return pecan.request.rpcapi.get_driver_vendor_passthru_methods("},{"line_number":112,"context_line":"                   pecan.request.context, driver_name, topic\u003dtopic)"},{"line_number":113,"context_line":""},{"line_number":114,"context_line":"    @wsme_pecan.wsexpose(wtypes.text, wtypes.text, wtypes.text,"},{"line_number":115,"context_line":"                         body\u003dwtypes.text)"}],"source_content_type":"text/x-python","patch_set":7,"id":"5a890539_29eb18b1","line":112,"updated":"2014-11-14 01:42:23.000000000","message":"When I did the properties stuff, there was concern about doing an rpc call for each request, especially when the information was static. So I cached the info (see _DRIVER_PROPERTIES). I am wondering whether we should do a similar thing for this.","commit_id":"1082f24e07df9b2341d966bed743245c5c9d9ffb"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"c131b40e7e92136d14b3c543023a226a9935c4bd","unresolved":false,"context_lines":[{"line_number":109,"context_line":"        \"\"\"List the vendor methods supported by a given driver.\"\"\""},{"line_number":110,"context_line":"        topic \u003d pecan.request.rpcapi.get_topic_for_driver(driver_name)"},{"line_number":111,"context_line":"        return pecan.request.rpcapi.get_driver_vendor_passthru_methods("},{"line_number":112,"context_line":"                   pecan.request.context, driver_name, topic\u003dtopic)"},{"line_number":113,"context_line":""},{"line_number":114,"context_line":"    @wsme_pecan.wsexpose(wtypes.text, wtypes.text, wtypes.text,"},{"line_number":115,"context_line":"                         body\u003dwtypes.text)"}],"source_content_type":"text/x-python","patch_set":7,"id":"5a890539_f7155de5","line":112,"in_reply_to":"5a890539_29eb18b1","updated":"2014-11-14 11:55:32.000000000","message":"Oh that\u0027s a great idea!\n\nI see the value in the cache, I will do it. Thanks for pointing it out","commit_id":"1082f24e07df9b2341d966bed743245c5c9d9ffb"}],"ironic/api/controllers/v1/node.py":[{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"738b977b8a016d73e6b399e1db6c30c43a2e98b1","unresolved":false,"context_lines":[{"line_number":564,"context_line":"        topic \u003d pecan.request.rpcapi.get_topic_for(rpc_node)"},{"line_number":565,"context_line":""},{"line_number":566,"context_line":"        return pecan.request.rpcapi.get_vendor_passthru_methods("},{"line_number":567,"context_line":"                   pecan.request.context, node_uuid, topic\u003dtopic)"},{"line_number":568,"context_line":""},{"line_number":569,"context_line":"    @wsme_pecan.wsexpose(wtypes.text, types.uuid, wtypes.text,"},{"line_number":570,"context_line":"                         body\u003dwtypes.text)"}],"source_content_type":"text/x-python","patch_set":7,"id":"5a890539_a94468b7","line":567,"updated":"2014-11-14 01:42:23.000000000","message":"similar comments as for driver.py","commit_id":"1082f24e07df9b2341d966bed743245c5c9d9ffb"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"c131b40e7e92136d14b3c543023a226a9935c4bd","unresolved":false,"context_lines":[{"line_number":564,"context_line":"        topic \u003d pecan.request.rpcapi.get_topic_for(rpc_node)"},{"line_number":565,"context_line":""},{"line_number":566,"context_line":"        return pecan.request.rpcapi.get_vendor_passthru_methods("},{"line_number":567,"context_line":"                   pecan.request.context, node_uuid, topic\u003dtopic)"},{"line_number":568,"context_line":""},{"line_number":569,"context_line":"    @wsme_pecan.wsexpose(wtypes.text, types.uuid, wtypes.text,"},{"line_number":570,"context_line":"                         body\u003dwtypes.text)"}],"source_content_type":"text/x-python","patch_set":7,"id":"5a890539_37db6551","line":567,"in_reply_to":"5a890539_a94468b7","updated":"2014-11-14 11:55:32.000000000","message":"+1 for the idea","commit_id":"1082f24e07df9b2341d966bed743245c5c9d9ffb"},{"author":{"_account_id":7711,"name":"Yuriy Zveryanskyy","email":"yzveryanskyy@mirantis.com","username":"yuriyz"},"change_message_id":"e7521f15f9643513d1605054e558e0ead9b3b78b","unresolved":false,"context_lines":[{"line_number":584,"context_line":"                        pecan.request.context, node_uuid, topic\u003dtopic)"},{"line_number":585,"context_line":"            _VENDOR_METHODS[node_uuid] \u003d ret"},{"line_number":586,"context_line":""},{"line_number":587,"context_line":"        return _VENDOR_METHODS[node_uuid]"},{"line_number":588,"context_line":""},{"line_number":589,"context_line":"    @wsme_pecan.wsexpose(wtypes.text, types.uuid, wtypes.text,"},{"line_number":590,"context_line":"                         body\u003dwtypes.text)"}],"source_content_type":"text/x-python","patch_set":10,"id":"5a890539_6c294a89","line":587,"updated":"2014-11-18 09:35:32.000000000","message":"I dislike the cache here. If driver \u0027foo\u0027 is unstable for a node I can change it to more generic driver \u0027bar\u0027 for example, and the API service should be restarted.","commit_id":"7b47615e58c5afa0e87ed2a62cfeaf42f9babdec"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"361248ad59874cc1d44d5fd79c36a620992190cd","unresolved":false,"context_lines":[{"line_number":584,"context_line":"                        pecan.request.context, node_uuid, topic\u003dtopic)"},{"line_number":585,"context_line":"            _VENDOR_METHODS[node_uuid] \u003d ret"},{"line_number":586,"context_line":""},{"line_number":587,"context_line":"        return _VENDOR_METHODS[node_uuid]"},{"line_number":588,"context_line":""},{"line_number":589,"context_line":"    @wsme_pecan.wsexpose(wtypes.text, types.uuid, wtypes.text,"},{"line_number":590,"context_line":"                         body\u003dwtypes.text)"}],"source_content_type":"text/x-python","patch_set":10,"id":"5a890539_5c4fed33","line":587,"updated":"2014-11-17 22:53:34.000000000","message":"I was thinking about this. It means that if you had eg 100 nodes, we\u0027d cache 100 entries. But isn\u0027t the difference based on the driver associated with the node? And you have to specify/associate the driver, when the node is registered.\n\nSo would it make sense to cache the info based/keyed on the driver associated with the node? Which would reduce the rpc calls?","commit_id":"7b47615e58c5afa0e87ed2a62cfeaf42f9babdec"},{"author":{"_account_id":7711,"name":"Yuriy Zveryanskyy","email":"yzveryanskyy@mirantis.com","username":"yuriyz"},"change_message_id":"c9cc2d9c17933e15e4b1b12f6eeba46ebb8b030b","unresolved":false,"context_lines":[{"line_number":584,"context_line":"                        pecan.request.context, node_uuid, topic\u003dtopic)"},{"line_number":585,"context_line":"            _VENDOR_METHODS[node_uuid] \u003d ret"},{"line_number":586,"context_line":""},{"line_number":587,"context_line":"        return _VENDOR_METHODS[node_uuid]"},{"line_number":588,"context_line":""},{"line_number":589,"context_line":"    @wsme_pecan.wsexpose(wtypes.text, types.uuid, wtypes.text,"},{"line_number":590,"context_line":"                         body\u003dwtypes.text)"}],"source_content_type":"text/x-python","patch_set":10,"id":"5a890539_6cd30a60","line":587,"in_reply_to":"5a890539_6c294a89","updated":"2014-11-18 09:41:49.000000000","message":"A possible solution is add driver field to the cache.","commit_id":"7b47615e58c5afa0e87ed2a62cfeaf42f9babdec"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"abfd935ac675721c538d1accbb3a8825886d70ab","unresolved":false,"context_lines":[{"line_number":584,"context_line":"                        pecan.request.context, node_uuid, topic\u003dtopic)"},{"line_number":585,"context_line":"            _VENDOR_METHODS[node_uuid] \u003d ret"},{"line_number":586,"context_line":""},{"line_number":587,"context_line":"        return _VENDOR_METHODS[node_uuid]"},{"line_number":588,"context_line":""},{"line_number":589,"context_line":"    @wsme_pecan.wsexpose(wtypes.text, types.uuid, wtypes.text,"},{"line_number":590,"context_line":"                         body\u003dwtypes.text)"}],"source_content_type":"text/x-python","patch_set":10,"id":"5a890539_679ec5ba","line":587,"in_reply_to":"5a890539_6cd30a60","updated":"2014-11-18 10:09:36.000000000","message":"+1 you guys are correct! Yeah I will cache by using the driver name instead of the node_uuid. It will keep the cache small and more accurate as Yuriy has pointed out.\n\nThanks Ruby and Yuriy for the review!","commit_id":"7b47615e58c5afa0e87ed2a62cfeaf42f9babdec"},{"author":{"_account_id":7711,"name":"Yuriy Zveryanskyy","email":"yzveryanskyy@mirantis.com","username":"yuriyz"},"change_message_id":"924415c8d29518fa940a1de883d36b34b109432d","unresolved":false,"context_lines":[{"line_number":579,"context_line":"        rpc_node \u003d objects.Node.get_by_uuid(pecan.request.context,"},{"line_number":580,"context_line":"                                            node_uuid)"},{"line_number":581,"context_line":""},{"line_number":582,"context_line":"        if rpc_node.driver not in _VENDOR_METHODS:"},{"line_number":583,"context_line":"            topic \u003d pecan.request.rpcapi.get_topic_for(rpc_node)"},{"line_number":584,"context_line":"            ret \u003d pecan.request.rpcapi.get_node_vendor_passthru_methods("},{"line_number":585,"context_line":"                        pecan.request.context, node_uuid, topic\u003dtopic)"}],"source_content_type":"text/x-python","patch_set":14,"id":"5a890539_dd5e4076","line":582,"updated":"2014-11-19 09:58:24.000000000","message":"_VENDOR_METHODS in node.py and driver.py now is the same, what about to use a \"global\" cache in one module, utils for example?","commit_id":"e69e53097a8e64335092929dacf9c7662727928a"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"6d0c25cd605d14b8be056c391603da7330916299","unresolved":false,"context_lines":[{"line_number":579,"context_line":"        rpc_node \u003d objects.Node.get_by_uuid(pecan.request.context,"},{"line_number":580,"context_line":"                                            node_uuid)"},{"line_number":581,"context_line":""},{"line_number":582,"context_line":"        if rpc_node.driver not in _VENDOR_METHODS:"},{"line_number":583,"context_line":"            topic \u003d pecan.request.rpcapi.get_topic_for(rpc_node)"},{"line_number":584,"context_line":"            ret \u003d pecan.request.rpcapi.get_node_vendor_passthru_methods("},{"line_number":585,"context_line":"                        pecan.request.context, node_uuid, topic\u003dtopic)"}],"source_content_type":"text/x-python","patch_set":14,"id":"5a890539_3d058414","line":582,"in_reply_to":"5a890539_dd5e4076","updated":"2014-11-19 10:04:23.000000000","message":"Hi Yuriy,\n\nThey are not the same - tho both uses the driver name as key - this one is caching the methods for nodes vendor passthru where in drivers.py it\u0027s caching the methods for the drivers vendor passthru","commit_id":"e69e53097a8e64335092929dacf9c7662727928a"}],"ironic/conductor/manager.py":[{"author":{"_account_id":7711,"name":"Yuriy Zveryanskyy","email":"yzveryanskyy@mirantis.com","username":"yuriyz"},"change_message_id":"6e0e1bc0d09db905071d647fbeb185e24b8abf35","unresolved":false,"context_lines":[{"line_number":534,"context_line":"        return (ret, is_async)"},{"line_number":535,"context_line":""},{"line_number":536,"context_line":"    def _list_vendor_passthru_metadata(self, route_dict):"},{"line_number":537,"context_line":"        fields \u003d (\u0027async\u0027, \u0027supported\u0027, \u0027description\u0027)"},{"line_number":538,"context_line":"        d \u003d {}"},{"line_number":539,"context_line":"        for method, metadata in route_dict.iteritems():"},{"line_number":540,"context_line":"            d[method] \u003d dict((k, metadata[k]) for k in fields)"}],"source_content_type":"text/x-python","patch_set":3,"id":"5a890539_b677a03a","line":537,"updated":"2014-11-12 14:29:11.000000000","message":"I think better move this list of hardcoded fields to drivers.base.","commit_id":"b2da12ac62cca5ad6507125c6180508e3e3b5491"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"6e029398bc41e2efef997f26b73047e404236c12","unresolved":false,"context_lines":[{"line_number":534,"context_line":"        return (ret, is_async)"},{"line_number":535,"context_line":""},{"line_number":536,"context_line":"    def _list_vendor_passthru_metadata(self, route_dict):"},{"line_number":537,"context_line":"        fields \u003d (\u0027async\u0027, \u0027supported\u0027, \u0027description\u0027)"},{"line_number":538,"context_line":"        d \u003d {}"},{"line_number":539,"context_line":"        for method, metadata in route_dict.iteritems():"},{"line_number":540,"context_line":"            d[method] \u003d dict((k, metadata[k]) for k in fields)"}],"source_content_type":"text/x-python","patch_set":3,"id":"5a890539_05e80be1","line":537,"in_reply_to":"5a890539_b677a03a","updated":"2014-11-13 17:34:22.000000000","message":"That\u0027s a good idea, maintaining a list of hardcoded fields is painful.\n\nTo be honest I was thinking about getting rid of having a list at all, the only metadata that have to be ignored right now is the function reference, so I may just ignore that as part of metadata iteration.","commit_id":"b2da12ac62cca5ad6507125c6180508e3e3b5491"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"738b977b8a016d73e6b399e1db6c30c43a2e98b1","unresolved":false,"context_lines":[{"line_number":552,"context_line":"        return d"},{"line_number":553,"context_line":""},{"line_number":554,"context_line":"    @messaging.expected_exceptions(exception.UnsupportedDriverExtension)"},{"line_number":555,"context_line":"    def get_vendor_passthru_methods(self, context, node_id):"},{"line_number":556,"context_line":"        \"\"\"List the vendor methods supported by a given node."},{"line_number":557,"context_line":""},{"line_number":558,"context_line":"        :param context: an admin context."}],"source_content_type":"text/x-python","patch_set":7,"id":"5a890539_70126158","line":555,"updated":"2014-11-14 01:42:23.000000000","message":"get_node_vendor_passthru_methods?","commit_id":"1082f24e07df9b2341d966bed743245c5c9d9ffb"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"c131b40e7e92136d14b3c543023a226a9935c4bd","unresolved":false,"context_lines":[{"line_number":552,"context_line":"        return d"},{"line_number":553,"context_line":""},{"line_number":554,"context_line":"    @messaging.expected_exceptions(exception.UnsupportedDriverExtension)"},{"line_number":555,"context_line":"    def get_vendor_passthru_methods(self, context, node_id):"},{"line_number":556,"context_line":"        \"\"\"List the vendor methods supported by a given node."},{"line_number":557,"context_line":""},{"line_number":558,"context_line":"        :param context: an admin context."}],"source_content_type":"text/x-python","patch_set":7,"id":"5a890539_77e16dfd","line":555,"in_reply_to":"5a890539_70126158","updated":"2014-11-14 11:55:32.000000000","message":"Done","commit_id":"1082f24e07df9b2341d966bed743245c5c9d9ffb"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"738b977b8a016d73e6b399e1db6c30c43a2e98b1","unresolved":false,"context_lines":[{"line_number":553,"context_line":""},{"line_number":554,"context_line":"    @messaging.expected_exceptions(exception.UnsupportedDriverExtension)"},{"line_number":555,"context_line":"    def get_vendor_passthru_methods(self, context, node_id):"},{"line_number":556,"context_line":"        \"\"\"List the vendor methods supported by a given node."},{"line_number":557,"context_line":""},{"line_number":558,"context_line":"        :param context: an admin context."},{"line_number":559,"context_line":"        :param node_id: the id or uuid of a node."}],"source_content_type":"text/x-python","patch_set":7,"id":"5a890539_101f5d5c","line":556,"updated":"2014-11-14 01:42:23.000000000","message":"nit: \u0027List\u0027 -\u003e \u0027Get\u0027 since it is returning a dictionary of stuff","commit_id":"1082f24e07df9b2341d966bed743245c5c9d9ffb"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"c131b40e7e92136d14b3c543023a226a9935c4bd","unresolved":false,"context_lines":[{"line_number":553,"context_line":""},{"line_number":554,"context_line":"    @messaging.expected_exceptions(exception.UnsupportedDriverExtension)"},{"line_number":555,"context_line":"    def get_vendor_passthru_methods(self, context, node_id):"},{"line_number":556,"context_line":"        \"\"\"List the vendor methods supported by a given node."},{"line_number":557,"context_line":""},{"line_number":558,"context_line":"        :param context: an admin context."},{"line_number":559,"context_line":"        :param node_id: the id or uuid of a node."}],"source_content_type":"text/x-python","patch_set":7,"id":"5a890539_b7e67513","line":556,"in_reply_to":"5a890539_101f5d5c","updated":"2014-11-14 11:55:32.000000000","message":"Done","commit_id":"1082f24e07df9b2341d966bed743245c5c9d9ffb"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"738b977b8a016d73e6b399e1db6c30c43a2e98b1","unresolved":false,"context_lines":[{"line_number":574,"context_line":"    @messaging.expected_exceptions(exception.UnsupportedDriverExtension,"},{"line_number":575,"context_line":"                                   exception.DriverNotFound)"},{"line_number":576,"context_line":"    def get_driver_vendor_passthru_methods(self, context, driver_name):"},{"line_number":577,"context_line":"        \"\"\"List the vendor methods supported by a given driver."},{"line_number":578,"context_line":""},{"line_number":579,"context_line":"        :param context: an admin context."},{"line_number":580,"context_line":"        :param driver_name: name of the driver."}],"source_content_type":"text/x-python","patch_set":7,"id":"5a890539_f0549100","line":577,"updated":"2014-11-14 01:42:23.000000000","message":"nit: \u0027List\u0027 -\u003e \u0027Get\u0027 since it is returning a dictionary of stuff","commit_id":"1082f24e07df9b2341d966bed743245c5c9d9ffb"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"c131b40e7e92136d14b3c543023a226a9935c4bd","unresolved":false,"context_lines":[{"line_number":574,"context_line":"    @messaging.expected_exceptions(exception.UnsupportedDriverExtension,"},{"line_number":575,"context_line":"                                   exception.DriverNotFound)"},{"line_number":576,"context_line":"    def get_driver_vendor_passthru_methods(self, context, driver_name):"},{"line_number":577,"context_line":"        \"\"\"List the vendor methods supported by a given driver."},{"line_number":578,"context_line":""},{"line_number":579,"context_line":"        :param context: an admin context."},{"line_number":580,"context_line":"        :param driver_name: name of the driver."}],"source_content_type":"text/x-python","patch_set":7,"id":"5a890539_d7ef81e7","line":577,"in_reply_to":"5a890539_f0549100","updated":"2014-11-14 11:55:32.000000000","message":"Done","commit_id":"1082f24e07df9b2341d966bed743245c5c9d9ffb"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"738b977b8a016d73e6b399e1db6c30c43a2e98b1","unresolved":false,"context_lines":[{"line_number":589,"context_line":"        if not getattr(driver, \u0027vendor\u0027, None):"},{"line_number":590,"context_line":"            raise exception.UnsupportedDriverExtension("},{"line_number":591,"context_line":"                driver\u003ddriver_name,"},{"line_number":592,"context_line":"                extension\u003d\u0027vendor interface\u0027)"},{"line_number":593,"context_line":""},{"line_number":594,"context_line":"        return self._get_vendor_passthru_metadata(driver.vendor.driver_routes)"},{"line_number":595,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"5a890539_70aee1e7","line":592,"updated":"2014-11-14 01:42:23.000000000","message":"why is this \u0027vendor interface\u0027, whereas in get_vendor_passthru_methods(), it is \u0027vendor passthru\u0027?","commit_id":"1082f24e07df9b2341d966bed743245c5c9d9ffb"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"c131b40e7e92136d14b3c543023a226a9935c4bd","unresolved":false,"context_lines":[{"line_number":589,"context_line":"        if not getattr(driver, \u0027vendor\u0027, None):"},{"line_number":590,"context_line":"            raise exception.UnsupportedDriverExtension("},{"line_number":591,"context_line":"                driver\u003ddriver_name,"},{"line_number":592,"context_line":"                extension\u003d\u0027vendor interface\u0027)"},{"line_number":593,"context_line":""},{"line_number":594,"context_line":"        return self._get_vendor_passthru_metadata(driver.vendor.driver_routes)"},{"line_number":595,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"5a890539_9797b947","line":592,"in_reply_to":"5a890539_70aee1e7","updated":"2014-11-14 11:55:32.000000000","message":"good q. This bits where copied from the vendor_passthru() and  driver_vendor_passthru() methods, they seem inconsistent. I will fix on both places","commit_id":"1082f24e07df9b2341d966bed743245c5c9d9ffb"},{"author":{"_account_id":10343,"name":"Jim Rollenhagen","email":"jim@jimrollenhagen.com","username":"jimrollenhagen"},"change_message_id":"4d7981a5e45b838735315e0334f0d1402d3828e9","unresolved":false,"context_lines":[{"line_number":548,"context_line":"        d \u003d {}"},{"line_number":549,"context_line":"        for method, metadata in route_dict.iteritems():"},{"line_number":550,"context_line":"            # \u0027func\u0027 is the vendor method reference, ignore it"},{"line_number":551,"context_line":"            d[method] \u003d dict((k, metadata[k]) for k in metadata if k !\u003d \u0027func\u0027)"},{"line_number":552,"context_line":"        return d"},{"line_number":553,"context_line":""},{"line_number":554,"context_line":"    @messaging.expected_exceptions(exception.UnsupportedDriverExtension)"}],"source_content_type":"text/x-python","patch_set":11,"id":"5a890539_55c965aa","line":551,"updated":"2014-11-18 16:40:43.000000000","message":"Can\u0027t we use dict comprehensions now?","commit_id":"cd693a4f0ae9d1ac984e38cef37f7a877e75514a"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"17efa4ad9f62e0efdfde92a96ab4b957a26ed9b4","unresolved":false,"context_lines":[{"line_number":548,"context_line":"        d \u003d {}"},{"line_number":549,"context_line":"        for method, metadata in route_dict.iteritems():"},{"line_number":550,"context_line":"            # \u0027func\u0027 is the vendor method reference, ignore it"},{"line_number":551,"context_line":"            d[method] \u003d dict((k, metadata[k]) for k in metadata if k !\u003d \u0027func\u0027)"},{"line_number":552,"context_line":"        return d"},{"line_number":553,"context_line":""},{"line_number":554,"context_line":"    @messaging.expected_exceptions(exception.UnsupportedDriverExtension)"}],"source_content_type":"text/x-python","patch_set":11,"id":"5a890539_358e992e","line":551,"in_reply_to":"5a890539_55c965aa","updated":"2014-11-18 17:06:23.000000000","message":"+1","commit_id":"cd693a4f0ae9d1ac984e38cef37f7a877e75514a"}],"ironic/conductor/rpcapi.py":[{"author":{"_account_id":7711,"name":"Yuriy Zveryanskyy","email":"yzveryanskyy@mirantis.com","username":"yuriyz"},"change_message_id":"6e0e1bc0d09db905071d647fbeb185e24b8abf35","unresolved":false,"context_lines":[{"line_number":220,"context_line":"                          http_method\u003dhttp_method,"},{"line_number":221,"context_line":"                          info\u003dinfo)"},{"line_number":222,"context_line":""},{"line_number":223,"context_line":"    def list_vendor_passthru_methods(self, context, node_id, topic\u003dNone):"},{"line_number":224,"context_line":"        \"\"\"List the vendor methods supported by a given node."},{"line_number":225,"context_line":""},{"line_number":226,"context_line":"        :param context: an admin context."}],"source_content_type":"text/x-python","patch_set":3,"id":"5a890539_566f5cc5","line":223,"updated":"2014-11-12 14:29:11.000000000","message":"I prefer get_vendor_passthru_methods name here for consistency.","commit_id":"b2da12ac62cca5ad6507125c6180508e3e3b5491"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"6e029398bc41e2efef997f26b73047e404236c12","unresolved":false,"context_lines":[{"line_number":220,"context_line":"                          http_method\u003dhttp_method,"},{"line_number":221,"context_line":"                          info\u003dinfo)"},{"line_number":222,"context_line":""},{"line_number":223,"context_line":"    def list_vendor_passthru_methods(self, context, node_id, topic\u003dNone):"},{"line_number":224,"context_line":"        \"\"\"List the vendor methods supported by a given node."},{"line_number":225,"context_line":""},{"line_number":226,"context_line":"        :param context: an admin context."}],"source_content_type":"text/x-python","patch_set":3,"id":"5a890539_d03c27c2","line":223,"in_reply_to":"5a890539_566f5cc5","updated":"2014-11-13 17:34:22.000000000","message":"Done","commit_id":"b2da12ac62cca5ad6507125c6180508e3e3b5491"},{"author":{"_account_id":7711,"name":"Yuriy Zveryanskyy","email":"yzveryanskyy@mirantis.com","username":"yuriyz"},"change_message_id":"6e0e1bc0d09db905071d647fbeb185e24b8abf35","unresolved":false,"context_lines":[{"line_number":232,"context_line":"        return cctxt.call(context, \u0027list_vendor_passthru_methods\u0027,"},{"line_number":233,"context_line":"                          node_id\u003dnode_id)"},{"line_number":234,"context_line":""},{"line_number":235,"context_line":"    def list_driver_vendor_passthru_methods(self, context, driver_name,"},{"line_number":236,"context_line":"                                            topic\u003dNone):"},{"line_number":237,"context_line":"        \"\"\"List the vendor methods supported by a given driver."},{"line_number":238,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"5a890539_9668e4bb","line":235,"updated":"2014-11-12 14:29:11.000000000","message":"Ditto, get_driver_vendor_passthru_methods.","commit_id":"b2da12ac62cca5ad6507125c6180508e3e3b5491"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"6e029398bc41e2efef997f26b73047e404236c12","unresolved":false,"context_lines":[{"line_number":232,"context_line":"        return cctxt.call(context, \u0027list_vendor_passthru_methods\u0027,"},{"line_number":233,"context_line":"                          node_id\u003dnode_id)"},{"line_number":234,"context_line":""},{"line_number":235,"context_line":"    def list_driver_vendor_passthru_methods(self, context, driver_name,"},{"line_number":236,"context_line":"                                            topic\u003dNone):"},{"line_number":237,"context_line":"        \"\"\"List the vendor methods supported by a given driver."},{"line_number":238,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"5a890539_f04be356","line":235,"in_reply_to":"5a890539_9668e4bb","updated":"2014-11-13 17:34:22.000000000","message":"Done","commit_id":"b2da12ac62cca5ad6507125c6180508e3e3b5491"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"738b977b8a016d73e6b399e1db6c30c43a2e98b1","unresolved":false,"context_lines":[{"line_number":63,"context_line":"    |    1.20 - Added http_method parameter to vendor_passthru and"},{"line_number":64,"context_line":"                driver_vendor_passthru"},{"line_number":65,"context_line":"    |    1.21 - Added get_vendor_passthru_methods and"},{"line_number":66,"context_line":"                get_driver_vendor_passthru_methods"},{"line_number":67,"context_line":""},{"line_number":68,"context_line":"    \"\"\""},{"line_number":69,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"5a890539_89a88c21","line":66,"updated":"2014-11-14 01:42:23.000000000","message":"oh hey, do you know if this works w/o the \u0027|\u0027 on the left? I think it has something to do with sphinx not complaining when the docs are generated.","commit_id":"1082f24e07df9b2341d966bed743245c5c9d9ffb"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"c131b40e7e92136d14b3c543023a226a9935c4bd","unresolved":false,"context_lines":[{"line_number":63,"context_line":"    |    1.20 - Added http_method parameter to vendor_passthru and"},{"line_number":64,"context_line":"                driver_vendor_passthru"},{"line_number":65,"context_line":"    |    1.21 - Added get_vendor_passthru_methods and"},{"line_number":66,"context_line":"                get_driver_vendor_passthru_methods"},{"line_number":67,"context_line":""},{"line_number":68,"context_line":"    \"\"\""},{"line_number":69,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"5a890539_caefd4e7","line":66,"in_reply_to":"5a890539_89a88c21","updated":"2014-11-14 11:55:32.000000000","message":"will add the |\u0027s","commit_id":"1082f24e07df9b2341d966bed743245c5c9d9ffb"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"738b977b8a016d73e6b399e1db6c30c43a2e98b1","unresolved":false,"context_lines":[{"line_number":233,"context_line":"                          http_method\u003dhttp_method,"},{"line_number":234,"context_line":"                          info\u003dinfo)"},{"line_number":235,"context_line":""},{"line_number":236,"context_line":"    def get_vendor_passthru_methods(self, context, node_id, topic\u003dNone):"},{"line_number":237,"context_line":"        \"\"\"List the vendor methods supported by a given node."},{"line_number":238,"context_line":""},{"line_number":239,"context_line":"        :param context: an admin context."}],"source_content_type":"text/x-python","patch_set":7,"id":"5a890539_bc282887","line":236,"updated":"2014-11-14 01:42:23.000000000","message":"what do you think about calling this get_node_vendor_passthru_methods? (Or get_node_passthru_methods)? To make it easier to distinguish from the driver_passthru_methods.","commit_id":"1082f24e07df9b2341d966bed743245c5c9d9ffb"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"c131b40e7e92136d14b3c543023a226a9935c4bd","unresolved":false,"context_lines":[{"line_number":233,"context_line":"                          http_method\u003dhttp_method,"},{"line_number":234,"context_line":"                          info\u003dinfo)"},{"line_number":235,"context_line":""},{"line_number":236,"context_line":"    def get_vendor_passthru_methods(self, context, node_id, topic\u003dNone):"},{"line_number":237,"context_line":"        \"\"\"List the vendor methods supported by a given node."},{"line_number":238,"context_line":""},{"line_number":239,"context_line":"        :param context: an admin context."}],"source_content_type":"text/x-python","patch_set":7,"id":"5a890539_f79abd6c","line":236,"in_reply_to":"5a890539_bc282887","updated":"2014-11-14 11:55:32.000000000","message":"Done","commit_id":"1082f24e07df9b2341d966bed743245c5c9d9ffb"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"738b977b8a016d73e6b399e1db6c30c43a2e98b1","unresolved":false,"context_lines":[{"line_number":234,"context_line":"                          info\u003dinfo)"},{"line_number":235,"context_line":""},{"line_number":236,"context_line":"    def get_vendor_passthru_methods(self, context, node_id, topic\u003dNone):"},{"line_number":237,"context_line":"        \"\"\"List the vendor methods supported by a given node."},{"line_number":238,"context_line":""},{"line_number":239,"context_line":"        :param context: an admin context."},{"line_number":240,"context_line":"        :param node_id: the id or uuid of a node."}],"source_content_type":"text/x-python","patch_set":7,"id":"5a890539_297158e0","line":237,"updated":"2014-11-14 01:42:23.000000000","message":"nit: I\u0027d use \u0027get\u0027 since you\u0027re returning a dictionary.","commit_id":"1082f24e07df9b2341d966bed743245c5c9d9ffb"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"c131b40e7e92136d14b3c543023a226a9935c4bd","unresolved":false,"context_lines":[{"line_number":234,"context_line":"                          info\u003dinfo)"},{"line_number":235,"context_line":""},{"line_number":236,"context_line":"    def get_vendor_passthru_methods(self, context, node_id, topic\u003dNone):"},{"line_number":237,"context_line":"        \"\"\"List the vendor methods supported by a given node."},{"line_number":238,"context_line":""},{"line_number":239,"context_line":"        :param context: an admin context."},{"line_number":240,"context_line":"        :param node_id: the id or uuid of a node."}],"source_content_type":"text/x-python","patch_set":7,"id":"5a890539_178bc91f","line":237,"in_reply_to":"5a890539_297158e0","updated":"2014-11-14 11:55:32.000000000","message":"Done","commit_id":"1082f24e07df9b2341d966bed743245c5c9d9ffb"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"738b977b8a016d73e6b399e1db6c30c43a2e98b1","unresolved":false,"context_lines":[{"line_number":237,"context_line":"        \"\"\"List the vendor methods supported by a given node."},{"line_number":238,"context_line":""},{"line_number":239,"context_line":"        :param context: an admin context."},{"line_number":240,"context_line":"        :param node_id: the id or uuid of a node."},{"line_number":241,"context_line":"        :returns: dictionary of \u003cmethod name\u003e:\u003cmethod metadata\u003e entries."},{"line_number":242,"context_line":""},{"line_number":243,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":7,"id":"5a890539_c9337412","line":240,"updated":"2014-11-14 01:42:23.000000000","message":"don\u0027t know if we want to put :param topic...","commit_id":"1082f24e07df9b2341d966bed743245c5c9d9ffb"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"c131b40e7e92136d14b3c543023a226a9935c4bd","unresolved":false,"context_lines":[{"line_number":237,"context_line":"        \"\"\"List the vendor methods supported by a given node."},{"line_number":238,"context_line":""},{"line_number":239,"context_line":"        :param context: an admin context."},{"line_number":240,"context_line":"        :param node_id: the id or uuid of a node."},{"line_number":241,"context_line":"        :returns: dictionary of \u003cmethod name\u003e:\u003cmethod metadata\u003e entries."},{"line_number":242,"context_line":""},{"line_number":243,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":7,"id":"5a890539_3790c549","line":240,"in_reply_to":"5a890539_c9337412","updated":"2014-11-14 11:55:32.000000000","message":"Done","commit_id":"1082f24e07df9b2341d966bed743245c5c9d9ffb"}],"ironic/tests/api/v1/test_drivers.py":[{"author":{"_account_id":10343,"name":"Jim Rollenhagen","email":"jim@jimrollenhagen.com","username":"jimrollenhagen"},"change_message_id":"4d7981a5e45b838735315e0334f0d1402d3828e9","unresolved":false,"context_lines":[{"line_number":165,"context_line":"        fake_data \u003d {\u0027cat\u0027: \u0027meow\u0027}"},{"line_number":166,"context_line":"        driver._VENDOR_METHODS \u003d {\u0027fake\u0027: fake_data}"},{"line_number":167,"context_line":"        data \u003d self.get_json("},{"line_number":168,"context_line":"            \u0027/drivers/%s/vendor_passthru/methods\u0027 % \u0027fake\u0027)"},{"line_number":169,"context_line":"        self.assertEqual(fake_data, data)"},{"line_number":170,"context_line":"        # assert RPC method wasn\u0027t called"},{"line_number":171,"context_line":"        self.assertFalse(get_methods_mock.called)"}],"source_content_type":"text/x-python","patch_set":11,"id":"5a890539_f565f1ae","line":168,"updated":"2014-11-18 16:40:43.000000000","message":"Why do string formatting here?","commit_id":"cd693a4f0ae9d1ac984e38cef37f7a877e75514a"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"17efa4ad9f62e0efdfde92a96ab4b957a26ed9b4","unresolved":false,"context_lines":[{"line_number":165,"context_line":"        fake_data \u003d {\u0027cat\u0027: \u0027meow\u0027}"},{"line_number":166,"context_line":"        driver._VENDOR_METHODS \u003d {\u0027fake\u0027: fake_data}"},{"line_number":167,"context_line":"        data \u003d self.get_json("},{"line_number":168,"context_line":"            \u0027/drivers/%s/vendor_passthru/methods\u0027 % \u0027fake\u0027)"},{"line_number":169,"context_line":"        self.assertEqual(fake_data, data)"},{"line_number":170,"context_line":"        # assert RPC method wasn\u0027t called"},{"line_number":171,"context_line":"        self.assertFalse(get_methods_mock.called)"}],"source_content_type":"text/x-python","patch_set":11,"id":"5a890539_b579a930","line":168,"in_reply_to":"5a890539_f565f1ae","updated":"2014-11-18 17:06:23.000000000","message":"Done","commit_id":"cd693a4f0ae9d1ac984e38cef37f7a877e75514a"},{"author":{"_account_id":10343,"name":"Jim Rollenhagen","email":"jim@jimrollenhagen.com","username":"jimrollenhagen"},"change_message_id":"4d7981a5e45b838735315e0334f0d1402d3828e9","unresolved":false,"context_lines":[{"line_number":168,"context_line":"            \u0027/drivers/%s/vendor_passthru/methods\u0027 % \u0027fake\u0027)"},{"line_number":169,"context_line":"        self.assertEqual(fake_data, data)"},{"line_number":170,"context_line":"        # assert RPC method wasn\u0027t called"},{"line_number":171,"context_line":"        self.assertFalse(get_methods_mock.called)"},{"line_number":172,"context_line":""},{"line_number":173,"context_line":""},{"line_number":174,"context_line":"@mock.patch.object(rpcapi.ConductorAPI, \u0027get_driver_properties\u0027)"}],"source_content_type":"text/x-python","patch_set":11,"id":"5a890539_152fdd3f","line":171,"updated":"2014-11-18 16:40:43.000000000","message":"I\u0027d prefer if this test called get_json twice, and asserted that it\u0027s called only once, rather than hacking _VENDOR_METHODS directly.","commit_id":"cd693a4f0ae9d1ac984e38cef37f7a877e75514a"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"17efa4ad9f62e0efdfde92a96ab4b957a26ed9b4","unresolved":false,"context_lines":[{"line_number":168,"context_line":"            \u0027/drivers/%s/vendor_passthru/methods\u0027 % \u0027fake\u0027)"},{"line_number":169,"context_line":"        self.assertEqual(fake_data, data)"},{"line_number":170,"context_line":"        # assert RPC method wasn\u0027t called"},{"line_number":171,"context_line":"        self.assertFalse(get_methods_mock.called)"},{"line_number":172,"context_line":""},{"line_number":173,"context_line":""},{"line_number":174,"context_line":"@mock.patch.object(rpcapi.ConductorAPI, \u0027get_driver_properties\u0027)"}],"source_content_type":"text/x-python","patch_set":11,"id":"5a890539_d5747537","line":171,"in_reply_to":"5a890539_152fdd3f","updated":"2014-11-18 17:06:23.000000000","message":"Done","commit_id":"cd693a4f0ae9d1ac984e38cef37f7a877e75514a"}],"ironic/tests/api/v1/test_nodes.py":[{"author":{"_account_id":10343,"name":"Jim Rollenhagen","email":"jim@jimrollenhagen.com","username":"jimrollenhagen"},"change_message_id":"4d7981a5e45b838735315e0334f0d1402d3828e9","unresolved":false,"context_lines":[{"line_number":988,"context_line":"            \u0027/nodes/%s/vendor_passthru/methods\u0027 % node.uuid)"},{"line_number":989,"context_line":"        self.assertEqual(fake_data, data)"},{"line_number":990,"context_line":"        # assert RPC method wasn\u0027t called"},{"line_number":991,"context_line":"        self.assertFalse(get_methods_mock.called)"},{"line_number":992,"context_line":""},{"line_number":993,"context_line":""},{"line_number":994,"context_line":"class TestDelete(api_base.FunctionalTest):"}],"source_content_type":"text/x-python","patch_set":11,"id":"5a890539_75282133","line":991,"updated":"2014-11-18 16:40:43.000000000","message":"Ditto for just calling this twice.","commit_id":"cd693a4f0ae9d1ac984e38cef37f7a877e75514a"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"17efa4ad9f62e0efdfde92a96ab4b957a26ed9b4","unresolved":false,"context_lines":[{"line_number":988,"context_line":"            \u0027/nodes/%s/vendor_passthru/methods\u0027 % node.uuid)"},{"line_number":989,"context_line":"        self.assertEqual(fake_data, data)"},{"line_number":990,"context_line":"        # assert RPC method wasn\u0027t called"},{"line_number":991,"context_line":"        self.assertFalse(get_methods_mock.called)"},{"line_number":992,"context_line":""},{"line_number":993,"context_line":""},{"line_number":994,"context_line":"class TestDelete(api_base.FunctionalTest):"}],"source_content_type":"text/x-python","patch_set":11,"id":"5a890539_55988569","line":991,"in_reply_to":"5a890539_75282133","updated":"2014-11-18 17:06:23.000000000","message":"Done","commit_id":"cd693a4f0ae9d1ac984e38cef37f7a877e75514a"}],"ironic/tests/conductor/test_manager.py":[{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"738b977b8a016d73e6b399e1db6c30c43a2e98b1","unresolved":false,"context_lines":[{"line_number":680,"context_line":"        node \u003d obj_utils.create_test_node(self.context, driver\u003d\u0027fake\u0027)"},{"line_number":681,"context_line":"        fake_routes \u003d {\u0027test_method\u0027: {\u0027async\u0027: True,"},{"line_number":682,"context_line":"                                       \u0027description\u0027: \u0027foo\u0027,"},{"line_number":683,"context_line":"                                       \u0027supported\u0027: [\u0027FAKE\u0027],"},{"line_number":684,"context_line":"                                       \u0027func\u0027: None}}"},{"line_number":685,"context_line":"        self.driver.vendor.vendor_routes \u003d fake_routes"},{"line_number":686,"context_line":"        self._start_service()"}],"source_content_type":"text/x-python","patch_set":7,"id":"5a890539_10403d06","line":683,"updated":"2014-11-14 01:42:23.000000000","message":"I\u0027d use a valid http method here instead of \u0027FAKE\u0027. (Just to give an idea of a possible valid value.)","commit_id":"1082f24e07df9b2341d966bed743245c5c9d9ffb"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"c131b40e7e92136d14b3c543023a226a9935c4bd","unresolved":false,"context_lines":[{"line_number":680,"context_line":"        node \u003d obj_utils.create_test_node(self.context, driver\u003d\u0027fake\u0027)"},{"line_number":681,"context_line":"        fake_routes \u003d {\u0027test_method\u0027: {\u0027async\u0027: True,"},{"line_number":682,"context_line":"                                       \u0027description\u0027: \u0027foo\u0027,"},{"line_number":683,"context_line":"                                       \u0027supported\u0027: [\u0027FAKE\u0027],"},{"line_number":684,"context_line":"                                       \u0027func\u0027: None}}"},{"line_number":685,"context_line":"        self.driver.vendor.vendor_routes \u003d fake_routes"},{"line_number":686,"context_line":"        self._start_service()"}],"source_content_type":"text/x-python","patch_set":7,"id":"5a890539_5781d1f9","line":683,"in_reply_to":"5a890539_10403d06","updated":"2014-11-14 11:55:32.000000000","message":"Done","commit_id":"1082f24e07df9b2341d966bed743245c5c9d9ffb"}]}
