)]}'
{"rally/common/objects/deploy.py":[{"author":{"_account_id":9545,"name":"Andriy Kurilin","email":"andr.kurilin@gmail.com","username":"akurilin"},"change_message_id":"21a7ad12639fff029e7626727b8eaae8994cd997","unresolved":false,"context_lines":[{"line_number":109,"context_line":"        jsonschema.validate(credentials, CREDENTIALS_SCHEMA)"},{"line_number":110,"context_line":"        self._update({\"credentials\": credentials})"},{"line_number":111,"context_line":""},{"line_number":112,"context_line":"    def get_validation_context(self):"},{"line_number":113,"context_line":"        ctx \u003d {}"},{"line_number":114,"context_line":"        for platform in self.get_platforms():"},{"line_number":115,"context_line":"            ctx.update(credential.get(platform).get_validation_context())"}],"source_content_type":"text/x-python","patch_set":12,"id":"5f2577a7_9ee717ad","line":112,"range":{"start_line":112,"start_character":30,"end_line":112,"end_character":37},"updated":"2017-09-17 15:01:01.000000000","message":"let\u0027s add an ability to transmit the original context here. I mean in terms of \"OpenStack\" (and I suppose it can be useful for other platforms too) \u0027roles\u0027 context with a proper argument should be added based on the input context.","commit_id":"366e5df42157a67792c01244e87b779ec9fedf8d"},{"author":{"_account_id":6172,"name":"Boris Pavlovic","email":"boris@pavlovic.me","username":"boris-42"},"change_message_id":"4f3e2b3782d6ef6cc36e2aa22a8e471d6225773a","unresolved":false,"context_lines":[{"line_number":109,"context_line":"        jsonschema.validate(credentials, CREDENTIALS_SCHEMA)"},{"line_number":110,"context_line":"        self._update({\"credentials\": credentials})"},{"line_number":111,"context_line":""},{"line_number":112,"context_line":"    def get_validation_context(self):"},{"line_number":113,"context_line":"        ctx \u003d {}"},{"line_number":114,"context_line":"        for platform in self.get_platforms():"},{"line_number":115,"context_line":"            ctx.update(credential.get(platform).get_validation_context())"}],"source_content_type":"text/x-python","patch_set":12,"id":"5f2577a7_64d17a23","line":112,"range":{"start_line":112,"start_character":30,"end_line":112,"end_character":37},"in_reply_to":"5f2577a7_9ee717ad","updated":"2017-09-17 19:57:15.000000000","message":"we are creating validation context one time per all workloads...","commit_id":"366e5df42157a67792c01244e87b779ec9fedf8d"}],"rally/common/plugin/plugin.py":[{"author":{"_account_id":9545,"name":"Andriy Kurilin","email":"andr.kurilin@gmail.com","username":"akurilin"},"change_message_id":"0fd1225174924c3053e3274a2d9da92263042eda","unresolved":false,"context_lines":[{"line_number":140,"context_line":"        return getattr(cls, \"base_ref\", Plugin)"},{"line_number":141,"context_line":""},{"line_number":142,"context_line":"    @classmethod"},{"line_number":143,"context_line":"    def get(cls, name, platform\u003dNone, allow_hidden\u003dFalse):"},{"line_number":144,"context_line":"        \"\"\"Return plugin by its name for specified platform."},{"line_number":145,"context_line":""},{"line_number":146,"context_line":"        :param name: Plugin\u0027s name or fullname"}],"source_content_type":"text/x-python","patch_set":4,"id":"9f436f4f_e25a664e","line":143,"range":{"start_line":143,"start_character":36,"end_line":143,"end_character":56},"updated":"2017-09-20 16:27:48.000000000","message":"It would be nice to get rid of it too. get and get_all methods should be simple as possible and return everything possible and proper check (hidden plugin or not) should be done at higher level, but it doesn\u0027t relate to this patch.","commit_id":"5ec10ab464bb56baea333725a3a07825af840ef6"},{"author":{"_account_id":9545,"name":"Andriy Kurilin","email":"andr.kurilin@gmail.com","username":"akurilin"},"change_message_id":"1078a4e4eec0d6a3c70d4a630f7adb392ae0d1aa","unresolved":false,"context_lines":[{"line_number":73,"context_line":"            plugin_id \u003d \"%s.%s\" % (plugin.__module__, plugin.__name__)"},{"line_number":74,"context_line":"            raise ValueError(\"The name of the plugin %s cannot be None.\" %"},{"line_number":75,"context_line":"                             plugin_id)"},{"line_number":76,"context_line":""},{"line_number":77,"context_line":"        plugin._meta_init()"},{"line_number":78,"context_line":"        try:"},{"line_number":79,"context_line":"            existing_plugin \u003d plugin._get_base().get("}],"source_content_type":"text/x-python","patch_set":7,"id":"5f2577a7_9a133e67","line":76,"updated":"2017-09-10 21:50:04.000000000","message":"please add a check for @ in the name. It should be restricted.","commit_id":"7bd6aa559bdefe986d9472d6ec0814649b1b4a14"},{"author":{"_account_id":6172,"name":"Boris Pavlovic","email":"boris@pavlovic.me","username":"boris-42"},"change_message_id":"4620cb1ba3a2f4baf9f37c210daafb68a4fe485d","unresolved":false,"context_lines":[{"line_number":73,"context_line":"            plugin_id \u003d \"%s.%s\" % (plugin.__module__, plugin.__name__)"},{"line_number":74,"context_line":"            raise ValueError(\"The name of the plugin %s cannot be None.\" %"},{"line_number":75,"context_line":"                             plugin_id)"},{"line_number":76,"context_line":""},{"line_number":77,"context_line":"        plugin._meta_init()"},{"line_number":78,"context_line":"        try:"},{"line_number":79,"context_line":"            existing_plugin \u003d plugin._get_base().get("}],"source_content_type":"text/x-python","patch_set":7,"id":"5f2577a7_1738c93a","line":76,"in_reply_to":"5f2577a7_9a133e67","updated":"2017-09-15 08:06:45.000000000","message":"fixed","commit_id":"7bd6aa559bdefe986d9472d6ec0814649b1b4a14"},{"author":{"_account_id":9545,"name":"Andriy Kurilin","email":"andr.kurilin@gmail.com","username":"akurilin"},"change_message_id":"1078a4e4eec0d6a3c70d4a630f7adb392ae0d1aa","unresolved":false,"context_lines":[{"line_number":150,"context_line":"        \"\"\""},{"line_number":151,"context_line":"        if \"@\" in name:"},{"line_number":152,"context_line":"            name, platform \u003d name.split(\"@\", 1)"},{"line_number":153,"context_line":""},{"line_number":154,"context_line":"        results \u003d cls.get_all(name\u003dname, platform\u003dplatform,"},{"line_number":155,"context_line":"                              allow_hidden\u003dallow_hidden)"},{"line_number":156,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"5f2577a7_5a0dd63c","line":153,"updated":"2017-09-10 21:50:04.000000000","message":"not sure, so it is more like a question/note: should we check that @ and a platform argument are not specified together?","commit_id":"7bd6aa559bdefe986d9472d6ec0814649b1b4a14"},{"author":{"_account_id":6172,"name":"Boris Pavlovic","email":"boris@pavlovic.me","username":"boris-42"},"change_message_id":"4620cb1ba3a2f4baf9f37c210daafb68a4fe485d","unresolved":false,"context_lines":[{"line_number":150,"context_line":"        \"\"\""},{"line_number":151,"context_line":"        if \"@\" in name:"},{"line_number":152,"context_line":"            name, platform \u003d name.split(\"@\", 1)"},{"line_number":153,"context_line":""},{"line_number":154,"context_line":"        results \u003d cls.get_all(name\u003dname, platform\u003dplatform,"},{"line_number":155,"context_line":"                              allow_hidden\u003dallow_hidden)"},{"line_number":156,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"5f2577a7_3d8564ae","line":153,"in_reply_to":"5f2577a7_5a0dd63c","updated":"2017-09-15 08:06:45.000000000","message":"I was thinking about this place a lot actually. \n\nAnd found the best way for now to handle is to use platform argument as default platform (if it is not specified in name) \n\nlet\u0027s keep it for now as this, later probably it would make sense just to remove platform arugment at all.","commit_id":"7bd6aa559bdefe986d9472d6ec0814649b1b4a14"}],"rally/common/validation.py":[{"author":{"_account_id":9545,"name":"Andriy Kurilin","email":"andr.kurilin@gmail.com","username":"akurilin"},"change_message_id":"0fd1225174924c3053e3274a2d9da92263042eda","unresolved":false,"context_lines":[{"line_number":106,"context_line":"            if credentials.get(\"admin\") is None:"},{"line_number":107,"context_line":"                return self.fail(\"No user credentials for %s\" % self.platform)"},{"line_number":108,"context_line":"            else:"},{"line_number":109,"context_line":"                # NOTE(andreykurilin): It is a case when the plugin requires"},{"line_number":110,"context_line":"                #   \u0027users\u0027 for launching, but there are no specified users in"},{"line_number":111,"context_line":"                #   deployment. Let\u0027s assume that \u0027users\u0027 context can create"},{"line_number":112,"context_line":"                #   them via admin user and do not fail.\""}],"source_content_type":"text/x-python","patch_set":23,"id":"bf57530f_101ccf68","line":109,"range":{"start_line":109,"start_character":54,"end_line":109,"end_character":57},"updated":"2017-09-20 16:27:48.000000000","message":"You do not mention this change in commit message ;) lol","commit_id":"67ac7ed47ce5ca2360a158f2c03d6279b41127e6"}],"rally/osclients.py":[{"author":{"_account_id":9545,"name":"Andriy Kurilin","email":"andr.kurilin@gmail.com","username":"akurilin"},"change_message_id":"1078a4e4eec0d6a3c70d4a630f7adb392ae0d1aa","unresolved":false,"context_lines":[{"line_number":57,"context_line":"        in client object)"},{"line_number":58,"context_line":"    \"\"\""},{"line_number":59,"context_line":"    def wrapper(cls):"},{"line_number":60,"context_line":"        # openstack platform is hardcoded in OSclients.get() method"},{"line_number":61,"context_line":"        cls \u003d plugin.configure(name\u003dname)(cls)"},{"line_number":62,"context_line":"        cls._meta_set(\"default_version\", default_version)"},{"line_number":63,"context_line":"        cls._meta_set(\"default_service_type\", default_service_type)"}],"source_content_type":"text/x-python","patch_set":7,"id":"5f2577a7_1a074e1f","side":"PARENT","line":60,"range":{"start_line":60,"start_character":8,"end_line":60,"end_character":67},"updated":"2017-09-10 21:50:04.000000000","message":"it was my comment ;(","commit_id":"e671785bd35890aa20524d5a2c8923d58c58b1f0"}],"rally/plugins/common/context/users.py":[{"author":{"_account_id":9545,"name":"Andriy Kurilin","email":"andr.kurilin@gmail.com","username":"akurilin"},"change_message_id":"1078a4e4eec0d6a3c70d4a630f7adb392ae0d1aa","unresolved":false,"context_lines":[{"line_number":16,"context_line":"from rally.task import context"},{"line_number":17,"context_line":""},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"@context.configure(name\u003d\"no_users\", order\u003d100, hidden\u003dTrue)"},{"line_number":20,"context_line":"class NoUsers(context.Context):"},{"line_number":21,"context_line":"    \"\"\"Context that provides empty list of users for default namespace.\"\"\""},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"    CONFIG_SCHEMA \u003d {\"type\": \"null\"}"},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"    def setup(self):"},{"line_number":26,"context_line":"        self.context[\"users\"] \u003d []"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"    def cleanup(self):"},{"line_number":29,"context_line":"        pass"}],"source_content_type":"text/x-python","patch_set":7,"id":"5f2577a7_7d264cba","line":29,"range":{"start_line":19,"start_character":0,"end_line":29,"end_character":12},"updated":"2017-09-10 21:50:04.000000000","message":"This class was a workaround for hardcoded \"users\" context in task.engine. Since this hardcode is gone, we can just remove this class.","commit_id":"7bd6aa559bdefe986d9472d6ec0814649b1b4a14"},{"author":{"_account_id":6172,"name":"Boris Pavlovic","email":"boris@pavlovic.me","username":"boris-42"},"change_message_id":"4620cb1ba3a2f4baf9f37c210daafb68a4fe485d","unresolved":false,"context_lines":[{"line_number":16,"context_line":"from rally.task import context"},{"line_number":17,"context_line":""},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"@context.configure(name\u003d\"no_users\", order\u003d100, hidden\u003dTrue)"},{"line_number":20,"context_line":"class NoUsers(context.Context):"},{"line_number":21,"context_line":"    \"\"\"Context that provides empty list of users for default namespace.\"\"\""},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"    CONFIG_SCHEMA \u003d {\"type\": \"null\"}"},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"    def setup(self):"},{"line_number":26,"context_line":"        self.context[\"users\"] \u003d []"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"    def cleanup(self):"},{"line_number":29,"context_line":"        pass"}],"source_content_type":"text/x-python","patch_set":7,"id":"5f2577a7_ddbd4069","line":29,"range":{"start_line":19,"start_character":0,"end_line":29,"end_character":12},"in_reply_to":"5f2577a7_7d264cba","updated":"2017-09-15 08:06:45.000000000","message":"yep old version still required it ;) so yep let me just remove it.","commit_id":"7bd6aa559bdefe986d9472d6ec0814649b1b4a14"}],"rally/task/context.py":[{"author":{"_account_id":9545,"name":"Andriy Kurilin","email":"andr.kurilin@gmail.com","username":"akurilin"},"change_message_id":"21a7ad12639fff029e7626727b8eaae8994cd997","unresolved":false,"context_lines":[{"line_number":185,"context_line":"            for name in self.context_obj[\"config\"])"},{"line_number":186,"context_line":""},{"line_number":187,"context_line":"    def setup(self):"},{"line_number":188,"context_line":"        \"\"\"Creates subtask environment.\"\"\""},{"line_number":189,"context_line":"        self._visited \u003d []"},{"line_number":190,"context_line":"        for ctx in self._get_sorted_context_lst():"},{"line_number":191,"context_line":"            self._visited.append(ctx)"}],"source_content_type":"text/x-python","patch_set":12,"id":"5f2577a7_7eec6b8e","line":188,"range":{"start_line":188,"start_character":19,"end_line":188,"end_character":26},"updated":"2017-09-17 15:01:01.000000000","message":"currently. it is \"workload\" environment. In future, it will be \"subtask/workload\" env.","commit_id":"366e5df42157a67792c01244e87b779ec9fedf8d"},{"author":{"_account_id":9545,"name":"Andriy Kurilin","email":"andr.kurilin@gmail.com","username":"akurilin"},"change_message_id":"21a7ad12639fff029e7626727b8eaae8994cd997","unresolved":false,"context_lines":[{"line_number":194,"context_line":"        return self.context_obj"},{"line_number":195,"context_line":""},{"line_number":196,"context_line":"    def cleanup(self):"},{"line_number":197,"context_line":"        \"\"\"Cleans up subtask environment.\"\"\""},{"line_number":198,"context_line":""},{"line_number":199,"context_line":"        ctxlst \u003d self._visited or self._get_sorted_context_lst()"},{"line_number":200,"context_line":"        for ctx in ctxlst[::-1]:"}],"source_content_type":"text/x-python","patch_set":12,"id":"5f2577a7_5e052f45","line":197,"range":{"start_line":197,"start_character":21,"end_line":197,"end_character":28},"updated":"2017-09-17 15:01:01.000000000","message":"same here","commit_id":"366e5df42157a67792c01244e87b779ec9fedf8d"},{"author":{"_account_id":9545,"name":"Andriy Kurilin","email":"andr.kurilin@gmail.com","username":"akurilin"},"change_message_id":"21a7ad12639fff029e7626727b8eaae8994cd997","unresolved":false,"context_lines":[{"line_number":201,"context_line":"            try:"},{"line_number":202,"context_line":"                ctx.cleanup()"},{"line_number":203,"context_line":"            except Exception:"},{"line_number":204,"context_line":"                LOG.exception(\"Context %s.cleanup() failed.\" % ctx.get_name())"},{"line_number":205,"context_line":""},{"line_number":206,"context_line":"    def __enter__(self):"},{"line_number":207,"context_line":"        try:"}],"source_content_type":"text/x-python","patch_set":12,"id":"5f2577a7_de96bff0","line":204,"range":{"start_line":204,"start_character":16,"end_line":204,"end_character":78},"updated":"2017-09-17 15:01:01.000000000","message":"should we use platform here as well?","commit_id":"366e5df42157a67792c01244e87b779ec9fedf8d"},{"author":{"_account_id":6172,"name":"Boris Pavlovic","email":"boris@pavlovic.me","username":"boris-42"},"change_message_id":"5333a0b747b0db1cc6d1e5234ad4a9e7cc8073d9","unresolved":false,"context_lines":[{"line_number":201,"context_line":"            try:"},{"line_number":202,"context_line":"                ctx.cleanup()"},{"line_number":203,"context_line":"            except Exception:"},{"line_number":204,"context_line":"                LOG.exception(\"Context %s.cleanup() failed.\" % ctx.get_name())"},{"line_number":205,"context_line":""},{"line_number":206,"context_line":"    def __enter__(self):"},{"line_number":207,"context_line":"        try:"}],"source_content_type":"text/x-python","patch_set":12,"id":"5f2577a7_e48b2a1c","line":204,"range":{"start_line":204,"start_character":16,"end_line":204,"end_character":78},"in_reply_to":"5f2577a7_de96bff0","updated":"2017-09-20 15:44:29.000000000","message":"yes you are right","commit_id":"366e5df42157a67792c01244e87b779ec9fedf8d"},{"author":{"_account_id":9545,"name":"Andriy Kurilin","email":"andr.kurilin@gmail.com","username":"akurilin"},"change_message_id":"0fd1225174924c3053e3274a2d9da92263042eda","unresolved":false,"context_lines":[{"line_number":94,"context_line":""},{"line_number":95,"context_line":"    def __init__(self, ctx):"},{"line_number":96,"context_line":"        config \u003d ctx.get(\"config\", {})"},{"line_number":97,"context_line":"        if self.get_name() in config:"},{"line_number":98,"context_line":"            # TODO(boris-42): Fix tests, code is always using fullnames"},{"line_number":99,"context_line":"            config \u003d config[self.get_name()]"},{"line_number":100,"context_line":"        else:"},{"line_number":101,"context_line":"            # TODO(boris-42): use [] instead of get() context full name is"},{"line_number":102,"context_line":"            #                 always presented."},{"line_number":103,"context_line":"            config \u003d config.get(self.get_fullname(), {})"},{"line_number":104,"context_line":"        # NOTE(amaretskiy): self.config is a constant data and must be"},{"line_number":105,"context_line":"        #                   immutable or write-protected type to prevent"},{"line_number":106,"context_line":"        #                   unexpected changes in runtime"}],"source_content_type":"text/x-python","patch_set":23,"id":"bf57530f_b0c06352","line":103,"range":{"start_line":97,"start_character":8,"end_line":103,"end_character":56},"updated":"2017-09-20 16:27:48.000000000","message":"looks like a dirty hack. Can you promise that you will fix the tests soon?","commit_id":"67ac7ed47ce5ca2360a158f2c03d6279b41127e6"},{"author":{"_account_id":6172,"name":"Boris Pavlovic","email":"boris@pavlovic.me","username":"boris-42"},"change_message_id":"77febb0c92166f4768a0909cf990d59d3d3bab8f","unresolved":false,"context_lines":[{"line_number":94,"context_line":""},{"line_number":95,"context_line":"    def __init__(self, ctx):"},{"line_number":96,"context_line":"        config \u003d ctx.get(\"config\", {})"},{"line_number":97,"context_line":"        if self.get_name() in config:"},{"line_number":98,"context_line":"            # TODO(boris-42): Fix tests, code is always using fullnames"},{"line_number":99,"context_line":"            config \u003d config[self.get_name()]"},{"line_number":100,"context_line":"        else:"},{"line_number":101,"context_line":"            # TODO(boris-42): use [] instead of get() context full name is"},{"line_number":102,"context_line":"            #                 always presented."},{"line_number":103,"context_line":"            config \u003d config.get(self.get_fullname(), {})"},{"line_number":104,"context_line":"        # NOTE(amaretskiy): self.config is a constant data and must be"},{"line_number":105,"context_line":"        #                   immutable or write-protected type to prevent"},{"line_number":106,"context_line":"        #                   unexpected changes in runtime"}],"source_content_type":"text/x-python","patch_set":23,"id":"bf57530f_6674759a","line":103,"range":{"start_line":97,"start_character":8,"end_line":103,"end_character":56},"in_reply_to":"bf57530f_b0c06352","updated":"2017-09-20 22:22:45.000000000","message":"yes of course","commit_id":"67ac7ed47ce5ca2360a158f2c03d6279b41127e6"},{"author":{"_account_id":9545,"name":"Andriy Kurilin","email":"andr.kurilin@gmail.com","username":"akurilin"},"change_message_id":"0fd1225174924c3053e3274a2d9da92263042eda","unresolved":false,"context_lines":[{"line_number":181,"context_line":"        return [c(self.context_obj) for c in ctx_lst]"},{"line_number":182,"context_line":""},{"line_number":183,"context_line":"    def setup(self):"},{"line_number":184,"context_line":"        \"\"\"Creates subtask environment.\"\"\""},{"line_number":185,"context_line":"        self._visited \u003d []"},{"line_number":186,"context_line":"        for ctx in self._get_sorted_context_lst():"},{"line_number":187,"context_line":"            self._visited.append(ctx)"}],"source_content_type":"text/x-python","patch_set":23,"id":"bf57530f_104f2fbe","line":184,"range":{"start_line":184,"start_character":19,"end_line":184,"end_character":26},"updated":"2017-09-20 16:27:48.000000000","message":"now it creates an environment for workload and in the near future, it will allow creating an environment for both the workload and for the subtask. The current phrase \"subtask environment\" is not True for current case and for the future case too.\n\nThe same thing for cleanup docstring.","commit_id":"67ac7ed47ce5ca2360a158f2c03d6279b41127e6"},{"author":{"_account_id":6172,"name":"Boris Pavlovic","email":"boris@pavlovic.me","username":"boris-42"},"change_message_id":"77febb0c92166f4768a0909cf990d59d3d3bab8f","unresolved":false,"context_lines":[{"line_number":181,"context_line":"        return [c(self.context_obj) for c in ctx_lst]"},{"line_number":182,"context_line":""},{"line_number":183,"context_line":"    def setup(self):"},{"line_number":184,"context_line":"        \"\"\"Creates subtask environment.\"\"\""},{"line_number":185,"context_line":"        self._visited \u003d []"},{"line_number":186,"context_line":"        for ctx in self._get_sorted_context_lst():"},{"line_number":187,"context_line":"            self._visited.append(ctx)"}],"source_content_type":"text/x-python","patch_set":23,"id":"bf57530f_86d089cb","line":184,"range":{"start_line":184,"start_character":19,"end_line":184,"end_character":26},"in_reply_to":"bf57530f_104f2fbe","updated":"2017-09-20 22:22:45.000000000","message":"ok","commit_id":"67ac7ed47ce5ca2360a158f2c03d6279b41127e6"}],"rally/task/types.py":[{"author":{"_account_id":9545,"name":"Andriy Kurilin","email":"andr.kurilin@gmail.com","username":"akurilin"},"change_message_id":"1078a4e4eec0d6a3c70d4a630f7adb392ae0d1aa","unresolved":false,"context_lines":[{"line_number":198,"context_line":"                    if resource.id \u003d\u003d resource_config[\"id\"]]"},{"line_number":199,"context_line":"        if len(matching) \u003d\u003d 1:"},{"line_number":200,"context_line":"            return matching[0]"},{"line_number":201,"context_line":"        elif len(matching) \u003e 1:"},{"line_number":202,"context_line":"            raise exceptions.MultipleMatchesFound("},{"line_number":203,"context_line":"                needle\u003d\"{typename} with id \u0027{id}\u0027\".format("},{"line_number":204,"context_line":"                    typename\u003dtypename.title(), id\u003dresource_config[\"id\"]),"},{"line_number":205,"context_line":"                haystack\u003dmatching)"},{"line_number":206,"context_line":"        else:"},{"line_number":207,"context_line":"            raise exceptions.InvalidScenarioArgument("},{"line_number":208,"context_line":"                \"{typename} with id \u0027{id}\u0027 not found\".format("}],"source_content_type":"text/x-python","patch_set":7,"id":"5f2577a7_9d569806","side":"PARENT","line":205,"range":{"start_line":201,"start_character":0,"end_line":205,"end_character":34},"updated":"2017-09-10 21:50:04.000000000","message":"why is it gone? looks still valid","commit_id":"e671785bd35890aa20524d5a2c8923d58c58b1f0"},{"author":{"_account_id":6172,"name":"Boris Pavlovic","email":"boris@pavlovic.me","username":"boris-42"},"change_message_id":"4620cb1ba3a2f4baf9f37c210daafb68a4fe485d","unresolved":false,"context_lines":[{"line_number":198,"context_line":"                    if resource.id \u003d\u003d resource_config[\"id\"]]"},{"line_number":199,"context_line":"        if len(matching) \u003d\u003d 1:"},{"line_number":200,"context_line":"            return matching[0]"},{"line_number":201,"context_line":"        elif len(matching) \u003e 1:"},{"line_number":202,"context_line":"            raise exceptions.MultipleMatchesFound("},{"line_number":203,"context_line":"                needle\u003d\"{typename} with id \u0027{id}\u0027\".format("},{"line_number":204,"context_line":"                    typename\u003dtypename.title(), id\u003dresource_config[\"id\"]),"},{"line_number":205,"context_line":"                haystack\u003dmatching)"},{"line_number":206,"context_line":"        else:"},{"line_number":207,"context_line":"            raise exceptions.InvalidScenarioArgument("},{"line_number":208,"context_line":"                \"{typename} with id \u0027{id}\u0027 not found\".format("}],"source_content_type":"text/x-python","patch_set":7,"id":"5f2577a7_9db7b887","side":"PARENT","line":205,"range":{"start_line":201,"start_character":0,"end_line":205,"end_character":34},"in_reply_to":"5f2577a7_9d569806","updated":"2017-09-15 08:06:45.000000000","message":"Ok I will remove it in separate patch to explain..","commit_id":"e671785bd35890aa20524d5a2c8923d58c58b1f0"}]}
