)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":12356,"name":"Vladyslav Drok","email":"vdrok@mirantis.com","username":"vdrok"},"change_message_id":"39ff94da6c738ccea8f42fb95e0276596aaf3a57","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     Tan Lin \u003ctan.lin.good@gmail.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2014-11-13 23:22:58 +0800"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Add driver_validate()"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Change-Id: Idff802cece01940b8ade34fa343f1bc8e76f1630"},{"line_number":10,"context_line":"Closes-Bug: #1391580"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"5a890539_e0093ade","line":7,"updated":"2014-11-13 13:09:14.000000000","message":"Please be more specific about where and why do you add it.","commit_id":"7278a1b2cd3682778cee7c1cf3c1142ef25746de"}],"ironic/conductor/manager.py":[{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"a6119f98b45b99e4ef3440794412c78a1a5c8280","unresolved":false,"context_lines":[{"line_number":512,"context_line":"        # expects a task object as the first parameter and in this"},{"line_number":513,"context_line":"        # method we don\u0027t have it because we don\u0027t have a Node to"},{"line_number":514,"context_line":"        # acquire."},{"line_number":515,"context_line":"        # See: https://bugs.launchpad.net/ironic/+bug/1391580"},{"line_number":516,"context_line":""},{"line_number":517,"context_line":"        # Invoke the vendor method accordingly with the mode"},{"line_number":518,"context_line":"        is_async \u003d vendor_opts[\u0027async\u0027]"}],"source_content_type":"text/x-python","patch_set":1,"id":"5a890539_1d3a3136","line":515,"updated":"2014-11-13 12:55:29.000000000","message":"You can get rid of this FIXME code :)","commit_id":"7278a1b2cd3682778cee7c1cf3c1142ef25746de"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"25bc1fef319db5af92c8d11fac3c403b35f9fdc1","unresolved":false,"context_lines":[{"line_number":510,"context_line":"        # Invoke the vendor method accordingly with the mode"},{"line_number":511,"context_line":"        is_async \u003d vendor_opts[\u0027async\u0027]"},{"line_number":512,"context_line":"        ret \u003d None"},{"line_number":513,"context_line":"        driver.vendor.driver_validate(method\u003ddriver_method, **info)"},{"line_number":514,"context_line":""},{"line_number":515,"context_line":"        if is_async:"},{"line_number":516,"context_line":"            self._spawn_worker(vendor_func, context, **info)"}],"source_content_type":"text/x-python","patch_set":2,"id":"5a890539_c7b219e4","line":513,"updated":"2014-11-18 10:22:04.000000000","message":"I would like to see a method testing a negative scenario for this on the conductor side, something like[1], for e.g, at test_manager.py:\n\n @mock.patch(drivers_base.VendorInterface, \u0027driver_validate\u0027)\n def test_driver_vendor_passthru_validation_fail(self, validate_mock):\n     validate_mock.side_effect \u003d exception.MissingParameterValue()\n     ...\n\n[1] https://github.com/openstack/ironic/blob/master/ironic/tests/conductor/test_manager.py#L577","commit_id":"6d37e99499c7aafbbc6f166deecc2a4926c7069a"}],"ironic/drivers/base.py":[{"author":{"_account_id":7711,"name":"Yuriy Zveryanskyy","email":"yzveryanskyy@mirantis.com","username":"yuriyz"},"change_message_id":"d2e851e82186a3dd8f76d16f9bdaa354d02583cb","unresolved":false,"context_lines":[{"line_number":472,"context_line":"        \"\"\""},{"line_number":473,"context_line":""},{"line_number":474,"context_line":"    def driver_validate(self, **kwargs):"},{"line_number":475,"context_line":"        \"\"\"Validate vendor-specific actions."},{"line_number":476,"context_line":""},{"line_number":477,"context_line":"        If invalid, raises an exception; otherwise returns None."},{"line_number":478,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"5a890539_60caaa6f","line":475,"updated":"2014-11-13 13:13:54.000000000","message":"Please specify here that this method is intended for driver_vendor_passthru.","commit_id":"7278a1b2cd3682778cee7c1cf3c1142ef25746de"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"a6119f98b45b99e4ef3440794412c78a1a5c8280","unresolved":false,"context_lines":[{"line_number":481,"context_line":"                 certain parameter."},{"line_number":482,"context_line":"        :raises: InvalidParameterValue if parameter does not match."},{"line_number":483,"context_line":"        \"\"\""},{"line_number":484,"context_line":""},{"line_number":485,"context_line":""},{"line_number":486,"context_line":"@six.add_metaclass(abc.ABCMeta)"},{"line_number":487,"context_line":"class ManagementInterface(object):"}],"source_content_type":"text/x-python","patch_set":1,"id":"5a890539_9d1c61c3","line":484,"updated":"2014-11-13 12:55:29.000000000","message":"If not an @abstractmethod I think you need some implementation here, maybe just \"pass\" would be enough\n\n(I\u0027m ok not making it an @abstractmethod as well because it may break backward compat)","commit_id":"7278a1b2cd3682778cee7c1cf3c1142ef25746de"},{"author":{"_account_id":7711,"name":"Yuriy Zveryanskyy","email":"yzveryanskyy@mirantis.com","username":"yuriyz"},"change_message_id":"3216971166324119527cc34c92193d9bac4ae3bb","unresolved":false,"context_lines":[{"line_number":481,"context_line":"                 certain parameter."},{"line_number":482,"context_line":"        :raises: InvalidParameterValue if parameter does not match."},{"line_number":483,"context_line":"        \"\"\""},{"line_number":484,"context_line":""},{"line_number":485,"context_line":""},{"line_number":486,"context_line":"@six.add_metaclass(abc.ABCMeta)"},{"line_number":487,"context_line":"class ManagementInterface(object):"}],"source_content_type":"text/x-python","patch_set":1,"id":"5a890539_ebf4bbf3","line":484,"in_reply_to":"5a890539_009ba667","updated":"2014-11-13 13:28:41.000000000","message":"for Lucas","commit_id":"7278a1b2cd3682778cee7c1cf3c1142ef25746de"},{"author":{"_account_id":7711,"name":"Yuriy Zveryanskyy","email":"yzveryanskyy@mirantis.com","username":"yuriyz"},"change_message_id":"d2e851e82186a3dd8f76d16f9bdaa354d02583cb","unresolved":false,"context_lines":[{"line_number":481,"context_line":"                 certain parameter."},{"line_number":482,"context_line":"        :raises: InvalidParameterValue if parameter does not match."},{"line_number":483,"context_line":"        \"\"\""},{"line_number":484,"context_line":""},{"line_number":485,"context_line":""},{"line_number":486,"context_line":"@six.add_metaclass(abc.ABCMeta)"},{"line_number":487,"context_line":"class ManagementInterface(object):"}],"source_content_type":"text/x-python","patch_set":1,"id":"5a890539_009ba667","line":484,"in_reply_to":"5a890539_9d1c61c3","updated":"2014-11-13 13:13:54.000000000","message":"+1","commit_id":"7278a1b2cd3682778cee7c1cf3c1142ef25746de"},{"author":{"_account_id":12356,"name":"Vladyslav Drok","email":"vdrok@mirantis.com","username":"vdrok"},"change_message_id":"39ff94da6c738ccea8f42fb95e0276596aaf3a57","unresolved":false,"context_lines":[{"line_number":481,"context_line":"                 certain parameter."},{"line_number":482,"context_line":"        :raises: InvalidParameterValue if parameter does not match."},{"line_number":483,"context_line":"        \"\"\""},{"line_number":484,"context_line":""},{"line_number":485,"context_line":""},{"line_number":486,"context_line":"@six.add_metaclass(abc.ABCMeta)"},{"line_number":487,"context_line":"class ManagementInterface(object):"}],"source_content_type":"text/x-python","patch_set":1,"id":"5a890539_005ac6f2","line":484,"in_reply_to":"5a890539_9d1c61c3","updated":"2014-11-13 13:09:14.000000000","message":"IIRC docstring is an implementation already.","commit_id":"7278a1b2cd3682778cee7c1cf3c1142ef25746de"},{"author":{"_account_id":7711,"name":"Yuriy Zveryanskyy","email":"yzveryanskyy@mirantis.com","username":"yuriyz"},"change_message_id":"2112aaeca4fd8ceb33d1707dd025da64884d71d5","unresolved":false,"context_lines":[{"line_number":481,"context_line":"                 certain parameter."},{"line_number":482,"context_line":"        :raises: InvalidParameterValue if parameter does not match."},{"line_number":483,"context_line":"        \"\"\""},{"line_number":484,"context_line":""},{"line_number":485,"context_line":""},{"line_number":486,"context_line":"@six.add_metaclass(abc.ABCMeta)"},{"line_number":487,"context_line":"class ManagementInterface(object):"}],"source_content_type":"text/x-python","patch_set":1,"id":"5a890539_86a6ce51","line":484,"in_reply_to":"5a890539_ebf4bbf3","updated":"2014-11-13 14:07:32.000000000","message":"Maybe a good idea add log warning here.","commit_id":"7278a1b2cd3682778cee7c1cf3c1142ef25746de"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"f5e07541573495b2952740a7422689619b22873a","unresolved":false,"context_lines":[{"line_number":481,"context_line":"        :raises: MissingParameterValue"},{"line_number":482,"context_line":"        \"\"\""},{"line_number":483,"context_line":""},{"line_number":484,"context_line":"    def driver_validate(self, **kwargs):"},{"line_number":485,"context_line":"        \"\"\"Validate driver-vendor-passthru actions."},{"line_number":486,"context_line":""},{"line_number":487,"context_line":"        If invalid, raises an exception; otherwise returns None."}],"source_content_type":"text/x-python","patch_set":4,"id":"5a890539_fad5b4b9","line":484,"updated":"2014-11-19 15:51:58.000000000","message":"should be:\n\n def driver_validate(self, method, **kwargs):","commit_id":"a4d3629de5784899d39f957c0f6cbc28287ce40e"},{"author":{"_account_id":7711,"name":"Yuriy Zveryanskyy","email":"yzveryanskyy@mirantis.com","username":"yuriyz"},"change_message_id":"64e8373227a852a893a5e811902b5bde465c2509","unresolved":false,"context_lines":[{"line_number":481,"context_line":"        :raises: MissingParameterValue"},{"line_number":482,"context_line":"        \"\"\""},{"line_number":483,"context_line":""},{"line_number":484,"context_line":"    def driver_validate(self, **kwargs):"},{"line_number":485,"context_line":"        \"\"\"Validate driver-vendor-passthru actions."},{"line_number":486,"context_line":""},{"line_number":487,"context_line":"        If invalid, raises an exception; otherwise returns None."}],"source_content_type":"text/x-python","patch_set":4,"id":"5a890539_b0d42d48","line":484,"in_reply_to":"5a890539_7ded3eef","updated":"2014-11-19 16:27:01.000000000","message":"+1","commit_id":"a4d3629de5784899d39f957c0f6cbc28287ce40e"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"80625ba66951ad61cf9fa01ee1b612f0425e3b87","unresolved":false,"context_lines":[{"line_number":481,"context_line":"        :raises: MissingParameterValue"},{"line_number":482,"context_line":"        \"\"\""},{"line_number":483,"context_line":""},{"line_number":484,"context_line":"    def driver_validate(self, **kwargs):"},{"line_number":485,"context_line":"        \"\"\"Validate driver-vendor-passthru actions."},{"line_number":486,"context_line":""},{"line_number":487,"context_line":"        If invalid, raises an exception; otherwise returns None."}],"source_content_type":"text/x-python","patch_set":4,"id":"5a890539_7ded3eef","line":484,"in_reply_to":"5a890539_dd5712c9","updated":"2014-11-19 16:11:17.000000000","message":"then l471 should be fixed IMO. kwargs is not designed for mandatory arguments","commit_id":"a4d3629de5784899d39f957c0f6cbc28287ce40e"},{"author":{"_account_id":7711,"name":"Yuriy Zveryanskyy","email":"yzveryanskyy@mirantis.com","username":"yuriyz"},"change_message_id":"2d88034ead02ad4c19ef399f1319eff7582ceb4c","unresolved":false,"context_lines":[{"line_number":481,"context_line":"        :raises: MissingParameterValue"},{"line_number":482,"context_line":"        \"\"\""},{"line_number":483,"context_line":""},{"line_number":484,"context_line":"    def driver_validate(self, **kwargs):"},{"line_number":485,"context_line":"        \"\"\"Validate driver-vendor-passthru actions."},{"line_number":486,"context_line":""},{"line_number":487,"context_line":"        If invalid, raises an exception; otherwise returns None."}],"source_content_type":"text/x-python","patch_set":4,"id":"5a890539_dd5712c9","line":484,"in_reply_to":"5a890539_fad5b4b9","updated":"2014-11-19 16:05:36.000000000","message":"Maybe it is for consistency with l471 (method in kwargs).","commit_id":"a4d3629de5784899d39f957c0f6cbc28287ce40e"}],"ironic/drivers/modules/agent.py":[{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"a6119f98b45b99e4ef3440794412c78a1a5c8280","unresolved":false,"context_lines":[{"line_number":341,"context_line":"        if version not in self.supported_payload_versions:"},{"line_number":342,"context_line":"            raise exception.InvalidParameterValue(_(\u0027Unknown lookup payload \u0027"},{"line_number":343,"context_line":"                                                    \u0027version: %s\u0027) % version)"},{"line_number":344,"context_line":""},{"line_number":345,"context_line":"    @base.passthru()"},{"line_number":346,"context_line":"    def heartbeat(self, task, **kwargs):"},{"line_number":347,"context_line":"        \"\"\"Method for agent to periodically check in."}],"source_content_type":"text/x-python","patch_set":1,"id":"5a890539_9d4aa1aa","line":344,"updated":"2014-11-13 12:55:29.000000000","message":"Is \"version\" required for all the driver methods? It seems that it\u0027s specific for lookup(), so I think it would be nice to distinguish by methods here. Just like the normal validate() does","commit_id":"7278a1b2cd3682778cee7c1cf3c1142ef25746de"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"25bc1fef319db5af92c8d11fac3c403b35f9fdc1","unresolved":false,"context_lines":[{"line_number":333,"context_line":""},{"line_number":334,"context_line":"        No validation necessary."},{"line_number":335,"context_line":"        \"\"\""},{"line_number":336,"context_line":"        pass"},{"line_number":337,"context_line":""},{"line_number":338,"context_line":"    @base.passthru()"},{"line_number":339,"context_line":"    def heartbeat(self, task, **kwargs):"}],"source_content_type":"text/x-python","patch_set":2,"id":"5a890539_27bd9d02","line":336,"updated":"2014-11-18 10:22:04.000000000","message":"If no validation is required we don\u0027t need to overwrite the base implementation","commit_id":"6d37e99499c7aafbbc6f166deecc2a4926c7069a"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"6db5525b2711ea4a933896c1a6eb0294381e4eb9","unresolved":false,"context_lines":[{"line_number":331,"context_line":"    def driver_validate(self, method, **kwargs):"},{"line_number":332,"context_line":"        \"\"\"Validate the driver deployment info."},{"line_number":333,"context_line":""},{"line_number":334,"context_line":"        \"\"\""},{"line_number":335,"context_line":"        if method \u003d\u003d \u0027lookup\u0027:"},{"line_number":336,"context_line":"            version \u003d kwargs.get(\u0027version\u0027)"},{"line_number":337,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"5a890539_b4296639","line":334,"updated":"2014-11-20 09:42:28.000000000","message":"nit: missing parameters. Or if you want to keep it a 1 line string it should close the triple quotes at the same line (as per PEP 257)","commit_id":"89a3706e898575e120878a7763e6849b722f669b"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"6db5525b2711ea4a933896c1a6eb0294381e4eb9","unresolved":false,"context_lines":[{"line_number":345,"context_line":"        else:"},{"line_number":346,"context_line":"            raise exception.InvalidParameterValue(_("},{"line_number":347,"context_line":"                    \u0027Unsupported method %s passed to Agent driver.\u0027)"},{"line_number":348,"context_line":"                    % method)"},{"line_number":349,"context_line":""},{"line_number":350,"context_line":"    @base.passthru([\u0027POST\u0027])"},{"line_number":351,"context_line":"    def heartbeat(self, task, **kwargs):"}],"source_content_type":"text/x-python","patch_set":5,"id":"5a890539_74d61e29","line":348,"updated":"2014-11-20 09:42:28.000000000","message":"if...else block not needed. Testing whether the method exists or not lives in the manager.py (see L523 in manager.py). \n\n(if not needed because there\u0027s only one method)","commit_id":"89a3706e898575e120878a7763e6849b722f669b"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"411680062ae8ebed080f072eb543a3781a2e6c04","unresolved":false,"context_lines":[{"line_number":331,"context_line":"    def driver_validate(self, method, **kwargs):"},{"line_number":332,"context_line":"        \"\"\"Validate the driver deployment info."},{"line_number":333,"context_line":""},{"line_number":334,"context_line":"        :param method: method to be validated."},{"line_number":335,"context_line":"        \"\"\""},{"line_number":336,"context_line":"        version \u003d kwargs.get(\u0027version\u0027)"},{"line_number":337,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"5a890539_07375cb1","line":334,"updated":"2014-11-20 15:43:13.000000000","message":"nit: raises","commit_id":"d0e7bd2973dd5ec03544b55965c805926d210eb7"}],"ironic/tests/conductor/test_manager.py":[{"author":{"_account_id":7711,"name":"Yuriy Zveryanskyy","email":"yzveryanskyy@mirantis.com","username":"yuriyz"},"change_message_id":"d0f76ea0e8d2a3efe8fbb6885729edd06a4d8cf3","unresolved":false,"context_lines":[{"line_number":845,"context_line":"    def test_driver_vendor_passthru_validation_failed(self, validate_mock):"},{"line_number":846,"context_line":"        validate_mock.side_effect \u003d exception.MissingParameterValue(\u0027error\u0027)"},{"line_number":847,"context_line":"        self.assertRaises(exception.MissingParameterValue,"},{"line_number":848,"context_line":"                          self.driver.vendor.driver_validate)"},{"line_number":849,"context_line":""},{"line_number":850,"context_line":""},{"line_number":851,"context_line":"@_mock_record_keepalive"}],"source_content_type":"text/x-python","patch_set":4,"id":"5a890539_5abde801","line":848,"updated":"2014-11-19 15:51:12.000000000","message":"You should call driver_vendor_passthru() here.","commit_id":"a4d3629de5784899d39f957c0f6cbc28287ce40e"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"6db5525b2711ea4a933896c1a6eb0294381e4eb9","unresolved":false,"context_lines":[{"line_number":846,"context_line":"        validate_mock.side_effect \u003d exception.MissingParameterValue(\u0027error\u0027)"},{"line_number":847,"context_line":"        test_method \u003d mock.Mock()"},{"line_number":848,"context_line":"        self.driver.vendor.driver_routes \u003d {\u0027test_method\u0027:"},{"line_number":849,"context_line":"                                           {\u0027func\u0027: test_method,"},{"line_number":850,"context_line":"                                            \u0027async\u0027: False,"},{"line_number":851,"context_line":"                                            \u0027http_methods\u0027: [\u0027POST\u0027]}}"},{"line_number":852,"context_line":"        self.service.init_host()"}],"source_content_type":"text/x-python","patch_set":5,"id":"5a890539_d4f8b2c6","line":849,"updated":"2014-11-20 09:42:28.000000000","message":"nit: test_method variable is just used here, but it doesn\u0027t do anything. Perhaps verifying that it haven\u0027t been called since driver_validate() failed would be good. E.g\n\n self.assertFalse(test_method.called)","commit_id":"89a3706e898575e120878a7763e6849b722f669b"}],"ironic/tests/drivers/test_agent.py":[{"author":{"_account_id":12356,"name":"Vladyslav Drok","email":"vdrok@mirantis.com","username":"vdrok"},"change_message_id":"39ff94da6c738ccea8f42fb95e0276596aaf3a57","unresolved":false,"context_lines":[{"line_number":141,"context_line":""},{"line_number":142,"context_line":"    def test_driver_validate_exception(self):"},{"line_number":143,"context_line":"        kwargs \u003d {\u0027version\u0027: \u00271\u0027}"},{"line_number":144,"context_line":"        self.supported_payload_versions \u003d [\u00272\u0027]"},{"line_number":145,"context_line":"        self.assertRaises(exception.InvalidParameterValue,"},{"line_number":146,"context_line":"                          self.passthru.driver_validate,"},{"line_number":147,"context_line":"                          **kwargs)"}],"source_content_type":"text/x-python","patch_set":1,"id":"5a890539_404cce42","line":144,"updated":"2014-11-13 13:09:14.000000000","message":"It is already set to this value.","commit_id":"7278a1b2cd3682778cee7c1cf3c1142ef25746de"},{"author":{"_account_id":7711,"name":"Yuriy Zveryanskyy","email":"yzveryanskyy@mirantis.com","username":"yuriyz"},"change_message_id":"d0f76ea0e8d2a3efe8fbb6885729edd06a4d8cf3","unresolved":false,"context_lines":[{"line_number":135,"context_line":"        with task_manager.acquire(self.context, self.node.uuid) as task:"},{"line_number":136,"context_line":"            self.passthru.validate(task)"},{"line_number":137,"context_line":""},{"line_number":138,"context_line":"    def test_driver_validate(self):"},{"line_number":139,"context_line":"        self.passthru.driver_validate()"},{"line_number":140,"context_line":""},{"line_number":141,"context_line":"    @mock.patch(\u0027ironic.common.image_service.Service\u0027)"}],"source_content_type":"text/x-python","patch_set":4,"id":"5a890539_3a69fc25","line":138,"updated":"2014-11-19 15:51:12.000000000","message":"This method does not test anything IMO.","commit_id":"a4d3629de5784899d39f957c0f6cbc28287ce40e"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"f5e07541573495b2952740a7422689619b22873a","unresolved":false,"context_lines":[{"line_number":135,"context_line":"        with task_manager.acquire(self.context, self.node.uuid) as task:"},{"line_number":136,"context_line":"            self.passthru.validate(task)"},{"line_number":137,"context_line":""},{"line_number":138,"context_line":"    def test_driver_validate(self):"},{"line_number":139,"context_line":"        self.passthru.driver_validate()"},{"line_number":140,"context_line":""},{"line_number":141,"context_line":"    @mock.patch(\u0027ironic.common.image_service.Service\u0027)"}],"source_content_type":"text/x-python","patch_set":4,"id":"5a890539_9aed9091","line":138,"in_reply_to":"5a890539_3a69fc25","updated":"2014-11-19 15:51:58.000000000","message":"+1","commit_id":"a4d3629de5784899d39f957c0f6cbc28287ce40e"}]}
