)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"ea4e1e752837635983eb9938029988ae1c6c043c","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Adds SNMP power driver"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Add a new PowerDriver module for remote control of node power by enabling or disabling sockets on a rack power strip via SNMP."},{"line_number":10,"context_line":""},{"line_number":11,"context_line":"Implements: blueprint ironic-snmp-power-driver"},{"line_number":12,"context_line":"Change-Id: Ib16781eaa9737525c4d8a9231ecd9e72d7e2645e"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"fa98f980_da7d0be9","line":9,"updated":"2014-09-02 17:00:56.000000000","message":"please wrap it at 72 chars [1]\n\n[1] https://wiki.openstack.org/wiki/GitCommitMessages#Summary_of_GIT_commit_message_structure","commit_id":"0a49f57815983979ea250f8929b8dffcd3eb5336"},{"author":{"_account_id":10910,"name":"Stig Telfer","email":"stig.openstack@telfer.org","username":"stigtelfer"},"change_message_id":"791af7c598e7013609ac553ef14559372717fd6b","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Adds SNMP power driver"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Add a new PowerDriver module for remote control of node power by enabling or disabling sockets on a rack power strip via SNMP."},{"line_number":10,"context_line":""},{"line_number":11,"context_line":"Implements: blueprint ironic-snmp-power-driver"},{"line_number":12,"context_line":"Change-Id: Ib16781eaa9737525c4d8a9231ecd9e72d7e2645e"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"fa98f980_285fad42","line":9,"in_reply_to":"fa98f980_da7d0be9","updated":"2014-09-02 18:02:54.000000000","message":"Done, whoops","commit_id":"0a49f57815983979ea250f8929b8dffcd3eb5336"}],"doc/source/deploy/drivers.rst":[{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"c435807c780ca8d152b39f8b6fe28d916a4c7e66","unresolved":false,"context_lines":[{"line_number":16,"context_line":"SNMP"},{"line_number":17,"context_line":"----"},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"The SNMP power driver enables control of power distribution units of the type "},{"line_number":20,"context_line":"frequently found in data centre racks. PDUs frequently have a management "},{"line_number":21,"context_line":"ethernet interface and SNMP support enabling control of the power outlets."},{"line_number":22,"context_line":""}],"source_content_type":"text/x-rst","patch_set":2,"id":"fa98f980_906a5bb1","line":19,"updated":"2014-09-03 14:20:05.000000000","message":"please get rid of trailing whitespaces here and below","commit_id":"c688baa984c185cf9b74e0687db2009231f37aef"}],"ironic/drivers/modules/snmp.py":[{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"ea4e1e752837635983eb9938029988ae1c6c043c","unresolved":false,"context_lines":[{"line_number":67,"context_line":"SNMP_V1 \u003d \u00271\u0027"},{"line_number":68,"context_line":"SNMP_V2C \u003d \u00272c\u0027"},{"line_number":69,"context_line":"SNMP_V3 \u003d \u00273\u0027"},{"line_number":70,"context_line":"SNMP_PORT \u003d 161"},{"line_number":71,"context_line":""},{"line_number":72,"context_line":"REQUIRED_PROPERTIES \u003d {"},{"line_number":73,"context_line":"    \u0027snmp_driver\u0027: _(\"PDU manufacturer driver.  Required.\"),"}],"source_content_type":"text/x-python","patch_set":1,"id":"fa98f980_7a597f59","line":70,"updated":"2014-09-02 17:00:56.000000000","message":"the SNMP port can be configured right? I know the default is 161 but if another protocol or service is using the 161 can we change it?\n\nIf so, I would think that it\u0027s good to add a config option for that and default it to 161","commit_id":"0a49f57815983979ea250f8929b8dffcd3eb5336"},{"author":{"_account_id":10910,"name":"Stig Telfer","email":"stig.openstack@telfer.org","username":"stigtelfer"},"change_message_id":"791af7c598e7013609ac553ef14559372717fd6b","unresolved":false,"context_lines":[{"line_number":67,"context_line":"SNMP_V1 \u003d \u00271\u0027"},{"line_number":68,"context_line":"SNMP_V2C \u003d \u00272c\u0027"},{"line_number":69,"context_line":"SNMP_V3 \u003d \u00273\u0027"},{"line_number":70,"context_line":"SNMP_PORT \u003d 161"},{"line_number":71,"context_line":""},{"line_number":72,"context_line":"REQUIRED_PROPERTIES \u003d {"},{"line_number":73,"context_line":"    \u0027snmp_driver\u0027: _(\"PDU manufacturer driver.  Required.\"),"}],"source_content_type":"text/x-python","patch_set":1,"id":"fa98f980_a861dd3a","line":70,"in_reply_to":"fa98f980_7a597f59","updated":"2014-09-02 18:02:54.000000000","message":"In theory yes, we could use a different port.  However, the firmware on the market leading PDU (APC) does not appear to support non-standard SNMP ports.\n\nShould I still proceed with making it configurable?","commit_id":"0a49f57815983979ea250f8929b8dffcd3eb5336"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"2e5bfc80eab627a8644e8d30b7936d4e176ebb9a","unresolved":false,"context_lines":[{"line_number":67,"context_line":"SNMP_V1 \u003d \u00271\u0027"},{"line_number":68,"context_line":"SNMP_V2C \u003d \u00272c\u0027"},{"line_number":69,"context_line":"SNMP_V3 \u003d \u00273\u0027"},{"line_number":70,"context_line":"SNMP_PORT \u003d 161"},{"line_number":71,"context_line":""},{"line_number":72,"context_line":"REQUIRED_PROPERTIES \u003d {"},{"line_number":73,"context_line":"    \u0027snmp_driver\u0027: _(\"PDU manufacturer driver.  Required.\"),"}],"source_content_type":"text/x-python","patch_set":1,"id":"fa98f980_7356ec5d","line":70,"in_reply_to":"fa98f980_7b309ee8","updated":"2014-09-03 09:35:09.000000000","message":"agreed with Jay. Yeah let\u0027s make it configurable","commit_id":"0a49f57815983979ea250f8929b8dffcd3eb5336"},{"author":{"_account_id":10342,"name":"Jay Faulkner","display_name":"JayF","email":"jay@jvf.cc","username":"JayF","status":"youtube.com/@oss-gr / podcast.gr-oss.io"},"change_message_id":"48c2fc0533bb0b62df541a62b9a926b8b340a379","unresolved":false,"context_lines":[{"line_number":67,"context_line":"SNMP_V1 \u003d \u00271\u0027"},{"line_number":68,"context_line":"SNMP_V2C \u003d \u00272c\u0027"},{"line_number":69,"context_line":"SNMP_V3 \u003d \u00273\u0027"},{"line_number":70,"context_line":"SNMP_PORT \u003d 161"},{"line_number":71,"context_line":""},{"line_number":72,"context_line":"REQUIRED_PROPERTIES \u003d {"},{"line_number":73,"context_line":"    \u0027snmp_driver\u0027: _(\"PDU manufacturer driver.  Required.\"),"}],"source_content_type":"text/x-python","patch_set":1,"id":"fa98f980_7b309ee8","line":70,"in_reply_to":"fa98f980_a861dd3a","updated":"2014-09-02 19:01:49.000000000","message":"Yes - there are other PDUs and ways to proxy SNMP traffic. Lets make this configurable.","commit_id":"0a49f57815983979ea250f8929b8dffcd3eb5336"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"623fdc32cedb0488a3b3c44b370d20adc5e3ced5","unresolved":false,"context_lines":[{"line_number":256,"context_line":"        timer \u003d loopingcall.FixedIntervalLoopingCall(_poll_for_state,"},{"line_number":257,"context_line":"                                                     state)"},{"line_number":258,"context_line":"        timer.start(interval\u003dself.RETRY_INTERVAL).wait()"},{"line_number":259,"context_line":"        LOG.debug(_(\"power state \u0027%s\u0027\"), str(state[\"state\"]))"},{"line_number":260,"context_line":"        return state[\"state\"]"},{"line_number":261,"context_line":""},{"line_number":262,"context_line":"    def power_state(self):"}],"source_content_type":"text/x-python","patch_set":1,"id":"fa98f980_7aab3f1d","line":259,"updated":"2014-09-02 17:00:27.000000000","message":"debug messages should not be translated","commit_id":"0a49f57815983979ea250f8929b8dffcd3eb5336"},{"author":{"_account_id":10910,"name":"Stig Telfer","email":"stig.openstack@telfer.org","username":"stigtelfer"},"change_message_id":"791af7c598e7013609ac553ef14559372717fd6b","unresolved":false,"context_lines":[{"line_number":256,"context_line":"        timer \u003d loopingcall.FixedIntervalLoopingCall(_poll_for_state,"},{"line_number":257,"context_line":"                                                     state)"},{"line_number":258,"context_line":"        timer.start(interval\u003dself.RETRY_INTERVAL).wait()"},{"line_number":259,"context_line":"        LOG.debug(_(\"power state \u0027%s\u0027\"), str(state[\"state\"]))"},{"line_number":260,"context_line":"        return state[\"state\"]"},{"line_number":261,"context_line":""},{"line_number":262,"context_line":"    def power_state(self):"}],"source_content_type":"text/x-python","patch_set":1,"id":"fa98f980_2855ed4f","line":259,"in_reply_to":"fa98f980_7aab3f1d","updated":"2014-09-02 18:02:54.000000000","message":"Done","commit_id":"0a49f57815983979ea250f8929b8dffcd3eb5336"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"623fdc32cedb0488a3b3c44b370d20adc5e3ced5","unresolved":false,"context_lines":[{"line_number":300,"context_line":"        return power_result"},{"line_number":301,"context_line":""},{"line_number":302,"context_line":""},{"line_number":303,"context_line":"@six.add_metaclass(abc.ABCMeta)"},{"line_number":304,"context_line":"class SNMPDriverSimple(SNMPDriverBase):"},{"line_number":305,"context_line":"    \"\"\"SNMP driver base class for simple PDU devices."},{"line_number":306,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"fa98f980_fa6e4f00","line":303,"updated":"2014-09-02 17:00:27.000000000","message":"I suspect it\u0027s not required, as base class has this metaclass","commit_id":"0a49f57815983979ea250f8929b8dffcd3eb5336"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"623fdc32cedb0488a3b3c44b370d20adc5e3ced5","unresolved":false,"context_lines":[{"line_number":317,"context_line":"        self.OID \u003d self._snmp_oid()"},{"line_number":318,"context_line":""},{"line_number":319,"context_line":"    @abc.abstractproperty"},{"line_number":320,"context_line":"    def OID_DEVICE(self):"},{"line_number":321,"context_line":"        \"\"\"Device dependent portion of the power state object OID.\"\"\""},{"line_number":322,"context_line":""},{"line_number":323,"context_line":"    @abc.abstractproperty"}],"source_content_type":"text/x-python","patch_set":1,"id":"fa98f980_9a7d43b4","line":320,"updated":"2014-09-02 17:00:27.000000000","message":"properties should be lower-case","commit_id":"0a49f57815983979ea250f8929b8dffcd3eb5336"},{"author":{"_account_id":10910,"name":"Stig Telfer","email":"stig.openstack@telfer.org","username":"stigtelfer"},"change_message_id":"791af7c598e7013609ac553ef14559372717fd6b","unresolved":false,"context_lines":[{"line_number":317,"context_line":"        self.OID \u003d self._snmp_oid()"},{"line_number":318,"context_line":""},{"line_number":319,"context_line":"    @abc.abstractproperty"},{"line_number":320,"context_line":"    def OID_DEVICE(self):"},{"line_number":321,"context_line":"        \"\"\"Device dependent portion of the power state object OID.\"\"\""},{"line_number":322,"context_line":""},{"line_number":323,"context_line":"    @abc.abstractproperty"}],"source_content_type":"text/x-python","patch_set":1,"id":"fa98f980_68ab751d","line":320,"in_reply_to":"fa98f980_9a7d43b4","updated":"2014-09-02 18:02:54.000000000","message":"Done","commit_id":"0a49f57815983979ea250f8929b8dffcd3eb5336"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"623fdc32cedb0488a3b3c44b370d20adc5e3ced5","unresolved":false,"context_lines":[{"line_number":321,"context_line":"        \"\"\"Device dependent portion of the power state object OID.\"\"\""},{"line_number":322,"context_line":""},{"line_number":323,"context_line":"    @abc.abstractproperty"},{"line_number":324,"context_line":"    def VALUE_POWER_ON(self):"},{"line_number":325,"context_line":"        \"\"\"Value representing power on state.\"\"\""},{"line_number":326,"context_line":""},{"line_number":327,"context_line":"    @abc.abstractproperty"}],"source_content_type":"text/x-python","patch_set":1,"id":"fa98f980_ba4be785","line":324,"updated":"2014-09-02 17:00:27.000000000","message":"ditto","commit_id":"0a49f57815983979ea250f8929b8dffcd3eb5336"},{"author":{"_account_id":10910,"name":"Stig Telfer","email":"stig.openstack@telfer.org","username":"stigtelfer"},"change_message_id":"791af7c598e7013609ac553ef14559372717fd6b","unresolved":false,"context_lines":[{"line_number":321,"context_line":"        \"\"\"Device dependent portion of the power state object OID.\"\"\""},{"line_number":322,"context_line":""},{"line_number":323,"context_line":"    @abc.abstractproperty"},{"line_number":324,"context_line":"    def VALUE_POWER_ON(self):"},{"line_number":325,"context_line":"        \"\"\"Value representing power on state.\"\"\""},{"line_number":326,"context_line":""},{"line_number":327,"context_line":"    @abc.abstractproperty"}],"source_content_type":"text/x-python","patch_set":1,"id":"fa98f980_a8647d22","line":324,"in_reply_to":"fa98f980_ba4be785","updated":"2014-09-02 18:02:54.000000000","message":"Done","commit_id":"0a49f57815983979ea250f8929b8dffcd3eb5336"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"623fdc32cedb0488a3b3c44b370d20adc5e3ced5","unresolved":false,"context_lines":[{"line_number":325,"context_line":"        \"\"\"Value representing power on state.\"\"\""},{"line_number":326,"context_line":""},{"line_number":327,"context_line":"    @abc.abstractproperty"},{"line_number":328,"context_line":"    def VALUE_POWER_OFF(self):"},{"line_number":329,"context_line":"        \"\"\"Value representing power off state.\"\"\""},{"line_number":330,"context_line":""},{"line_number":331,"context_line":"    def _snmp_oid(self):"}],"source_content_type":"text/x-python","patch_set":1,"id":"fa98f980_fa456f70","line":328,"updated":"2014-09-02 17:00:27.000000000","message":"ditto","commit_id":"0a49f57815983979ea250f8929b8dffcd3eb5336"},{"author":{"_account_id":10910,"name":"Stig Telfer","email":"stig.openstack@telfer.org","username":"stigtelfer"},"change_message_id":"791af7c598e7013609ac553ef14559372717fd6b","unresolved":false,"context_lines":[{"line_number":325,"context_line":"        \"\"\"Value representing power on state.\"\"\""},{"line_number":326,"context_line":""},{"line_number":327,"context_line":"    @abc.abstractproperty"},{"line_number":328,"context_line":"    def VALUE_POWER_OFF(self):"},{"line_number":329,"context_line":"        \"\"\"Value representing power off state.\"\"\""},{"line_number":330,"context_line":""},{"line_number":331,"context_line":"    def _snmp_oid(self):"}],"source_content_type":"text/x-python","patch_set":1,"id":"fa98f980_e86e8500","line":328,"in_reply_to":"fa98f980_fa456f70","updated":"2014-09-02 18:02:54.000000000","message":"Done","commit_id":"0a49f57815983979ea250f8929b8dffcd3eb5336"}],"ironic/drivers/pxe.py":[{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"ea4e1e752837635983eb9938029988ae1c6c043c","unresolved":false,"context_lines":[{"line_number":166,"context_line":"    those respective classes; this class is merely the glue between them."},{"line_number":167,"context_line":"    \"\"\""},{"line_number":168,"context_line":""},{"line_number":169,"context_line":"    def __init__(self):"},{"line_number":170,"context_line":"        self.power \u003d snmp.SNMPPower()"},{"line_number":171,"context_line":"        self.deploy \u003d pxe.PXEDeploy()"},{"line_number":172,"context_line":"        self.vendor \u003d pxe.VendorPassthru()"}],"source_content_type":"text/x-python","patch_set":1,"id":"fa98f980_babda76a","line":169,"updated":"2014-09-02 17:00:56.000000000","message":"This driver depends on an external lib \u0027pysnmp\u0027 and will fail if the lib is not present in the system, please make it fail at load time in that case, e.g:\n\n def __init__(self):\n     if not importutils.try_import(\u0027pysnmp\u0027):\n         raise exception.DriverLoadError(\n              driver\u003dself.__class__.__name__,\n              reason\u003d_(\"Unable to import pysnmp library\"))\n     self.power \u003d ...\n     ...","commit_id":"0a49f57815983979ea250f8929b8dffcd3eb5336"},{"author":{"_account_id":10910,"name":"Stig Telfer","email":"stig.openstack@telfer.org","username":"stigtelfer"},"change_message_id":"791af7c598e7013609ac553ef14559372717fd6b","unresolved":false,"context_lines":[{"line_number":166,"context_line":"    those respective classes; this class is merely the glue between them."},{"line_number":167,"context_line":"    \"\"\""},{"line_number":168,"context_line":""},{"line_number":169,"context_line":"    def __init__(self):"},{"line_number":170,"context_line":"        self.power \u003d snmp.SNMPPower()"},{"line_number":171,"context_line":"        self.deploy \u003d pxe.PXEDeploy()"},{"line_number":172,"context_line":"        self.vendor \u003d pxe.VendorPassthru()"}],"source_content_type":"text/x-python","patch_set":1,"id":"fa98f980_23fa6ebd","line":169,"in_reply_to":"fa98f980_babda76a","updated":"2014-09-02 18:02:54.000000000","message":"Done","commit_id":"0a49f57815983979ea250f8929b8dffcd3eb5336"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"623fdc32cedb0488a3b3c44b370d20adc5e3ced5","unresolved":false,"context_lines":[{"line_number":169,"context_line":"    def __init__(self):"},{"line_number":170,"context_line":"        self.power \u003d snmp.SNMPPower()"},{"line_number":171,"context_line":"        self.deploy \u003d pxe.PXEDeploy()"},{"line_number":172,"context_line":"        self.vendor \u003d pxe.VendorPassthru()"}],"source_content_type":"text/x-python","patch_set":1,"id":"fa98f980_3a0d373f","line":172,"updated":"2014-09-02 17:00:27.000000000","message":"Not sure but IIRC management interface may be required for PXE deploy","commit_id":"0a49f57815983979ea250f8929b8dffcd3eb5336"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"639ab263ddb852ded98409049615e0cdc9171949","unresolved":false,"context_lines":[{"line_number":169,"context_line":"    def __init__(self):"},{"line_number":170,"context_line":"        self.power \u003d snmp.SNMPPower()"},{"line_number":171,"context_line":"        self.deploy \u003d pxe.PXEDeploy()"},{"line_number":172,"context_line":"        self.vendor \u003d pxe.VendorPassthru()"}],"source_content_type":"text/x-python","patch_set":1,"id":"fa98f980_3dc5318e","line":172,"in_reply_to":"fa98f980_3a0d373f","updated":"2014-09-02 17:05:24.000000000","message":"PXE will try to set the boot device to PXE _if_ the management interface is present, if not it just do nothing (no-op)[1]\n\n\n[1] https://github.com/openstack/ironic/blob/master/ironic/conductor/utils.py#L27-L43","commit_id":"0a49f57815983979ea250f8929b8dffcd3eb5336"}],"ironic/tests/drivers/test_snmp.py":[{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"623fdc32cedb0488a3b3c44b370d20adc5e3ced5","unresolved":false,"context_lines":[{"line_number":225,"context_line":"        # Patch eventlet to avoid sleeping"},{"line_number":226,"context_line":"        sleep_patcher \u003d mock.patch(\u0027eventlet.greenthread.sleep\u0027)"},{"line_number":227,"context_line":"        sleep_patcher.start()"},{"line_number":228,"context_line":"        self.addCleanup(sleep_patcher.stop)"},{"line_number":229,"context_line":""},{"line_number":230,"context_line":"        # Patch rfc1902 module"},{"line_number":231,"context_line":"        rfc1902_patcher \u003d mock.patch.object(snmp, \u0027rfc1902\u0027)"}],"source_content_type":"text/x-python","patch_set":1,"id":"fa98f980_9d19bd7b","line":228,"updated":"2014-09-02 17:00:27.000000000","message":"please don\u0027t use addCleanup with mocks, set mocks either via @decorators (better) or via context managers","commit_id":"0a49f57815983979ea250f8929b8dffcd3eb5336"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"623fdc32cedb0488a3b3c44b370d20adc5e3ced5","unresolved":false,"context_lines":[{"line_number":230,"context_line":"        # Patch rfc1902 module"},{"line_number":231,"context_line":"        rfc1902_patcher \u003d mock.patch.object(snmp, \u0027rfc1902\u0027)"},{"line_number":232,"context_line":"        rfc1902_mock \u003d rfc1902_patcher.start()"},{"line_number":233,"context_line":"        self.addCleanup(rfc1902_patcher.stop)"},{"line_number":234,"context_line":"        rfc1902_mock.Integer \u003d int"},{"line_number":235,"context_line":""},{"line_number":236,"context_line":"        # Use a fake SNMP client"}],"source_content_type":"text/x-python","patch_set":1,"id":"fa98f980_dd2a657d","line":233,"updated":"2014-09-02 17:00:27.000000000","message":"ditto","commit_id":"0a49f57815983979ea250f8929b8dffcd3eb5336"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"623fdc32cedb0488a3b3c44b370d20adc5e3ced5","unresolved":false,"context_lines":[{"line_number":238,"context_line":"        get_client_patcher \u003d mock.patch.object(snmp, \u0027_get_client\u0027,"},{"line_number":239,"context_line":"                                               autospec\u003dTrue)"},{"line_number":240,"context_line":"        get_client_mock \u003d get_client_patcher.start()"},{"line_number":241,"context_line":"        self.addCleanup(get_client_patcher.stop)"},{"line_number":242,"context_line":"        get_client_mock.return_value \u003d self.client_mock"},{"line_number":243,"context_line":""},{"line_number":244,"context_line":"    def _get_snmp_failure(self):"}],"source_content_type":"text/x-python","patch_set":1,"id":"fa98f980_1d25cdaa","line":241,"updated":"2014-09-02 17:00:27.000000000","message":"ditto","commit_id":"0a49f57815983979ea250f8929b8dffcd3eb5336"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"623fdc32cedb0488a3b3c44b370d20adc5e3ced5","unresolved":false,"context_lines":[{"line_number":545,"context_line":"        calls \u003d [mock.call(driver._snmp_oid()), mock.call(driver._snmp_oid())]"},{"line_number":546,"context_line":"        self.client_mock.get.assert_has_calls(calls)"},{"line_number":547,"context_line":""},{"line_number":548,"context_line":"    def _test_simple_device(self, driver):"},{"line_number":549,"context_line":"        # Run through basic tests - get, set, reboot - as a base level"},{"line_number":550,"context_line":"        # validation for a simple (single SNMP object) device."},{"line_number":551,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"fa98f980_9d47fd4a","line":548,"updated":"2014-09-02 17:00:27.000000000","message":"this test should be split (using reset_mock is a good sign)","commit_id":"0a49f57815983979ea250f8929b8dffcd3eb5336"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"623fdc32cedb0488a3b3c44b370d20adc5e3ced5","unresolved":false,"context_lines":[{"line_number":638,"context_line":""},{"line_number":639,"context_line":"        self._test_simple_device(driver)"},{"line_number":640,"context_line":""},{"line_number":641,"context_line":"    def test_eaton_power(self):"},{"line_number":642,"context_line":"        info \u003d db_utils.get_test_snmp_info(snmp_driver\u003d\"eatonpower\","},{"line_number":643,"context_line":"                                           snmp_outlet\u003d\"3\")"},{"line_number":644,"context_line":"        self.node[\"driver_info\"] \u003d info"}],"source_content_type":"text/x-python","patch_set":1,"id":"fa98f980_dd51850f","line":641,"updated":"2014-09-02 17:00:27.000000000","message":"this test should be split","commit_id":"0a49f57815983979ea250f8929b8dffcd3eb5336"}]}
