)]}'
{"tests/base.py":[{"author":{"_account_id":16068,"name":"Tobias Henkel","email":"tobias.henkel@bmw.de","username":"tobias.henkel"},"change_message_id":"c0e2d8ed1a04fc04d4bf90ef06e7852ff42e2e53","unresolved":false,"context_lines":[{"line_number":182,"context_line":"    # Set up gerrit related fakes"},{"line_number":183,"context_line":"    # Set a changes database so multiple FakeGerrit\u0027s can report back to"},{"line_number":184,"context_line":"    # a virtual canonical database given by the configured hostname"},{"line_number":185,"context_line":"    gerrit_changes_dbs \u003d {}"},{"line_number":186,"context_line":"    github_changes_dbs \u003d {}"},{"line_number":187,"context_line":"    pagure_changes_dbs \u003d {}"},{"line_number":188,"context_line":"    gitlab_changes_dbs \u003d {}"},{"line_number":189,"context_line":""},{"line_number":190,"context_line":""},{"line_number":191,"context_line":"class GerritDriverMock(GerritDriver):"}],"source_content_type":"text/x-python","patch_set":5,"id":"1fa4df85_bf31c25b","line":188,"range":{"start_line":185,"start_character":0,"end_line":188,"end_character":27},"updated":"2020-03-19 16:32:19.000000000","message":"This need to be initialized in __init__.","commit_id":"cac6ca6643c1889c311bbee5bbdebf18107a982c"},{"author":{"_account_id":16068,"name":"Tobias Henkel","email":"tobias.henkel@bmw.de","username":"tobias.henkel"},"change_message_id":"3e6e4e99f22995c325e478895dc41c8f66ca2a62","unresolved":false,"context_lines":[{"line_number":180,"context_line":""},{"line_number":181,"context_line":""},{"line_number":182,"context_line":"class ChangesDatabase:"},{"line_number":183,"context_line":"    # Set up gerrit related fakes"},{"line_number":184,"context_line":"    # Set a changes database so multiple FakeGerrit\u0027s can report back to"},{"line_number":185,"context_line":"    # a virtual canonical database given by the configured hostname"},{"line_number":186,"context_line":""}],"source_content_type":"text/x-python","patch_set":20,"id":"bf51134e_741c4cc1","line":183,"updated":"2020-08-05 11:54:19.000000000","message":"This comment doesn\u0027t seem to match.","commit_id":"a86d22ce4c0864fce9b40579f6c6190314e5e853"},{"author":{"_account_id":30637,"name":"Jan Kubovy","email":"jan.kubovy@bmw.de","username":"kubovy"},"change_message_id":"eb61deb1b58ca5a84428b7c8998b307bda431599","unresolved":false,"context_lines":[{"line_number":180,"context_line":""},{"line_number":181,"context_line":""},{"line_number":182,"context_line":"class ChangesDatabase:"},{"line_number":183,"context_line":"    # Set up gerrit related fakes"},{"line_number":184,"context_line":"    # Set a changes database so multiple FakeGerrit\u0027s can report back to"},{"line_number":185,"context_line":"    # a virtual canonical database given by the configured hostname"},{"line_number":186,"context_line":""}],"source_content_type":"text/x-python","patch_set":20,"id":"9f560f44_1fc88273","line":183,"in_reply_to":"bf51134e_741c4cc1","updated":"2020-09-30 16:00:26.000000000","message":"Done","commit_id":"a86d22ce4c0864fce9b40579f6c6190314e5e853"},{"author":{"_account_id":16068,"name":"Tobias Henkel","email":"tobias.henkel@bmw.de","username":"tobias.henkel"},"change_message_id":"3e6e4e99f22995c325e478895dc41c8f66ca2a62","unresolved":false,"context_lines":[{"line_number":2998,"context_line":"        super(RecordingExecutorServer, self).stopJob(job)"},{"line_number":2999,"context_line":""},{"line_number":3000,"context_line":"    def stop(self):"},{"line_number":3001,"context_line":"        self.connections.stop()"},{"line_number":3002,"context_line":"        for build in self.running_builds:"},{"line_number":3003,"context_line":"            build.release()"},{"line_number":3004,"context_line":"        super(RecordingExecutorServer, self).stop()"}],"source_content_type":"text/x-python","patch_set":21,"id":"9f560f44_95c86e22","line":3001,"updated":"2020-08-05 11:54:19.000000000","message":"Is this needed here? Since the executor has connections as well we may need to move this to the real executor?","commit_id":"07bade7559e38998a9ef9024d20acd516fb54681"},{"author":{"_account_id":30637,"name":"Jan Kubovy","email":"jan.kubovy@bmw.de","username":"kubovy"},"change_message_id":"eb61deb1b58ca5a84428b7c8998b307bda431599","unresolved":false,"context_lines":[{"line_number":2998,"context_line":"        super(RecordingExecutorServer, self).stopJob(job)"},{"line_number":2999,"context_line":""},{"line_number":3000,"context_line":"    def stop(self):"},{"line_number":3001,"context_line":"        self.connections.stop()"},{"line_number":3002,"context_line":"        for build in self.running_builds:"},{"line_number":3003,"context_line":"            build.release()"},{"line_number":3004,"context_line":"        super(RecordingExecutorServer, self).stop()"}],"source_content_type":"text/x-python","patch_set":21,"id":"9f560f44_d29f2100","line":3001,"in_reply_to":"9f560f44_95c86e22","updated":"2020-09-30 16:00:26.000000000","message":"Done","commit_id":"07bade7559e38998a9ef9024d20acd516fb54681"},{"author":{"_account_id":4146,"name":"Clark Boylan","email":"cboylan@sapwetik.org","username":"cboylan"},"change_message_id":"98c056c09eac1dddb27ebf79bfab62073b486ea5","unresolved":false,"context_lines":[{"line_number":204,"context_line":"        self.add_cleanup \u003d add_cleanup"},{"line_number":205,"context_line":""},{"line_number":206,"context_line":"    def getConnection(self, name, config):"},{"line_number":207,"context_line":"        db \u003d self.changes.gerrit_changes_dbs.setdefault(config[\u0027server\u0027], {})"},{"line_number":208,"context_line":"        poll_event \u003d self.poller_events.setdefault(name, threading.Event())"},{"line_number":209,"context_line":"        ref_event \u003d self.poller_events.setdefault(name + \u0027-ref\u0027,"},{"line_number":210,"context_line":"                                                  threading.Event())"}],"source_content_type":"text/x-python","patch_set":25,"id":"9f560f44_2fb021dd","line":207,"range":{"start_line":207,"start_character":45,"end_line":207,"end_character":55},"updated":"2020-08-24 20:32:36.000000000","message":"Is this setdefault necessary? The init method on the ChangesDatabase type sets a default value of {}.","commit_id":"a710b571fddf9c94bf4e81fce1ec419781755986"},{"author":{"_account_id":16068,"name":"Tobias Henkel","email":"tobias.henkel@bmw.de","username":"tobias.henkel"},"change_message_id":"13df829c8cc9a123c77a2b2218a7500a2fb96970","unresolved":false,"context_lines":[{"line_number":204,"context_line":"        self.add_cleanup \u003d add_cleanup"},{"line_number":205,"context_line":""},{"line_number":206,"context_line":"    def getConnection(self, name, config):"},{"line_number":207,"context_line":"        db \u003d self.changes.gerrit_changes_dbs.setdefault(config[\u0027server\u0027], {})"},{"line_number":208,"context_line":"        poll_event \u003d self.poller_events.setdefault(name, threading.Event())"},{"line_number":209,"context_line":"        ref_event \u003d self.poller_events.setdefault(name + \u0027-ref\u0027,"},{"line_number":210,"context_line":"                                                  threading.Event())"}],"source_content_type":"text/x-python","patch_set":25,"id":"9f560f44_53f5e083","line":207,"range":{"start_line":207,"start_character":45,"end_line":207,"end_character":55},"in_reply_to":"9f560f44_23eb1a78","updated":"2020-09-30 06:44:34.000000000","message":"I think there is a misunderstanding. Clark meant if this line is necessary at all. Yes it is necessary since the what is already initialized is the set of changes dbs (per gerrit server). This line creates the changes db for the specific server if necessary.\n\nIf we want to make this nicer we could use a defaultdict for self.gerrit_changes_dbs and just do this here:\n\n  db \u003d self.gerrit_changes_dbs[config[\u0027server\u0027]","commit_id":"a710b571fddf9c94bf4e81fce1ec419781755986"},{"author":{"_account_id":30637,"name":"Jan Kubovy","email":"jan.kubovy@bmw.de","username":"kubovy"},"change_message_id":"68104fb769194397997b26bef0e21ecfd3b0e49c","unresolved":false,"context_lines":[{"line_number":204,"context_line":"        self.add_cleanup \u003d add_cleanup"},{"line_number":205,"context_line":""},{"line_number":206,"context_line":"    def getConnection(self, name, config):"},{"line_number":207,"context_line":"        db \u003d self.changes.gerrit_changes_dbs.setdefault(config[\u0027server\u0027], {})"},{"line_number":208,"context_line":"        poll_event \u003d self.poller_events.setdefault(name, threading.Event())"},{"line_number":209,"context_line":"        ref_event \u003d self.poller_events.setdefault(name + \u0027-ref\u0027,"},{"line_number":210,"context_line":"                                                  threading.Event())"}],"source_content_type":"text/x-python","patch_set":25,"id":"9f560f44_23eb1a78","line":207,"range":{"start_line":207,"start_character":45,"end_line":207,"end_character":55},"in_reply_to":"9f560f44_2fb021dd","updated":"2020-08-25 06:28:33.000000000","message":"You mean replacing it with: \n    self.changes.gerrit_changes_dbs[config[\u0027server\u0027]] \u003d {}\n\nThis would change the value under the key `config[\u0027server\u0027]` even if it already exists.","commit_id":"a710b571fddf9c94bf4e81fce1ec419781755986"},{"author":{"_account_id":4146,"name":"Clark Boylan","email":"cboylan@sapwetik.org","username":"cboylan"},"change_message_id":"98c056c09eac1dddb27ebf79bfab62073b486ea5","unresolved":false,"context_lines":[{"line_number":260,"context_line":""},{"line_number":261,"context_line":"    def getConnection(self, name, config):"},{"line_number":262,"context_line":"        server \u003d config.get(\u0027server\u0027, \u0027github.com\u0027)"},{"line_number":263,"context_line":"        db \u003d self.changes.github_changes_dbs.setdefault(server, {})"},{"line_number":264,"context_line":"        connection \u003d FakeGithubConnection("},{"line_number":265,"context_line":"            self, name, config, self.rpcclient,"},{"line_number":266,"context_line":"            changes_db\u003ddb,"}],"source_content_type":"text/x-python","patch_set":25,"id":"9f560f44_efde290f","line":263,"range":{"start_line":263,"start_character":45,"end_line":263,"end_character":55},"updated":"2020-08-24 20:32:36.000000000","message":"Is this setdefault necessary? The init method on the ChangesDatabase type sets a default value of {}.","commit_id":"a710b571fddf9c94bf4e81fce1ec419781755986"},{"author":{"_account_id":4146,"name":"Clark Boylan","email":"cboylan@sapwetik.org","username":"cboylan"},"change_message_id":"98c056c09eac1dddb27ebf79bfab62073b486ea5","unresolved":false,"context_lines":[{"line_number":284,"context_line":""},{"line_number":285,"context_line":"    def getConnection(self, name, config):"},{"line_number":286,"context_line":"        server \u003d config.get(\u0027server\u0027, \u0027pagure.io\u0027)"},{"line_number":287,"context_line":"        db \u003d self.changes.pagure_changes_dbs.setdefault(server, {})"},{"line_number":288,"context_line":"        connection \u003d FakePagureConnection("},{"line_number":289,"context_line":"            self, name, config, self.rpcclient,"},{"line_number":290,"context_line":"            changes_db\u003ddb,"}],"source_content_type":"text/x-python","patch_set":25,"id":"9f560f44_2fe5c1dc","line":287,"range":{"start_line":287,"start_character":45,"end_line":287,"end_character":55},"updated":"2020-08-24 20:32:36.000000000","message":"Is this setdefault necessary? The init method on the ChangesDatabase type sets a default value of {}.","commit_id":"a710b571fddf9c94bf4e81fce1ec419781755986"},{"author":{"_account_id":4146,"name":"Clark Boylan","email":"cboylan@sapwetik.org","username":"cboylan"},"change_message_id":"98c056c09eac1dddb27ebf79bfab62073b486ea5","unresolved":false,"context_lines":[{"line_number":306,"context_line":""},{"line_number":307,"context_line":"    def getConnection(self, name, config):"},{"line_number":308,"context_line":"        server \u003d config.get(\u0027server\u0027, \u0027gitlab.com\u0027)"},{"line_number":309,"context_line":"        db \u003d self.changes.gitlab_changes_dbs.setdefault(server, {})"},{"line_number":310,"context_line":"        connection \u003d FakeGitlabConnection("},{"line_number":311,"context_line":"            self, name, config, self.rpcclient,"},{"line_number":312,"context_line":"            changes_db\u003ddb,"}],"source_content_type":"text/x-python","patch_set":25,"id":"9f560f44_6fd21902","line":309,"range":{"start_line":309,"start_character":45,"end_line":309,"end_character":55},"updated":"2020-08-24 20:32:36.000000000","message":"Is this setdefault necessary? The init method on the ChangesDatabase type sets a default value of {}.","commit_id":"a710b571fddf9c94bf4e81fce1ec419781755986"},{"author":{"_account_id":4146,"name":"Clark Boylan","email":"cboylan@sapwetik.org","username":"cboylan"},"change_message_id":"98c056c09eac1dddb27ebf79bfab62073b486ea5","unresolved":false,"context_lines":[{"line_number":4097,"context_line":"        executor_connections \u003d TestConnectionRegistry("},{"line_number":4098,"context_line":"            self.changes, self.config, self.additional_event_queues,"},{"line_number":4099,"context_line":"            self.upstream_root, self.rpcclient, self.poller_events,"},{"line_number":4100,"context_line":"            self.git_url_with_auth, self.addCleanup)"},{"line_number":4101,"context_line":"        executor_connections.configure(self.config,"},{"line_number":4102,"context_line":"                                       source_only\u003dself.source_only)"},{"line_number":4103,"context_line":"        self.executor_server \u003d RecordingExecutorServer("}],"source_content_type":"text/x-python","patch_set":25,"id":"9f560f44_eff1096d","line":4100,"updated":"2020-08-24 20:32:36.000000000","message":"I wonder if we need an aggregation object just to bundle up all of these required resource objects. Then we can do something like:\n\n  self.test_resource_objects \u003d TestResourceObjects(self.config, self.changes, ..., self.git_url_with_auth, self.addCleanup)\n  executor_connections \u003d TestConnectionRegistry(self.test_resource_objects)\n  self.scheds \u003d SchedulerTestManager()\n  self.scheds.create(self.test_resource_objects)\n\nThen in test_web.py do similar for the ZuulWebFixture:\n\n  ZuulWebFixture(self.test_resource_objects)\n\nThis is a bit hand wavy, it just seems we\u0027ve got a bunch of common resources we need in places and that may simplify test setup methods.","commit_id":"a710b571fddf9c94bf4e81fce1ec419781755986"},{"author":{"_account_id":30637,"name":"Jan Kubovy","email":"jan.kubovy@bmw.de","username":"kubovy"},"change_message_id":"68104fb769194397997b26bef0e21ecfd3b0e49c","unresolved":false,"context_lines":[{"line_number":4097,"context_line":"        executor_connections \u003d TestConnectionRegistry("},{"line_number":4098,"context_line":"            self.changes, self.config, self.additional_event_queues,"},{"line_number":4099,"context_line":"            self.upstream_root, self.rpcclient, self.poller_events,"},{"line_number":4100,"context_line":"            self.git_url_with_auth, self.addCleanup)"},{"line_number":4101,"context_line":"        executor_connections.configure(self.config,"},{"line_number":4102,"context_line":"                                       source_only\u003dself.source_only)"},{"line_number":4103,"context_line":"        self.executor_server \u003d RecordingExecutorServer("}],"source_content_type":"text/x-python","patch_set":25,"id":"9f560f44_c3905ef0","line":4100,"in_reply_to":"9f560f44_eff1096d","updated":"2020-08-25 06:28:33.000000000","message":"Yes, the (Test)Connection registry bundles all the connections and their drivers. I would probably not bundle everything in one resource bundle object but maybe type/purpose specific bundles (e.g. this connection registry). But open to change that (maybe in a different change?)","commit_id":"a710b571fddf9c94bf4e81fce1ec419781755986"},{"author":{"_account_id":4146,"name":"Clark Boylan","email":"cboylan@sapwetik.org","username":"cboylan"},"change_message_id":"98c056c09eac1dddb27ebf79bfab62073b486ea5","unresolved":false,"context_lines":[{"line_number":4458,"context_line":"                self.log.debug(\"Thread name: %s\" % thread.name)"},{"line_number":4459,"context_line":"            log_str \u003d \"\""},{"line_number":4460,"context_line":"            for thread_id, stack_frame in sys._current_frames().items():"},{"line_number":4461,"context_line":"                log_str +\u003d \"Thread: %s\\n\" % thread_id"},{"line_number":4462,"context_line":"                log_str +\u003d \"\".join(traceback.format_stack(stack_frame))"},{"line_number":4463,"context_line":"            self.log.debug(log_str)"},{"line_number":4464,"context_line":"            raise Exception(\"More than one thread is running: %s\" % threads)"}],"source_content_type":"text/x-python","patch_set":25,"id":"9f560f44_6ffb3978","line":4461,"updated":"2020-08-24 20:32:36.000000000","message":"Perhaps put the thread name here so that the thread names, ids, and tracebacks are all grouped together.","commit_id":"a710b571fddf9c94bf4e81fce1ec419781755986"},{"author":{"_account_id":30637,"name":"Jan Kubovy","email":"jan.kubovy@bmw.de","username":"kubovy"},"change_message_id":"eb61deb1b58ca5a84428b7c8998b307bda431599","unresolved":false,"context_lines":[{"line_number":4458,"context_line":"                self.log.debug(\"Thread name: %s\" % thread.name)"},{"line_number":4459,"context_line":"            log_str \u003d \"\""},{"line_number":4460,"context_line":"            for thread_id, stack_frame in sys._current_frames().items():"},{"line_number":4461,"context_line":"                log_str +\u003d \"Thread: %s\\n\" % thread_id"},{"line_number":4462,"context_line":"                log_str +\u003d \"\".join(traceback.format_stack(stack_frame))"},{"line_number":4463,"context_line":"            self.log.debug(log_str)"},{"line_number":4464,"context_line":"            raise Exception(\"More than one thread is running: %s\" % threads)"}],"source_content_type":"text/x-python","patch_set":25,"id":"9f560f44_b2eb8d79","line":4461,"in_reply_to":"9f560f44_6ffb3978","updated":"2020-09-30 16:00:26.000000000","message":"Done","commit_id":"a710b571fddf9c94bf4e81fce1ec419781755986"},{"author":{"_account_id":4146,"name":"Clark Boylan","email":"cboylan@sapwetik.org","username":"cboylan"},"change_message_id":"5d0d7e185768ee4a2e6c453c800bda4425b3f41b","unresolved":false,"context_lines":[{"line_number":4156,"context_line":"            self.log, self.config, self.zk_config,"},{"line_number":4157,"context_line":"            self.additional_event_queues, self.upstream_root, self.rpcclient,"},{"line_number":4158,"context_line":"            self.poller_events, self.git_url_with_auth, self.source_only,"},{"line_number":4159,"context_line":"            self.addCleanup)"},{"line_number":4160,"context_line":""},{"line_number":4161,"context_line":"        if hasattr(self, \u0027fake_github\u0027):"},{"line_number":4162,"context_line":"            self.additional_event_queues.append("}],"source_content_type":"text/x-python","patch_set":40,"id":"9f560f44_c60003b5","line":4159,"updated":"2020-09-30 20:14:28.000000000","message":"In order to simplify the SchedulerTestManager and SchedulerTestApp does it make sense to pass in a premade TestConnectionRegistry to scheds.create() and drop self.changes from the init method entirely?\n\nIt reduces the number of arguments and SchedulerTestApp can set its self.foo values using the values from TestConnectionRegistry.","commit_id":"d63158cc535de515675be2a21160b645b70f6986"},{"author":{"_account_id":30637,"name":"Jan Kubovy","email":"jan.kubovy@bmw.de","username":"kubovy"},"change_message_id":"189b853c43662f7e1cbc25a43b6c81de7d8efce8","unresolved":false,"context_lines":[{"line_number":4156,"context_line":"            self.log, self.config, self.zk_config,"},{"line_number":4157,"context_line":"            self.additional_event_queues, self.upstream_root, self.rpcclient,"},{"line_number":4158,"context_line":"            self.poller_events, self.git_url_with_auth, self.source_only,"},{"line_number":4159,"context_line":"            self.addCleanup)"},{"line_number":4160,"context_line":""},{"line_number":4161,"context_line":"        if hasattr(self, \u0027fake_github\u0027):"},{"line_number":4162,"context_line":"            self.additional_event_queues.append("}],"source_content_type":"text/x-python","patch_set":40,"id":"9f560f44_2b86e317","line":4159,"in_reply_to":"9f560f44_c60003b5","updated":"2020-10-01 06:19:52.000000000","message":"I am more for leaving it more flat than encapsulating it inside TestConnectionRegistry. We would need to make public attributes, e.g., \"config\", \"changes\" in TestConnectionRegistry only for that purpose in order to be able to use them in SchedulerTestManager and SchedulerTestApp. While it will make the number of parameters less it will imho decrease the navigability and readability of the code. Here its more clear what a SchedulerTestManager and SchedulerTestApp need. In case of adding/removing one or more parameters to one of these calls less changes will be needed.\n\nOne point may be to reuse TestConnectionRegistry in SchedulerTestApp. I am not sure if it is a good idea to share the same connection objects between \"ExecutorServer\" and \"SchedulerTestApp\"? It seams to me that currently we simulate the real setup better by having 2 separate instances. Or am I missing something?\n\nMoving the \"changes\" parameter from SchedulerTestManager to the \"create\" method makes sense.","commit_id":"d63158cc535de515675be2a21160b645b70f6986"},{"author":{"_account_id":4146,"name":"Clark Boylan","email":"cboylan@sapwetik.org","username":"cboylan"},"change_message_id":"5d0d7e185768ee4a2e6c453c800bda4425b3f41b","unresolved":false,"context_lines":[{"line_number":4175,"context_line":"        return [item for sublist in sched_queues for item in sublist] + \\"},{"line_number":4176,"context_line":"            self.additional_event_queues"},{"line_number":4177,"context_line":""},{"line_number":4178,"context_line":"    def __configure_smtp(self):"},{"line_number":4179,"context_line":"        # Set up smtp related fakes"},{"line_number":4180,"context_line":"        # TODO(jhesketh): This should come from lib.connections for better"},{"line_number":4181,"context_line":"        # coverage"}],"source_content_type":"text/x-python","patch_set":40,"id":"9f560f44_26be1f00","line":4178,"range":{"start_line":4178,"start_character":8,"end_line":4178,"end_character":10},"updated":"2020-09-30 20:14:28.000000000","message":"We should avoid the double underscores as mentioned in other changes. Particularly for testing being able to access or override methods is useful.","commit_id":"d63158cc535de515675be2a21160b645b70f6986"},{"author":{"_account_id":30637,"name":"Jan Kubovy","email":"jan.kubovy@bmw.de","username":"kubovy"},"change_message_id":"189b853c43662f7e1cbc25a43b6c81de7d8efce8","unresolved":false,"context_lines":[{"line_number":4175,"context_line":"        return [item for sublist in sched_queues for item in sublist] + \\"},{"line_number":4176,"context_line":"            self.additional_event_queues"},{"line_number":4177,"context_line":""},{"line_number":4178,"context_line":"    def __configure_smtp(self):"},{"line_number":4179,"context_line":"        # Set up smtp related fakes"},{"line_number":4180,"context_line":"        # TODO(jhesketh): This should come from lib.connections for better"},{"line_number":4181,"context_line":"        # coverage"}],"source_content_type":"text/x-python","patch_set":40,"id":"9f560f44_0b067fce","line":4178,"range":{"start_line":4178,"start_character":8,"end_line":4178,"end_character":10},"in_reply_to":"9f560f44_26be1f00","updated":"2020-10-01 06:19:52.000000000","message":"Done: You can always increase visibility if there is need to. Minimal necessary visibility was the approach here.","commit_id":"d63158cc535de515675be2a21160b645b70f6986"},{"author":{"_account_id":4146,"name":"Clark Boylan","email":"cboylan@sapwetik.org","username":"cboylan"},"change_message_id":"5d0d7e185768ee4a2e6c453c800bda4425b3f41b","unresolved":false,"context_lines":[{"line_number":4188,"context_line":""},{"line_number":4189,"context_line":"        self.useFixture(fixtures.MonkeyPatch(\u0027smtplib.SMTP\u0027, FakeSMTPFactory))"},{"line_number":4190,"context_line":""},{"line_number":4191,"context_line":"    def __configure_mqtt(self):"},{"line_number":4192,"context_line":"        # Set up mqtt related fakes"},{"line_number":4193,"context_line":"        self.mqtt_messages \u003d []"},{"line_number":4194,"context_line":""}],"source_content_type":"text/x-python","patch_set":40,"id":"9f560f44_86bbab0d","line":4191,"range":{"start_line":4191,"start_character":8,"end_line":4191,"end_character":10},"updated":"2020-09-30 20:14:28.000000000","message":"See above.","commit_id":"d63158cc535de515675be2a21160b645b70f6986"},{"author":{"_account_id":30637,"name":"Jan Kubovy","email":"jan.kubovy@bmw.de","username":"kubovy"},"change_message_id":"189b853c43662f7e1cbc25a43b6c81de7d8efce8","unresolved":false,"context_lines":[{"line_number":4188,"context_line":""},{"line_number":4189,"context_line":"        self.useFixture(fixtures.MonkeyPatch(\u0027smtplib.SMTP\u0027, FakeSMTPFactory))"},{"line_number":4190,"context_line":""},{"line_number":4191,"context_line":"    def __configure_mqtt(self):"},{"line_number":4192,"context_line":"        # Set up mqtt related fakes"},{"line_number":4193,"context_line":"        self.mqtt_messages \u003d []"},{"line_number":4194,"context_line":""}],"source_content_type":"text/x-python","patch_set":40,"id":"9f560f44_eb9a2b6d","line":4191,"range":{"start_line":4191,"start_character":8,"end_line":4191,"end_character":10},"in_reply_to":"9f560f44_86bbab0d","updated":"2020-10-01 06:19:52.000000000","message":"Done","commit_id":"d63158cc535de515675be2a21160b645b70f6986"},{"author":{"_account_id":4146,"name":"Clark Boylan","email":"cboylan@sapwetik.org","username":"cboylan"},"change_message_id":"5d0d7e185768ee4a2e6c453c800bda4425b3f41b","unresolved":false,"context_lines":[{"line_number":4728,"context_line":"                    self.log.error(\"  %s: %s\" %"},{"line_number":4729,"context_line":"                                   (event_queue, event_queue.empty()))"},{"line_number":4730,"context_line":"                self.log.error(\"All builds waiting: %s\" %"},{"line_number":4731,"context_line":"                               (self.__areAllBuildsWaiting(matcher),))"},{"line_number":4732,"context_line":"                self.log.error(\"All merge jobs waiting: %s\" %"},{"line_number":4733,"context_line":"                               (self.__areAllMergeJobsWaiting(matcher),))"},{"line_number":4734,"context_line":"                self.log.error(\"All builds reported: %s\" %"}],"source_content_type":"text/x-python","patch_set":40,"id":"9f560f44_e641c70c","line":4731,"range":{"start_line":4731,"start_character":37,"end_line":4731,"end_character":39},"updated":"2020-09-30 20:14:28.000000000","message":"It would probably be a good idea to clean these up too in a separate change.","commit_id":"d63158cc535de515675be2a21160b645b70f6986"},{"author":{"_account_id":16068,"name":"Tobias Henkel","email":"tobias.henkel@bmw.de","username":"tobias.henkel"},"change_message_id":"873d2eca6e551de03098fdc323ca96a6bb9fced6","unresolved":false,"context_lines":[{"line_number":181,"context_line":""},{"line_number":182,"context_line":"class ChangesDatabase:"},{"line_number":183,"context_line":"    def __init__(self):"},{"line_number":184,"context_line":"        self.gerrit_changes_dbs \u003d {}"},{"line_number":185,"context_line":"        self.github_changes_dbs \u003d {}"},{"line_number":186,"context_line":"        self.pagure_changes_dbs \u003d {}"},{"line_number":187,"context_line":"        self.gitlab_changes_dbs \u003d {}"},{"line_number":188,"context_line":""},{"line_number":189,"context_line":""},{"line_number":190,"context_line":"class GerritDriverMock(GerritDriver):"}],"source_content_type":"text/x-python","patch_set":44,"id":"9f560f44_61dce070","line":187,"range":{"start_line":184,"start_character":0,"end_line":187,"end_character":36},"updated":"2020-10-12 18:15:48.000000000","message":"I think we don\u0027t have to differentiate per driver here. We access each db here by server name anyway which is unique enough.","commit_id":"95af988cb0418ac59bfad33eae32d0faead7b5be"},{"author":{"_account_id":30637,"name":"Jan Kubovy","email":"jan.kubovy@bmw.de","username":"kubovy"},"change_message_id":"bb3309c94c423d728321e2b239c7976c11d3417b","unresolved":false,"context_lines":[{"line_number":181,"context_line":""},{"line_number":182,"context_line":"class ChangesDatabase:"},{"line_number":183,"context_line":"    def __init__(self):"},{"line_number":184,"context_line":"        self.gerrit_changes_dbs \u003d {}"},{"line_number":185,"context_line":"        self.github_changes_dbs \u003d {}"},{"line_number":186,"context_line":"        self.pagure_changes_dbs \u003d {}"},{"line_number":187,"context_line":"        self.gitlab_changes_dbs \u003d {}"},{"line_number":188,"context_line":""},{"line_number":189,"context_line":""},{"line_number":190,"context_line":"class GerritDriverMock(GerritDriver):"}],"source_content_type":"text/x-python","patch_set":44,"id":"9f560f44_d0e770aa","line":187,"range":{"start_line":184,"start_character":0,"end_line":187,"end_character":36},"in_reply_to":"9f560f44_61dce070","updated":"2020-10-13 04:57:59.000000000","message":"Done","commit_id":"95af988cb0418ac59bfad33eae32d0faead7b5be"},{"author":{"_account_id":16068,"name":"Tobias Henkel","email":"tobias.henkel@bmw.de","username":"tobias.henkel"},"change_message_id":"873d2eca6e551de03098fdc323ca96a6bb9fced6","unresolved":false,"context_lines":[{"line_number":3999,"context_line":""},{"line_number":4000,"context_line":"    \"\"\""},{"line_number":4001,"context_line":""},{"line_number":4002,"context_line":"    config_file \u003d \u0027zuul.conf\u0027  # type: str"},{"line_number":4003,"context_line":"    run_ansible \u003d False  # type: bool"},{"line_number":4004,"context_line":"    create_project_keys \u003d False  # type: bool"},{"line_number":4005,"context_line":"    use_ssl \u003d False  # type: bool"},{"line_number":4006,"context_line":"    git_url_with_auth \u003d False  # type: bool"},{"line_number":4007,"context_line":"    log_console_port \u003d 19885  # type: int"},{"line_number":4008,"context_line":"    source_only \u003d False  # type: bool"},{"line_number":4009,"context_line":""},{"line_number":4010,"context_line":"    def __getattr__(self, name):"},{"line_number":4011,"context_line":"        \"\"\"Allows to access fake connections the old way, e.g., using"}],"source_content_type":"text/x-python","patch_set":44,"id":"9f560f44_a1d3985e","line":4008,"range":{"start_line":4002,"start_character":0,"end_line":4008,"end_character":37},"updated":"2020-10-12 18:15:48.000000000","message":"Zuul is now \u003e\u003dpy36 so we should use real type annotations instead of the comment style.","commit_id":"95af988cb0418ac59bfad33eae32d0faead7b5be"},{"author":{"_account_id":30637,"name":"Jan Kubovy","email":"jan.kubovy@bmw.de","username":"kubovy"},"change_message_id":"0cd7c849a094f063697ab32c79cca43d663ecd59","unresolved":false,"context_lines":[{"line_number":3999,"context_line":""},{"line_number":4000,"context_line":"    \"\"\""},{"line_number":4001,"context_line":""},{"line_number":4002,"context_line":"    config_file \u003d \u0027zuul.conf\u0027  # type: str"},{"line_number":4003,"context_line":"    run_ansible \u003d False  # type: bool"},{"line_number":4004,"context_line":"    create_project_keys \u003d False  # type: bool"},{"line_number":4005,"context_line":"    use_ssl \u003d False  # type: bool"},{"line_number":4006,"context_line":"    git_url_with_auth \u003d False  # type: bool"},{"line_number":4007,"context_line":"    log_console_port \u003d 19885  # type: int"},{"line_number":4008,"context_line":"    source_only \u003d False  # type: bool"},{"line_number":4009,"context_line":""},{"line_number":4010,"context_line":"    def __getattr__(self, name):"},{"line_number":4011,"context_line":"        \"\"\"Allows to access fake connections the old way, e.g., using"}],"source_content_type":"text/x-python","patch_set":44,"id":"9f560f44_50f3606d","line":4008,"range":{"start_line":4002,"start_character":0,"end_line":4008,"end_character":37},"in_reply_to":"9f560f44_a1d3985e","updated":"2020-10-13 04:58:28.000000000","message":"Done","commit_id":"95af988cb0418ac59bfad33eae32d0faead7b5be"}]}
