)]}'
{"lower-constraints.txt":[{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"867a3abe48b5e2d7effd08e0367090fb8f209c50","unresolved":false,"context_lines":[{"line_number":12,"context_line":"cliff\u003d\u003d2.11.0"},{"line_number":13,"context_line":"cmd2\u003d\u003d0.8.1"},{"line_number":14,"context_line":"colorama\u003d\u003d0.3.9"},{"line_number":15,"context_line":"contextlib2\u003d\u003d0.5.5;python_version\u003d\u003d\u00272.7\u0027"},{"line_number":16,"context_line":"coverage\u003d\u003d4.0"},{"line_number":17,"context_line":"cryptography\u003d\u003d2.1.4"},{"line_number":18,"context_line":"cursive\u003d\u003d0.2.1"}],"source_content_type":"text/plain","patch_set":9,"id":"bfb3d3c7_edf1dd6c","line":15,"updated":"2019-05-24 13:44:08.000000000","message":"this matches requirements/upper-constraints.txt ✔","commit_id":"4b119141fe120a5d34ef5cba30e3a23502988a45"},{"author":{"_account_id":6547,"name":"Andreas Jaeger","email":"jaegerandi@gmail.com","username":"jaegerandi"},"change_message_id":"9d985f6aec2fc8e1b6e68eef16fb2e89be27bfae","unresolved":false,"context_lines":[{"line_number":12,"context_line":"cliff\u003d\u003d2.11.0"},{"line_number":13,"context_line":"cmd2\u003d\u003d0.8.1"},{"line_number":14,"context_line":"colorama\u003d\u003d0.3.9"},{"line_number":15,"context_line":"contextlib2\u003d\u003d0.5.5;python_version\u003d\u003d\u00272.7\u0027"},{"line_number":16,"context_line":"coverage\u003d\u003d4.0"},{"line_number":17,"context_line":"cryptography\u003d\u003d2.1.4"},{"line_number":18,"context_line":"cursive\u003d\u003d0.2.1"}],"source_content_type":"text/plain","patch_set":9,"id":"bfb3d3c7_b57b2779","line":15,"in_reply_to":"bfb3d3c7_edf1dd6c","updated":"2019-05-24 15:20:38.000000000","message":"This is 0.5.5 - so, test-requirements needs a change with\n\n\"contextlib2\u003e\u003d0.5.5\"","commit_id":"4b119141fe120a5d34ef5cba30e3a23502988a45"}],"nova/test.py":[{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"1cfe9b103d61cffcefd9a6356b47fd7b9566a067","unresolved":false,"context_lines":[{"line_number":380,"context_line":"        self.useFixture(fixtures.MonkeyPatch(old, new))"},{"line_number":381,"context_line":""},{"line_number":382,"context_line":"    @contextlib.contextmanager"},{"line_number":383,"context_line":"    def patch_exists(self, patched_path, result):"},{"line_number":384,"context_line":"        real_exists \u003d os.path.exists"},{"line_number":385,"context_line":""},{"line_number":386,"context_line":"        def fake_exists(path):"}],"source_content_type":"text/x-python","patch_set":1,"id":"bfb3d3c7_da1dea73","line":383,"range":{"start_line":383,"start_character":21,"end_line":383,"end_character":25},"updated":"2019-05-21 20:46:00.000000000","message":"Since `self` isn\u0027t being used, this could be moved to the module level.\n\nThen again, tests inheriting from TestCase indirectly would need an extra import.\n\nThen again again, this would probably be more appropriate as a fixture anyway.\n\nThen again again again\n\n with self.useFixture(fixtures.PatchExists(\u0027/some/path\u0027, True)):\n\nis pretty verbose and slightly unpretty compared to\n\n with self.patch_exists(\u0027/some/path\u0027, True):\n\nSo TL;DR: leave this where it is and ignore my ramblings.\n\nBut you could still make it @staticmethod if you wanted.","commit_id":"fa8eb47f3ce4124c5546fc61b272879273517778"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"7ec294856b00d2fb165584cc3408d2e3c9e7bfa1","unresolved":false,"context_lines":[{"line_number":379,"context_line":"        \"\"\""},{"line_number":380,"context_line":"        self.useFixture(fixtures.MonkeyPatch(old, new))"},{"line_number":381,"context_line":""},{"line_number":382,"context_line":"    @classmethod"},{"line_number":383,"context_line":"    def patch_exists(cls, patched_path, result):"},{"line_number":384,"context_line":"        \"\"\"Provide a class method version of patch_exists() which is easier to"},{"line_number":385,"context_line":"        use as a context manager within a test method via:"}],"source_content_type":"text/x-python","patch_set":3,"id":"bfb3d3c7_c45ac8f1","line":382,"range":{"start_line":382,"start_character":4,"end_line":382,"end_character":16},"updated":"2019-05-23 14:36:20.000000000","message":"any reason this couldn\u0027t be @staticmethod ?","commit_id":"3d8f8cac611e8435d8be59ec50b9a46870bd5b87"},{"author":{"_account_id":2394,"name":"Adam Spiers","email":"aspiers@suse.com","username":"adam.spiers"},"change_message_id":"ae16edcdc2c4e57f8dee8314241afe2c011908c8","unresolved":false,"context_lines":[{"line_number":379,"context_line":"        \"\"\""},{"line_number":380,"context_line":"        self.useFixture(fixtures.MonkeyPatch(old, new))"},{"line_number":381,"context_line":""},{"line_number":382,"context_line":"    @classmethod"},{"line_number":383,"context_line":"    def patch_exists(cls, patched_path, result):"},{"line_number":384,"context_line":"        \"\"\"Provide a class method version of patch_exists() which is easier to"},{"line_number":385,"context_line":"        use as a context manager within a test method via:"}],"source_content_type":"text/x-python","patch_set":3,"id":"bfb3d3c7_c43ba8e8","line":382,"range":{"start_line":382,"start_character":4,"end_line":382,"end_character":16},"in_reply_to":"bfb3d3c7_c45ac8f1","updated":"2019-05-23 14:57:13.000000000","message":"Done","commit_id":"3d8f8cac611e8435d8be59ec50b9a46870bd5b87"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"7ec294856b00d2fb165584cc3408d2e3c9e7bfa1","unresolved":false,"context_lines":[{"line_number":381,"context_line":""},{"line_number":382,"context_line":"    @classmethod"},{"line_number":383,"context_line":"    def patch_exists(cls, patched_path, result):"},{"line_number":384,"context_line":"        \"\"\"Provide a class method version of patch_exists() which is easier to"},{"line_number":385,"context_line":"        use as a context manager within a test method via:"},{"line_number":386,"context_line":""},{"line_number":387,"context_line":"            def test_something(self):"},{"line_number":388,"context_line":"                with self.patch_exists(path, True):"}],"source_content_type":"text/x-python","patch_set":3,"id":"bfb3d3c7_04078084","line":385,"range":{"start_line":384,"start_character":60,"end_line":385,"end_character":32},"updated":"2019-05-23 14:36:20.000000000","message":"nit: I\u0027m supportive of including this as a @staticmethod so modules with nested-inherited TestCase classes don\u0027t have to add an extra import, but\n\n self.patch_exists\n\nis only easier than\n\n test.patch_exists\n\nif you haven\u0027t already imported test.","commit_id":"3d8f8cac611e8435d8be59ec50b9a46870bd5b87"},{"author":{"_account_id":2394,"name":"Adam Spiers","email":"aspiers@suse.com","username":"adam.spiers"},"change_message_id":"ae16edcdc2c4e57f8dee8314241afe2c011908c8","unresolved":false,"context_lines":[{"line_number":381,"context_line":""},{"line_number":382,"context_line":"    @classmethod"},{"line_number":383,"context_line":"    def patch_exists(cls, patched_path, result):"},{"line_number":384,"context_line":"        \"\"\"Provide a class method version of patch_exists() which is easier to"},{"line_number":385,"context_line":"        use as a context manager within a test method via:"},{"line_number":386,"context_line":""},{"line_number":387,"context_line":"            def test_something(self):"},{"line_number":388,"context_line":"                with self.patch_exists(path, True):"}],"source_content_type":"text/x-python","patch_set":3,"id":"bfb3d3c7_642afc90","line":385,"range":{"start_line":384,"start_character":60,"end_line":385,"end_character":32},"in_reply_to":"bfb3d3c7_04078084","updated":"2019-05-23 14:57:13.000000000","message":"Done","commit_id":"3d8f8cac611e8435d8be59ec50b9a46870bd5b87"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"7ec294856b00d2fb165584cc3408d2e3c9e7bfa1","unresolved":false,"context_lines":[{"line_number":782,"context_line":"    patched_path, return result.  Calls with any other path are passed"},{"line_number":783,"context_line":"    through to the real os.path.exists() function."},{"line_number":784,"context_line":""},{"line_number":785,"context_line":"    Either import and use as a decorator, or use the"},{"line_number":786,"context_line":"    nova.TestCase.patch_exists class method as a context manager."},{"line_number":787,"context_line":"    \"\"\""},{"line_number":788,"context_line":"    real_exists \u003d os.path.exists"},{"line_number":789,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"bfb3d3c7_8474d069","line":786,"range":{"start_line":785,"start_character":42,"end_line":786,"end_character":43},"updated":"2019-05-23 14:36:20.000000000","message":"could just use this module-level method as a cm too, right?\n\n[Later] yeah, as you demonstrate in your tests","commit_id":"3d8f8cac611e8435d8be59ec50b9a46870bd5b87"},{"author":{"_account_id":2394,"name":"Adam Spiers","email":"aspiers@suse.com","username":"adam.spiers"},"change_message_id":"ae16edcdc2c4e57f8dee8314241afe2c011908c8","unresolved":false,"context_lines":[{"line_number":782,"context_line":"    patched_path, return result.  Calls with any other path are passed"},{"line_number":783,"context_line":"    through to the real os.path.exists() function."},{"line_number":784,"context_line":""},{"line_number":785,"context_line":"    Either import and use as a decorator, or use the"},{"line_number":786,"context_line":"    nova.TestCase.patch_exists class method as a context manager."},{"line_number":787,"context_line":"    \"\"\""},{"line_number":788,"context_line":"    real_exists \u003d os.path.exists"},{"line_number":789,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"bfb3d3c7_4408182b","line":786,"range":{"start_line":785,"start_character":42,"end_line":786,"end_character":43},"in_reply_to":"bfb3d3c7_8474d069","updated":"2019-05-23 14:57:13.000000000","message":"Done","commit_id":"3d8f8cac611e8435d8be59ec50b9a46870bd5b87"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"867a3abe48b5e2d7effd08e0367090fb8f209c50","unresolved":false,"context_lines":[{"line_number":67,"context_line":"from nova.virt import images"},{"line_number":68,"context_line":""},{"line_number":69,"context_line":"if six.PY2:"},{"line_number":70,"context_line":"    import contextlib2 as contextlib"},{"line_number":71,"context_line":"else:"},{"line_number":72,"context_line":"    import contextlib"},{"line_number":73,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"bfb3d3c7_cd5e5975","line":70,"range":{"start_line":70,"start_character":0,"end_line":70,"end_character":36},"updated":"2019-05-24 13:44:08.000000000","message":"no six.moves for this, boo","commit_id":"4b119141fe120a5d34ef5cba30e3a23502988a45"},{"author":{"_account_id":2394,"name":"Adam Spiers","email":"aspiers@suse.com","username":"adam.spiers"},"change_message_id":"326498aea251ae2baae27af248fbf8fdda0a1186","unresolved":false,"context_lines":[{"line_number":67,"context_line":"from nova.virt import images"},{"line_number":68,"context_line":""},{"line_number":69,"context_line":"if six.PY2:"},{"line_number":70,"context_line":"    import contextlib2 as contextlib"},{"line_number":71,"context_line":"else:"},{"line_number":72,"context_line":"    import contextlib"},{"line_number":73,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"bfb3d3c7_6271770c","line":70,"range":{"start_line":70,"start_character":0,"end_line":70,"end_character":36},"in_reply_to":"bfb3d3c7_cd5e5975","updated":"2019-05-24 15:01:10.000000000","message":"Sadly not, no (I did check).","commit_id":"4b119141fe120a5d34ef5cba30e3a23502988a45"}],"nova/tests/unit/test_test.py":[{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"7ec294856b00d2fb165584cc3408d2e3c9e7bfa1","unresolved":false,"context_lines":[{"line_number":16,"context_line":""},{"line_number":17,"context_line":"\"\"\"Tests for the testing base code.\"\"\""},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"import mock"},{"line_number":20,"context_line":"import os.path"},{"line_number":21,"context_line":"import six"},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"from oslo_log import log as logging"},{"line_number":24,"context_line":"import oslo_messaging as messaging"}],"source_content_type":"text/x-python","patch_set":3,"id":"bfb3d3c7_04bd40d7","line":21,"range":{"start_line":19,"start_character":0,"end_line":21,"end_character":10},"updated":"2019-05-23 14:36:20.000000000","message":"pretty sure mock and six are third party, so should be in the next block","commit_id":"3d8f8cac611e8435d8be59ec50b9a46870bd5b87"},{"author":{"_account_id":2394,"name":"Adam Spiers","email":"aspiers@suse.com","username":"adam.spiers"},"change_message_id":"ae16edcdc2c4e57f8dee8314241afe2c011908c8","unresolved":false,"context_lines":[{"line_number":16,"context_line":""},{"line_number":17,"context_line":"\"\"\"Tests for the testing base code.\"\"\""},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"import mock"},{"line_number":20,"context_line":"import os.path"},{"line_number":21,"context_line":"import six"},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"from oslo_log import log as logging"},{"line_number":24,"context_line":"import oslo_messaging as messaging"}],"source_content_type":"text/x-python","patch_set":3,"id":"bfb3d3c7_a70eb62f","line":21,"range":{"start_line":19,"start_character":0,"end_line":21,"end_character":10},"in_reply_to":"bfb3d3c7_04bd40d7","updated":"2019-05-23 14:57:13.000000000","message":"Done","commit_id":"3d8f8cac611e8435d8be59ec50b9a46870bd5b87"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"7ec294856b00d2fb165584cc3408d2e3c9e7bfa1","unresolved":false,"context_lines":[{"line_number":27,"context_line":"from nova import exception"},{"line_number":28,"context_line":"from nova import rpc"},{"line_number":29,"context_line":"from nova import test"},{"line_number":30,"context_line":"from nova.test import patch_exists"},{"line_number":31,"context_line":"from nova.tests import fixtures"},{"line_number":32,"context_line":""},{"line_number":33,"context_line":"LOG \u003d logging.getLogger(__name__)"}],"source_content_type":"text/x-python","patch_set":3,"id":"bfb3d3c7_64175cef","line":30,"range":{"start_line":30,"start_character":0,"end_line":30,"end_character":34},"updated":"2019-05-23 14:36:20.000000000","message":"Maybe I\u0027m thinking of a sonar rule from a previous life, but aren\u0027t we supposed to avoid importing non-modules?\n\nJust as easy to leave this out and decorate as\n\n @test.patch_exists(...)\n\nbelow.","commit_id":"3d8f8cac611e8435d8be59ec50b9a46870bd5b87"},{"author":{"_account_id":2394,"name":"Adam Spiers","email":"aspiers@suse.com","username":"adam.spiers"},"change_message_id":"ae16edcdc2c4e57f8dee8314241afe2c011908c8","unresolved":false,"context_lines":[{"line_number":27,"context_line":"from nova import exception"},{"line_number":28,"context_line":"from nova import rpc"},{"line_number":29,"context_line":"from nova import test"},{"line_number":30,"context_line":"from nova.test import patch_exists"},{"line_number":31,"context_line":"from nova.tests import fixtures"},{"line_number":32,"context_line":""},{"line_number":33,"context_line":"LOG \u003d logging.getLogger(__name__)"}],"source_content_type":"text/x-python","patch_set":3,"id":"bfb3d3c7_a71d5610","line":30,"range":{"start_line":30,"start_character":0,"end_line":30,"end_character":34},"in_reply_to":"bfb3d3c7_64175cef","updated":"2019-05-23 14:57:13.000000000","message":"Done - I never heard of that rule, but I have no reason to disbelieve it either.","commit_id":"3d8f8cac611e8435d8be59ec50b9a46870bd5b87"},{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"73c05e0fe47bf05d2bfa98a2121f1ea6066cb626","unresolved":false,"context_lines":[{"line_number":326,"context_line":"        self.assertFalse(os.path.exists(\u0027fake_file\u0027))"},{"line_number":327,"context_line":"        with self.patch_exists(\u0027fake_file\u0027, True) as mock_exists:"},{"line_number":328,"context_line":"            self.assertTrue(os.path.exists(\u0027fake_file\u0027))"},{"line_number":329,"context_line":"            self.assertTrue(os.path.exists(__file__))"},{"line_number":330,"context_line":"            self.assertFalse(os.path.exists(\u0027non-existent/file\u0027))"},{"line_number":331,"context_line":"            self.assertIn(mock.call(\u0027fake_file\u0027), mock_exists.mock_calls)"},{"line_number":332,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"bfb3d3c7_0715429c","line":329,"updated":"2019-05-23 15:04:21.000000000","message":"nice","commit_id":"724adcbba23646c620356515c99b173ed8a55526"}],"nova/tests/unit/virt/libvirt/test_driver.py":[{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"3ae60e65f6465c3bd04b04a494e47d7430124f9f","unresolved":false,"context_lines":[{"line_number":18268,"context_line":"        with mock.patch.object(libvirt_driver.LibvirtDriver,"},{"line_number":18269,"context_line":"                               \"_get_host_sysinfo_serial_hardware\") \\"},{"line_number":18270,"context_line":"                as mock_uuid:"},{"line_number":18271,"context_line":"            mock_uuid.return_value \u003d self.theuuid"},{"line_number":18272,"context_line":""},{"line_number":18273,"context_line":"            self._test_get_guest_config_sysinfo_serial(self.theuuid)"},{"line_number":18274,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"bfb3d3c7_1538f3ec","line":18271,"range":{"start_line":18271,"start_character":37,"end_line":18271,"end_character":49},"updated":"2019-05-24 15:51:41.000000000","message":"this could be replaced with uuids.machine_id but this is unrelated to the goal of this change.","commit_id":"f0edbff6f2d5f1c6dc5c6e0b63eeba3d1d8057bb"}],"test-requirements.txt":[{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"867a3abe48b5e2d7effd08e0367090fb8f209c50","unresolved":false,"context_lines":[{"line_number":3,"context_line":"# process, which may cause wedges in the gate later."},{"line_number":4,"context_line":""},{"line_number":5,"context_line":"hacking\u003e\u003d1.1.0,\u003c1.2.0 # Apache-2.0"},{"line_number":6,"context_line":"contextlib2;python_version\u003c\u00273.0\u0027  # PSF License"},{"line_number":7,"context_line":"coverage!\u003d4.4,\u003e\u003d4.0 # Apache-2.0"},{"line_number":8,"context_line":"ddt\u003e\u003d1.0.1 # MIT"},{"line_number":9,"context_line":"fixtures\u003e\u003d3.0.0 # Apache-2.0/BSD"}],"source_content_type":"text/plain","patch_set":9,"id":"bfb3d3c7_2dfb7547","line":6,"updated":"2019-05-24 13:44:08.000000000","message":"why isn\u0027t this one the same as the one in lower-constraints.txt?","commit_id":"4b119141fe120a5d34ef5cba30e3a23502988a45"},{"author":{"_account_id":6547,"name":"Andreas Jaeger","email":"jaegerandi@gmail.com","username":"jaegerandi"},"change_message_id":"9d985f6aec2fc8e1b6e68eef16fb2e89be27bfae","unresolved":false,"context_lines":[{"line_number":3,"context_line":"# process, which may cause wedges in the gate later."},{"line_number":4,"context_line":""},{"line_number":5,"context_line":"hacking\u003e\u003d1.1.0,\u003c1.2.0 # Apache-2.0"},{"line_number":6,"context_line":"contextlib2;python_version\u003c\u00273.0\u0027  # PSF License"},{"line_number":7,"context_line":"coverage!\u003d4.4,\u003e\u003d4.0 # Apache-2.0"},{"line_number":8,"context_line":"ddt\u003e\u003d1.0.1 # MIT"},{"line_number":9,"context_line":"fixtures\u003e\u003d3.0.0 # Apache-2.0/BSD"}],"source_content_type":"text/plain","patch_set":9,"id":"bfb3d3c7_558c2b7e","line":6,"in_reply_to":"bfb3d3c7_22ce1f2e","updated":"2019-05-24 15:20:38.000000000","message":"This needs to be:\n\n\"contextlib2\u003e\u003d0.5.5;python_version\u003c\u00273.0\u0027\" as Eric said.","commit_id":"4b119141fe120a5d34ef5cba30e3a23502988a45"},{"author":{"_account_id":2394,"name":"Adam Spiers","email":"aspiers@suse.com","username":"adam.spiers"},"change_message_id":"326498aea251ae2baae27af248fbf8fdda0a1186","unresolved":false,"context_lines":[{"line_number":3,"context_line":"# process, which may cause wedges in the gate later."},{"line_number":4,"context_line":""},{"line_number":5,"context_line":"hacking\u003e\u003d1.1.0,\u003c1.2.0 # Apache-2.0"},{"line_number":6,"context_line":"contextlib2;python_version\u003c\u00273.0\u0027  # PSF License"},{"line_number":7,"context_line":"coverage!\u003d4.4,\u003e\u003d4.0 # Apache-2.0"},{"line_number":8,"context_line":"ddt\u003e\u003d1.0.1 # MIT"},{"line_number":9,"context_line":"fixtures\u003e\u003d3.0.0 # Apache-2.0/BSD"}],"source_content_type":"text/plain","patch_set":9,"id":"bfb3d3c7_22ce1f2e","line":6,"in_reply_to":"bfb3d3c7_2dfb7547","updated":"2019-05-24 15:01:10.000000000","message":"I don\u0027t know - just following what the requirements expert told me to do ... http://eavesdrop.openstack.org/irclogs/%23openstack-requirements/%23openstack-requirements.2019-05-24.log.html#t2019-05-24T11:51:09","commit_id":"4b119141fe120a5d34ef5cba30e3a23502988a45"},{"author":{"_account_id":2394,"name":"Adam Spiers","email":"aspiers@suse.com","username":"adam.spiers"},"change_message_id":"8336903c693ae765938529b5e10f84ad72c3d2fe","unresolved":false,"context_lines":[{"line_number":3,"context_line":"# process, which may cause wedges in the gate later."},{"line_number":4,"context_line":""},{"line_number":5,"context_line":"hacking\u003e\u003d1.1.0,\u003c1.2.0 # Apache-2.0"},{"line_number":6,"context_line":"contextlib2;python_version\u003c\u00273.0\u0027  # PSF License"},{"line_number":7,"context_line":"coverage!\u003d4.4,\u003e\u003d4.0 # Apache-2.0"},{"line_number":8,"context_line":"ddt\u003e\u003d1.0.1 # MIT"},{"line_number":9,"context_line":"fixtures\u003e\u003d3.0.0 # Apache-2.0/BSD"}],"source_content_type":"text/plain","patch_set":9,"id":"bfb3d3c7_3552d7df","line":6,"in_reply_to":"bfb3d3c7_558c2b7e","updated":"2019-05-24 15:24:57.000000000","message":"Done","commit_id":"4b119141fe120a5d34ef5cba30e3a23502988a45"}]}
