)]}'
{"openstack_requirements/tests/test_integration.py":[{"author":{"_account_id":4190,"name":"lifeless","email":"robertc@robertcollins.net","username":"lifeless"},"change_message_id":"41c7b82b0a2613a12d9391ad9bbc4837c5383162","unresolved":false,"context_lines":[{"line_number":50,"context_line":"                return True"},{"line_number":51,"context_line":"            tested.append(constraint.specifiers)"},{"line_number":52,"context_line":"        print(\u0027Constraint for %s\u003d\u003d%s does not match %s\u0027 %"},{"line_number":53,"context_line":"              (name, version, tested))"},{"line_number":54,"context_line":"        return False"},{"line_number":55,"context_line":"    for pkg_constraints in constraints.values():"},{"line_number":56,"context_line":"        for constraint, _ in pkg_constraints:"}],"source_content_type":"text/x-python","patch_set":3,"id":"3a50d1a3_9c5665cd","line":53,"updated":"2015-07-23 19:40:27.000000000","message":"Please don\u0027t mix IO here - it makes the test suite problematic to run locally - just put this in failures - which the old code does. This function was pure, and printing can be done elsewhere.","commit_id":"43a876b678a6bd889500414c3c7c6d69aeb2c719"},{"author":{"_account_id":4190,"name":"lifeless","email":"robertc@robertcollins.net","username":"lifeless"},"change_message_id":"41c7b82b0a2613a12d9391ad9bbc4837c5383162","unresolved":false,"context_lines":[{"line_number":67,"context_line":"        super(TestRequirements, self).setUp()"},{"line_number":68,"context_line":"        self._stdout_fixture \u003d fixtures.StringStream(\u0027stdout\u0027)"},{"line_number":69,"context_line":"        self.stdout \u003d self.useFixture(self._stdout_fixture).stream"},{"line_number":70,"context_line":"        self.useFixture(fixtures.MonkeyPatch(\u0027sys.stdout\u0027, self.stdout))"},{"line_number":71,"context_line":""},{"line_number":72,"context_line":"    def test_constraints_format(self):"},{"line_number":73,"context_line":"        errors \u003d 0"}],"source_content_type":"text/x-python","patch_set":3,"id":"3a50d1a3_3cff11ac","line":70,"updated":"2015-07-23 19:40:27.000000000","message":"This breaks interactive debugging of tests - please don\u0027t add these in. They exist solely to workaround code that can\u0027t be indirected sanely in other ways.","commit_id":"43a876b678a6bd889500414c3c7c6d69aeb2c719"},{"author":{"_account_id":4190,"name":"lifeless","email":"robertc@robertcollins.net","username":"lifeless"},"change_message_id":"41c7b82b0a2613a12d9391ad9bbc4837c5383162","unresolved":false,"context_lines":[{"line_number":78,"context_line":"            if not spec.startswith(\u0027\u003d\u003d\u003d\u0027):"},{"line_number":79,"context_line":"                print("},{"line_number":80,"context_line":"                    \u0027Invalid constraint line %d %r, does not have 3 \"\u003d\"\u0027 %"},{"line_number":81,"context_line":"                    (n, line)"},{"line_number":82,"context_line":"                )"},{"line_number":83,"context_line":"                errors +\u003d 1"},{"line_number":84,"context_line":"        if errors:"}],"source_content_type":"text/x-python","patch_set":3,"id":"3a50d1a3_9cdbc54f","line":81,"updated":"2015-07-23 19:40:27.000000000","message":"print() in a test is fairly much against the unitest API -  better to accumulate a set of errors and the do\n\nself.fail(\u0027...\u0027 + \u0027\u0027.join(errors))\n\nIf you want the output as a separate thing, do self.addDetail(\u0027badlines.txt\u0027, testtools.content.text_content(\u0027\u0027.join(errors))","commit_id":"43a876b678a6bd889500414c3c7c6d69aeb2c719"},{"author":{"_account_id":4190,"name":"lifeless","email":"robertc@robertcollins.net","username":"lifeless"},"change_message_id":"41c7b82b0a2613a12d9391ad9bbc4837c5383162","unresolved":false,"context_lines":[{"line_number":98,"context_line":"        super(TestCheckCompatible, self).setUp()"},{"line_number":99,"context_line":"        self._stdout_fixture \u003d fixtures.StringStream(\u0027stdout\u0027)"},{"line_number":100,"context_line":"        self.stdout \u003d self.useFixture(self._stdout_fixture).stream"},{"line_number":101,"context_line":"        self.useFixture(fixtures.MonkeyPatch(\u0027sys.stdout\u0027, self.stdout))"},{"line_number":102,"context_line":""},{"line_number":103,"context_line":"    def test_non_requirement(self):"},{"line_number":104,"context_line":"        global_reqs \u003d {}"}],"source_content_type":"text/x-python","patch_set":3,"id":"3a50d1a3_fca449ba","line":101,"updated":"2015-07-23 19:40:27.000000000","message":"Ditto.","commit_id":"43a876b678a6bd889500414c3c7c6d69aeb2c719"}],"openstack_requirements/tests/test_requirement.py":[{"author":{"_account_id":4190,"name":"lifeless","email":"robertc@robertcollins.net","username":"lifeless"},"change_message_id":"1a31856c3bb8164c76a4995b6edaffb260d9ab5d","unresolved":false,"context_lines":[{"line_number":135,"context_line":"            [\u0027oslo.config\u003e\u003d1.11.0     # Apache-2.0\u0027,"},{"line_number":136,"context_line":"             \u0027oslo.concurrency\u003e\u003d2.3.0 # Apache-2.0\u0027,"},{"line_number":137,"context_line":"             \u0027oslo.context\u003e\u003d0.2.0     # Apache-2.0\u0027]"},{"line_number":138,"context_line":"        )"},{"line_number":139,"context_line":"        reqs \u003d requirement.parse(content)"},{"line_number":140,"context_line":"        self.assertEqual("},{"line_number":141,"context_line":"            set([\u0027oslo.config\u0027, \u0027oslo.concurrency\u0027, \u0027oslo.context\u0027]),"}],"source_content_type":"text/x-python","patch_set":3,"id":"3a50d1a3_dcdb8d20","line":138,"updated":"2015-07-23 19:42:57.000000000","message":"This is easier to read using the dedent pattern other tests in this repo use:\n\n content \u003d textwrap.dedent(\"\"\"\\\n     oslo.config\u003e\u003d1.11.0     # Apache-2.0\n     oslo.concurrency\u003e\u003d2.3.0 # Apache-2.0\n     oslo.context\u003e\u003d0.2.0     # Apache-2.0\n     \"\"\")","commit_id":"43a876b678a6bd889500414c3c7c6d69aeb2c719"},{"author":{"_account_id":2472,"name":"Doug Hellmann","email":"dhellmann@redhat.com","username":"doug-hellmann"},"change_message_id":"b36e28f5930f5b37ac0277dfa78611036728dbc6","unresolved":false,"context_lines":[{"line_number":135,"context_line":"            [\u0027oslo.config\u003e\u003d1.11.0     # Apache-2.0\u0027,"},{"line_number":136,"context_line":"             \u0027oslo.concurrency\u003e\u003d2.3.0 # Apache-2.0\u0027,"},{"line_number":137,"context_line":"             \u0027oslo.context\u003e\u003d0.2.0     # Apache-2.0\u0027]"},{"line_number":138,"context_line":"        )"},{"line_number":139,"context_line":"        reqs \u003d requirement.parse(content)"},{"line_number":140,"context_line":"        self.assertEqual("},{"line_number":141,"context_line":"            set([\u0027oslo.config\u0027, \u0027oslo.concurrency\u0027, \u0027oslo.context\u0027]),"}],"source_content_type":"text/x-python","patch_set":3,"id":"3a50d1a3_052f58f7","line":138,"in_reply_to":"3a50d1a3_dcdb8d20","updated":"2015-07-23 20:50:45.000000000","message":"Done in https://review.openstack.org/205293","commit_id":"43a876b678a6bd889500414c3c7c6d69aeb2c719"}]}
