)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":13609,"name":"Pavel Boldin","email":"pboldin@mirantis.com","username":"pboldin"},"change_message_id":"1e1e805cc7c4e9cb54093fa78d586502b1c29a1d","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"[Sahara] Add Swift to input data sources"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Added support of Swift in Sahara Data Sources"},{"line_number":10,"context_line":""},{"line_number":11,"context_line":"Change-Id: I4f9a17cf18d0d5227f314e8ac08354a2c1dc79cf"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":18,"id":"7a016987_873896ef","line":9,"updated":"2015-05-29 00:44:45.000000000","message":"Please don\u0027t use \"Added\", simple put \"add\" or remove this line completely as it duplicates the previous.\n\nBetter yet, rewrite it with a little more explanation of what this patch does. But please follow the https://wiki.openstack.org/wiki/GitCommitMessages","commit_id":"c7a85402d38f690602c95ac9f56e0ce3a9efa968"}],"rally/benchmark/context/sahara/sahara_input_data_sources.py":[{"author":{"_account_id":7132,"name":"Nikita Konovalov","email":"nkonovalov@mirantis.com","username":"nkonovalov"},"change_message_id":"8cdc2d2764bdd501715141a5bd02422f5fb164c0","unresolved":false,"context_lines":[{"line_number":102,"context_line":"        self.context[\"container_name\"] \u003d ("},{"line_number":103,"context_line":"            swift._create_container(container_name\u003dinput_url)"},{"line_number":104,"context_line":"        )"},{"line_number":105,"context_line":"        credential \u003d self.context[\"admin\"].get(\"endpoint\").__dict__"},{"line_number":106,"context_line":"        for swift_file in swift_files:"},{"line_number":107,"context_line":"            content \u003d requests.get(swift_file[\"download_url\"]).content"},{"line_number":108,"context_line":"            self.context[\"swift_objects\"].append("}],"source_content_type":"text/x-python","patch_set":4,"id":"1aca2d91_01f3e974","line":105,"updated":"2015-05-06 10:26:31.000000000","message":"Why are you using admin credentials here? The regular user can create containers and upload objects.","commit_id":"08c7289ffc753a88856a05b0c01fad6a6d52d63f"}],"rally/benchmark/scenarios/sahara/jobs.py":[{"author":{"_account_id":7132,"name":"Nikita Konovalov","email":"nkonovalov@mirantis.com","username":"nkonovalov"},"change_message_id":"08e0a0462c425a310f26a52bea6910920022e893","unresolved":false,"context_lines":[{"line_number":127,"context_line":"    @validation.required_services(consts.Service.SAHARA)"},{"line_number":128,"context_line":"    @validation.required_contexts(\"sahara_input_data_sources\")"},{"line_number":129,"context_line":"    @base.scenario(context\u003d{\"cleanup\": [\"sahara\"]})"},{"line_number":130,"context_line":"    def create_swift_input_data_sources(self):"},{"line_number":131,"context_line":"        \"\"\"Create and remove a input data sources for the Sahara EDP Jobs."},{"line_number":132,"context_line":""},{"line_number":133,"context_line":"        This scenario Creates and Remove input data sources for every EDP job."}],"source_content_type":"text/x-python","patch_set":8,"id":"7a016987_e07874f4","line":130,"updated":"2015-05-18 10:28:43.000000000","message":"Please remove this empty benchmark.","commit_id":"d6c41f9e240c168767b54948a20d83fcdef3a88a"}],"rally/plugins/openstack/context/sahara/sahara_input_data_sources.py":[{"author":{"_account_id":13609,"name":"Pavel Boldin","email":"pboldin@mirantis.com","username":"pboldin"},"change_message_id":"1e1e805cc7c4e9cb54093fa78d586502b1c29a1d","unresolved":false,"context_lines":[{"line_number":66,"context_line":""},{"line_number":67,"context_line":"    def __init__(self, context):"},{"line_number":68,"context_line":"        super(SaharaInputDataSources, self).__init__(context)"},{"line_number":69,"context_line":"        self.context[\"swift_objects\"] \u003d []"},{"line_number":70,"context_line":"        self.context[\"container_name\"] \u003d None"},{"line_number":71,"context_line":""},{"line_number":72,"context_line":"    @rutils.log_task_wrapper(LOG.info,"}],"source_content_type":"text/x-python","patch_set":18,"id":"7a016987_6a59e134","line":69,"updated":"2015-05-29 00:44:45.000000000","message":"Please put these in the `setup\u0027 instead and remove the __init__ completely.","commit_id":"c7a85402d38f690602c95ac9f56e0ce3a9efa968"},{"author":{"_account_id":13609,"name":"Pavel Boldin","email":"pboldin@mirantis.com","username":"pboldin"},"change_message_id":"1e1e805cc7c4e9cb54093fa78d586502b1c29a1d","unresolved":false,"context_lines":[{"line_number":76,"context_line":"        input_type \u003d self.config[\"input_type\"]"},{"line_number":77,"context_line":"        input_url \u003d self.config[\"input_url\"]"},{"line_number":78,"context_line":""},{"line_number":79,"context_line":"        for user, tenant_id in rutils.iterate_per_tenants("},{"line_number":80,"context_line":"                self.context[\"users\"]):"},{"line_number":81,"context_line":""},{"line_number":82,"context_line":"            clients \u003d osclients.Clients(user[\"endpoint\"])"}],"source_content_type":"text/x-python","patch_set":18,"id":"7a016987_cad45521","line":79,"updated":"2015-05-29 00:44:45.000000000","message":"Please consider switching to a `broker\u0027 API here.","commit_id":"c7a85402d38f690602c95ac9f56e0ce3a9efa968"},{"author":{"_account_id":13609,"name":"Pavel Boldin","email":"pboldin@mirantis.com","username":"pboldin"},"change_message_id":"1e1e805cc7c4e9cb54093fa78d586502b1c29a1d","unresolved":false,"context_lines":[{"line_number":85,"context_line":"            if input_type \u003d\u003d \"swift\":"},{"line_number":86,"context_line":"                username \u003d user[\"endpoint\"].username"},{"line_number":87,"context_line":"                password \u003d user[\"endpoint\"].password"},{"line_number":88,"context_line":"                self.setup_inputs_swift(clients, sahara, tenant_id,"},{"line_number":89,"context_line":"                                        input_url, self.config[\"swift_files\"],"},{"line_number":90,"context_line":"                                        username, password)"},{"line_number":91,"context_line":"            else:"}],"source_content_type":"text/x-python","patch_set":18,"id":"7a016987_8a0c1ded","line":88,"updated":"2015-05-29 00:44:45.000000000","message":"Passing that much of arguments is not a very good thing. Please consider reimplementing `setup_inputs_swift\u0027 as stated in the following comment.","commit_id":"c7a85402d38f690602c95ac9f56e0ce3a9efa968"},{"author":{"_account_id":13609,"name":"Pavel Boldin","email":"pboldin@mirantis.com","username":"pboldin"},"change_message_id":"1e1e805cc7c4e9cb54093fa78d586502b1c29a1d","unresolved":false,"context_lines":[{"line_number":100,"context_line":""},{"line_number":101,"context_line":"        self.context[\"tenants\"][tenant_id][\"sahara_input\"] \u003d input_ds.id"},{"line_number":102,"context_line":""},{"line_number":103,"context_line":"    def setup_inputs_swift(self, clients, sahara, tenant_id,"},{"line_number":104,"context_line":"                           input_url, swift_files, username, password):"},{"line_number":105,"context_line":"        swift \u003d swift_utils.SwiftScenario(clients\u003dclients)"},{"line_number":106,"context_line":"        container_name \u003d parse.urlparse(input_url).netloc.rstrip(\".sahara\")"}],"source_content_type":"text/x-python","patch_set":18,"id":"7a016987_4a74e566","line":103,"updated":"2015-05-29 00:44:45.000000000","message":"Reimplement as following instead:\n def setup_inputs_swift(self, clients, user, tenant, input_url)\n\nUse `user[\"endpoint\"].username\u0027 as `username\u0027 and `user[\"endpoint\"].password\u0027 as `password\u0027.\n\nUse `tenant\u0027 instead of `self.context[\"tenants\"][tenant_id]\u0027.\n\nUse `self.config[\"swift_files\"]\u0027 instead of `swift_files\u0027.","commit_id":"c7a85402d38f690602c95ac9f56e0ce3a9efa968"},{"author":{"_account_id":13609,"name":"Pavel Boldin","email":"pboldin@mirantis.com","username":"pboldin"},"change_message_id":"1e1e805cc7c4e9cb54093fa78d586502b1c29a1d","unresolved":false,"context_lines":[{"line_number":102,"context_line":""},{"line_number":103,"context_line":"    def setup_inputs_swift(self, clients, sahara, tenant_id,"},{"line_number":104,"context_line":"                           input_url, swift_files, username, password):"},{"line_number":105,"context_line":"        swift \u003d swift_utils.SwiftScenario(clients\u003dclients)"},{"line_number":106,"context_line":"        container_name \u003d parse.urlparse(input_url).netloc.rstrip(\".sahara\")"},{"line_number":107,"context_line":"        self.context[\"container_name\"] \u003d ("},{"line_number":108,"context_line":"            swift._create_container(container_name\u003dcontainer_name)"}],"source_content_type":"text/x-python","patch_set":18,"id":"7a016987_8a1d3d64","line":105,"updated":"2015-05-29 00:44:45.000000000","message":"Please name this \"swift_scenario\". Please avoid using common openstack names as a names in your code.","commit_id":"c7a85402d38f690602c95ac9f56e0ce3a9efa968"},{"author":{"_account_id":13609,"name":"Pavel Boldin","email":"pboldin@mirantis.com","username":"pboldin"},"change_message_id":"1e1e805cc7c4e9cb54093fa78d586502b1c29a1d","unresolved":false,"context_lines":[{"line_number":103,"context_line":"    def setup_inputs_swift(self, clients, sahara, tenant_id,"},{"line_number":104,"context_line":"                           input_url, swift_files, username, password):"},{"line_number":105,"context_line":"        swift \u003d swift_utils.SwiftScenario(clients\u003dclients)"},{"line_number":106,"context_line":"        container_name \u003d parse.urlparse(input_url).netloc.rstrip(\".sahara\")"},{"line_number":107,"context_line":"        self.context[\"container_name\"] \u003d ("},{"line_number":108,"context_line":"            swift._create_container(container_name\u003dcontainer_name)"},{"line_number":109,"context_line":"        )"}],"source_content_type":"text/x-python","patch_set":18,"id":"7a016987_6a70c1a4","line":106,"updated":"2015-05-29 00:44:45.000000000","message":"Why do you do this everytime setup_inputs_swifth is called? Just do it once in `setup\u0027.","commit_id":"c7a85402d38f690602c95ac9f56e0ce3a9efa968"},{"author":{"_account_id":13609,"name":"Pavel Boldin","email":"pboldin@mirantis.com","username":"pboldin"},"change_message_id":"1e1e805cc7c4e9cb54093fa78d586502b1c29a1d","unresolved":false,"context_lines":[{"line_number":110,"context_line":"        for swift_file in swift_files:"},{"line_number":111,"context_line":"            content \u003d requests.get(swift_file[\"download_url\"]).content"},{"line_number":112,"context_line":"            self.context[\"swift_objects\"].append("},{"line_number":113,"context_line":"                swift._upload_object(self.context[\"container_name\"],"},{"line_number":114,"context_line":"                                     content,"},{"line_number":115,"context_line":"                                     object_name\u003dswift_file[\"name\"]))"},{"line_number":116,"context_line":"            input_ds_swift \u003d sahara.data_sources.create("}],"source_content_type":"text/x-python","patch_set":18,"id":"7a016987_2a1f6909","line":113,"updated":"2015-05-29 00:44:45.000000000","message":"Please consider indentation:\n inst.method(\n   aaa, bbb, ccc)\n\ninstead of \n inst.method(aaaa,\n             bbbb)","commit_id":"c7a85402d38f690602c95ac9f56e0ce3a9efa968"},{"author":{"_account_id":13609,"name":"Pavel Boldin","email":"pboldin@mirantis.com","username":"pboldin"},"change_message_id":"1e1e805cc7c4e9cb54093fa78d586502b1c29a1d","unresolved":false,"context_lines":[{"line_number":113,"context_line":"                swift._upload_object(self.context[\"container_name\"],"},{"line_number":114,"context_line":"                                     content,"},{"line_number":115,"context_line":"                                     object_name\u003dswift_file[\"name\"]))"},{"line_number":116,"context_line":"            input_ds_swift \u003d sahara.data_sources.create("},{"line_number":117,"context_line":"                name\u003d\"input_ds_swift\","},{"line_number":118,"context_line":"                description\u003d\"\","},{"line_number":119,"context_line":"                data_source_type\u003d\"swift\","}],"source_content_type":"text/x-python","patch_set":18,"id":"7a016987_0a6a6d81","line":116,"updated":"2015-05-29 00:44:45.000000000","message":"Please use clients.shara() here.","commit_id":"c7a85402d38f690602c95ac9f56e0ce3a9efa968"},{"author":{"_account_id":13609,"name":"Pavel Boldin","email":"pboldin@mirantis.com","username":"pboldin"},"change_message_id":"1e1e805cc7c4e9cb54093fa78d586502b1c29a1d","unresolved":false,"context_lines":[{"line_number":130,"context_line":"    def cleanup(self):"},{"line_number":131,"context_line":"        resources \u003d [\"data_sources\"]"},{"line_number":132,"context_line":""},{"line_number":133,"context_line":"        for user, tenant_id in rutils.iterate_per_tenants("},{"line_number":134,"context_line":"                self.context[\"users\"]):"},{"line_number":135,"context_line":"            clients \u003d osclients.Clients(user[\"endpoint\"])"},{"line_number":136,"context_line":"            swift \u003d swift_utils.SwiftScenario(clients\u003dclients)"}],"source_content_type":"text/x-python","patch_set":18,"id":"7a016987_aaa119fa","line":133,"updated":"2015-05-29 00:44:45.000000000","message":"Please place under:\n if self.context[\"container_name\"] is not None:\n   ...\n\nAnd, probably, separate it to a function `_cleanup_swift_files\u0027:\n if self.context[\"container_name\"] is not None:\n    self._cleanup_swift_files()\n\nPlease consider using `broker\u0027 API for multithreading and it\u0027s caching to store cached `osclients.Clients\u0027 values.","commit_id":"c7a85402d38f690602c95ac9f56e0ce3a9efa968"},{"author":{"_account_id":13609,"name":"Pavel Boldin","email":"pboldin@mirantis.com","username":"pboldin"},"change_message_id":"1e1e805cc7c4e9cb54093fa78d586502b1c29a1d","unresolved":false,"context_lines":[{"line_number":133,"context_line":"        for user, tenant_id in rutils.iterate_per_tenants("},{"line_number":134,"context_line":"                self.context[\"users\"]):"},{"line_number":135,"context_line":"            clients \u003d osclients.Clients(user[\"endpoint\"])"},{"line_number":136,"context_line":"            swift \u003d swift_utils.SwiftScenario(clients\u003dclients)"},{"line_number":137,"context_line":"            if self.context[\"container_name\"] is not None:"},{"line_number":138,"context_line":"                for swift_object in self.context[\"swift_objects\"]:"},{"line_number":139,"context_line":"                    swift._delete_object(self.context[\"container_name\"],"}],"source_content_type":"text/x-python","patch_set":18,"id":"7a016987_eab3914b","line":136,"updated":"2015-05-29 00:44:45.000000000","message":"Please name this `swift_scenario\u0027.","commit_id":"c7a85402d38f690602c95ac9f56e0ce3a9efa968"},{"author":{"_account_id":13609,"name":"Pavel Boldin","email":"pboldin@mirantis.com","username":"pboldin"},"change_message_id":"1e1e805cc7c4e9cb54093fa78d586502b1c29a1d","unresolved":false,"context_lines":[{"line_number":134,"context_line":"                self.context[\"users\"]):"},{"line_number":135,"context_line":"            clients \u003d osclients.Clients(user[\"endpoint\"])"},{"line_number":136,"context_line":"            swift \u003d swift_utils.SwiftScenario(clients\u003dclients)"},{"line_number":137,"context_line":"            if self.context[\"container_name\"] is not None:"},{"line_number":138,"context_line":"                for swift_object in self.context[\"swift_objects\"]:"},{"line_number":139,"context_line":"                    swift._delete_object(self.context[\"container_name\"],"},{"line_number":140,"context_line":"                                         swift_object[1])"}],"source_content_type":"text/x-python","patch_set":18,"id":"7a016987_6aa7a10b","line":137,"updated":"2015-05-29 00:44:45.000000000","message":"And remove this check then.","commit_id":"c7a85402d38f690602c95ac9f56e0ce3a9efa968"},{"author":{"_account_id":13609,"name":"Pavel Boldin","email":"pboldin@mirantis.com","username":"pboldin"},"change_message_id":"1e1e805cc7c4e9cb54093fa78d586502b1c29a1d","unresolved":false,"context_lines":[{"line_number":136,"context_line":"            swift \u003d swift_utils.SwiftScenario(clients\u003dclients)"},{"line_number":137,"context_line":"            if self.context[\"container_name\"] is not None:"},{"line_number":138,"context_line":"                for swift_object in self.context[\"swift_objects\"]:"},{"line_number":139,"context_line":"                    swift._delete_object(self.context[\"container_name\"],"},{"line_number":140,"context_line":"                                         swift_object[1])"},{"line_number":141,"context_line":"        swift._delete_container(self.context[\"container_name\"])"},{"line_number":142,"context_line":""}],"source_content_type":"text/x-python","patch_set":18,"id":"7a016987_4adf4569","line":139,"updated":"2015-05-29 00:44:45.000000000","message":"Please make sure *zero* of these are able to raise an exception.\n\nPython is implicit-return-at-any-line language due to the exceptions. Failure to remove an object should not stop others from being removed. But it will if `_delete_object\u0027 raises an exception.\n\nBasically, if ANY part of `setup\u0027 fails `setup\u0027 should FAIL.\n\nIf ANY part of `cleanup\u0027 fails `cleanup\u0027 should do as much as possible for the other parts.","commit_id":"c7a85402d38f690602c95ac9f56e0ce3a9efa968"},{"author":{"_account_id":12395,"name":"Roman Vasylets","email":"pomeo92@gmail.com","username":"rvasilets"},"change_message_id":"8c51eb2d29d6df6304756f6c14c6f27c3a16dba9","unresolved":false,"context_lines":[{"line_number":87,"context_line":""},{"line_number":88,"context_line":"    def setup_inputs(self, clients, tenant_id, input_type, input_url):"},{"line_number":89,"context_line":"        input_ds \u003d clients.sahara().data_sources.create("},{"line_number":90,"context_line":"            name\u003d\"input_ds\","},{"line_number":91,"context_line":"            description\u003d\"\","},{"line_number":92,"context_line":"            data_source_type\u003dinput_type,"},{"line_number":93,"context_line":"            url\u003dinput_url)"}],"source_content_type":"text/x-python","patch_set":19,"id":"3afb71cf_ee51f00f","line":90,"updated":"2015-06-05 00:04:47.000000000","message":"Lets set prefix \"rally_\"","commit_id":"a65053f8d1f56a7ff1825db900154febfbdc4574"},{"author":{"_account_id":13919,"name":"Evgeny Sikachev","email":"esikachov@gmail.com","username":"esikachev"},"change_message_id":"6887c61c5d6960a95061fafa23f61bac3899426d","unresolved":false,"context_lines":[{"line_number":87,"context_line":""},{"line_number":88,"context_line":"    def setup_inputs(self, clients, tenant_id, input_type, input_url):"},{"line_number":89,"context_line":"        input_ds \u003d clients.sahara().data_sources.create("},{"line_number":90,"context_line":"            name\u003d\"input_ds\","},{"line_number":91,"context_line":"            description\u003d\"\","},{"line_number":92,"context_line":"            data_source_type\u003dinput_type,"},{"line_number":93,"context_line":"            url\u003dinput_url)"}],"source_content_type":"text/x-python","patch_set":19,"id":"3afb71cf_6a1de165","line":90,"in_reply_to":"3afb71cf_ee51f00f","updated":"2015-06-05 08:15:15.000000000","message":"Done","commit_id":"a65053f8d1f56a7ff1825db900154febfbdc4574"},{"author":{"_account_id":12395,"name":"Roman Vasylets","email":"pomeo92@gmail.com","username":"rvasilets"},"change_message_id":"8c51eb2d29d6df6304756f6c14c6f27c3a16dba9","unresolved":false,"context_lines":[{"line_number":99,"context_line":"        swift_scenario \u003d swift_utils.SwiftScenario(clients\u003dclients)"},{"line_number":100,"context_line":"        container_name \u003d parse.urlparse(input_url).netloc.rstrip(\".sahara\")"},{"line_number":101,"context_line":"        self.context[\"container_name\"] \u003d ("},{"line_number":102,"context_line":"            swift_scenario._create_container(container_name\u003dcontainer_name)"},{"line_number":103,"context_line":"        )"},{"line_number":104,"context_line":"        for swift_file in swift_files:"},{"line_number":105,"context_line":"            content \u003d requests.get(swift_file[\"download_url\"]).content"}],"source_content_type":"text/x-python","patch_set":19,"id":"3afb71cf_cb43c66b","line":102,"updated":"2015-06-05 00:04:47.000000000","message":"I think we sould explicit set prefix to \"rally_\". \nNext... Its my thoughts better to listen one more person. I think we should use swift context because such way leads to duplication of code.","commit_id":"a65053f8d1f56a7ff1825db900154febfbdc4574"},{"author":{"_account_id":13919,"name":"Evgeny Sikachev","email":"esikachov@gmail.com","username":"esikachev"},"change_message_id":"6887c61c5d6960a95061fafa23f61bac3899426d","unresolved":false,"context_lines":[{"line_number":99,"context_line":"        swift_scenario \u003d swift_utils.SwiftScenario(clients\u003dclients)"},{"line_number":100,"context_line":"        container_name \u003d parse.urlparse(input_url).netloc.rstrip(\".sahara\")"},{"line_number":101,"context_line":"        self.context[\"container_name\"] \u003d ("},{"line_number":102,"context_line":"            swift_scenario._create_container(container_name\u003dcontainer_name)"},{"line_number":103,"context_line":"        )"},{"line_number":104,"context_line":"        for swift_file in swift_files:"},{"line_number":105,"context_line":"            content \u003d requests.get(swift_file[\"download_url\"]).content"}],"source_content_type":"text/x-python","patch_set":19,"id":"3afb71cf_8a101d50","line":102,"in_reply_to":"3afb71cf_cb43c66b","updated":"2015-06-05 08:15:15.000000000","message":"Done","commit_id":"a65053f8d1f56a7ff1825db900154febfbdc4574"},{"author":{"_account_id":12395,"name":"Roman Vasylets","email":"pomeo92@gmail.com","username":"rvasilets"},"change_message_id":"8c51eb2d29d6df6304756f6c14c6f27c3a16dba9","unresolved":false,"context_lines":[{"line_number":108,"context_line":"                    self.context[\"container_name\"], content,"},{"line_number":109,"context_line":"                    object_name\u003dswift_file[\"name\"]))"},{"line_number":110,"context_line":"            input_ds_swift \u003d clients.sahara().data_sources.create("},{"line_number":111,"context_line":"                name\u003d\"input_ds_swift\","},{"line_number":112,"context_line":"                description\u003d\"\","},{"line_number":113,"context_line":"                data_source_type\u003d\"swift\","},{"line_number":114,"context_line":"                url\u003dinput_url,"}],"source_content_type":"text/x-python","patch_set":19,"id":"3afb71cf_cef2b406","line":111,"updated":"2015-06-05 00:04:47.000000000","message":"prefix \"rally_\"?","commit_id":"a65053f8d1f56a7ff1825db900154febfbdc4574"},{"author":{"_account_id":13919,"name":"Evgeny Sikachev","email":"esikachov@gmail.com","username":"esikachev"},"change_message_id":"6887c61c5d6960a95061fafa23f61bac3899426d","unresolved":false,"context_lines":[{"line_number":108,"context_line":"                    self.context[\"container_name\"], content,"},{"line_number":109,"context_line":"                    object_name\u003dswift_file[\"name\"]))"},{"line_number":110,"context_line":"            input_ds_swift \u003d clients.sahara().data_sources.create("},{"line_number":111,"context_line":"                name\u003d\"input_ds_swift\","},{"line_number":112,"context_line":"                description\u003d\"\","},{"line_number":113,"context_line":"                data_source_type\u003d\"swift\","},{"line_number":114,"context_line":"                url\u003dinput_url,"}],"source_content_type":"text/x-python","patch_set":19,"id":"3afb71cf_aa13d95b","line":111,"in_reply_to":"3afb71cf_cef2b406","updated":"2015-06-05 08:15:15.000000000","message":"Done","commit_id":"a65053f8d1f56a7ff1825db900154febfbdc4574"},{"author":{"_account_id":12395,"name":"Roman Vasylets","email":"pomeo92@gmail.com","username":"rvasilets"},"change_message_id":"8c51eb2d29d6df6304756f6c14c6f27c3a16dba9","unresolved":false,"context_lines":[{"line_number":115,"context_line":"                credential_user\u003dusername,"},{"line_number":116,"context_line":"                credential_pass\u003dpassword)"},{"line_number":117,"context_line":""},{"line_number":118,"context_line":"            self.context[\"tenants\"][tenant_id][\"sahara_input\"] \u003d ("},{"line_number":119,"context_line":"                input_ds_swift.id"},{"line_number":120,"context_line":"            )"},{"line_number":121,"context_line":""}],"source_content_type":"text/x-python","patch_set":19,"id":"3afb71cf_0ee9ec1a","line":118,"updated":"2015-06-05 00:04:47.000000000","message":"Why we assign new value in every iteration?","commit_id":"a65053f8d1f56a7ff1825db900154febfbdc4574"},{"author":{"_account_id":13919,"name":"Evgeny Sikachev","email":"esikachov@gmail.com","username":"esikachev"},"change_message_id":"6887c61c5d6960a95061fafa23f61bac3899426d","unresolved":false,"context_lines":[{"line_number":115,"context_line":"                credential_user\u003dusername,"},{"line_number":116,"context_line":"                credential_pass\u003dpassword)"},{"line_number":117,"context_line":""},{"line_number":118,"context_line":"            self.context[\"tenants\"][tenant_id][\"sahara_input\"] \u003d ("},{"line_number":119,"context_line":"                input_ds_swift.id"},{"line_number":120,"context_line":"            )"},{"line_number":121,"context_line":""}],"source_content_type":"text/x-python","patch_set":19,"id":"3afb71cf_ca0df538","line":118,"in_reply_to":"3afb71cf_0ee9ec1a","updated":"2015-06-05 08:15:15.000000000","message":"because, in per tenant we can have different inputs","commit_id":"a65053f8d1f56a7ff1825db900154febfbdc4574"},{"author":{"_account_id":12395,"name":"Roman Vasylets","email":"pomeo92@gmail.com","username":"rvasilets"},"change_message_id":"8c51eb2d29d6df6304756f6c14c6f27c3a16dba9","unresolved":false,"context_lines":[{"line_number":124,"context_line":"    def cleanup(self):"},{"line_number":125,"context_line":"        resources \u003d [\"data_sources\"]"},{"line_number":126,"context_line":""},{"line_number":127,"context_line":"        for user, tenant_id in rutils.iterate_per_tenants("},{"line_number":128,"context_line":"                self.context[\"users\"]):"},{"line_number":129,"context_line":"            clients \u003d osclients.Clients(user[\"endpoint\"])"},{"line_number":130,"context_line":"            swift_scenario \u003d swift_utils.SwiftScenario(clients\u003dclients)"}],"source_content_type":"text/x-python","patch_set":19,"id":"3afb71cf_6ecbc073","line":127,"updated":"2015-06-05 00:04:47.000000000","message":"I think this must to be done in cleanup manager","commit_id":"a65053f8d1f56a7ff1825db900154febfbdc4574"},{"author":{"_account_id":12395,"name":"Roman Vasylets","email":"pomeo92@gmail.com","username":"rvasilets"},"change_message_id":"d01f8885b3f767c2acc82f7f98e09731cb670782","unresolved":false,"context_lines":[{"line_number":70,"context_line":"        self.context[\"swift_objects\"] \u003d []"},{"line_number":71,"context_line":"        self.context[\"container_name\"] \u003d None"},{"line_number":72,"context_line":"        input_type \u003d self.config[\"input_type\"]"},{"line_number":73,"context_line":"        input_url \u003d self.config[\"input_url\"]"},{"line_number":74,"context_line":""},{"line_number":75,"context_line":"        for user, tenant_id in rutils.iterate_per_tenants("},{"line_number":76,"context_line":"                self.context[\"users\"]):"}],"source_content_type":"text/x-python","patch_set":28,"id":"3a50d1a3_c01fd307","line":73,"updated":"2015-07-31 12:06:48.000000000","message":"Please delete two lines above","commit_id":"6924a8b8fc46ef54250891a7575cffa0b96bfad9"},{"author":{"_account_id":13919,"name":"Evgeny Sikachev","email":"esikachov@gmail.com","username":"esikachev"},"change_message_id":"b3c6c7b99cf83cedcd1b2c39bd2ec0b580191364","unresolved":false,"context_lines":[{"line_number":70,"context_line":"        self.context[\"swift_objects\"] \u003d []"},{"line_number":71,"context_line":"        self.context[\"container_name\"] \u003d None"},{"line_number":72,"context_line":"        input_type \u003d self.config[\"input_type\"]"},{"line_number":73,"context_line":"        input_url \u003d self.config[\"input_url\"]"},{"line_number":74,"context_line":""},{"line_number":75,"context_line":"        for user, tenant_id in rutils.iterate_per_tenants("},{"line_number":76,"context_line":"                self.context[\"users\"]):"}],"source_content_type":"text/x-python","patch_set":28,"id":"3a50d1a3_afcf1328","line":73,"in_reply_to":"3a50d1a3_c01fd307","updated":"2015-07-31 14:12:35.000000000","message":"i think, be better use vars. because in line 79,84 we can get copy-paste","commit_id":"6924a8b8fc46ef54250891a7575cffa0b96bfad9"},{"author":{"_account_id":12395,"name":"Roman Vasylets","email":"pomeo92@gmail.com","username":"rvasilets"},"change_message_id":"d01f8885b3f767c2acc82f7f98e09731cb670782","unresolved":false,"context_lines":[{"line_number":93,"context_line":"        self.context[\"tenants\"][tenant_id][\"sahara_input\"] \u003d input_ds.id"},{"line_number":94,"context_line":""},{"line_number":95,"context_line":"    def setup_inputs_swift(self, clients, tenant_id, input_url,"},{"line_number":96,"context_line":"                           swift_files, username, password):"},{"line_number":97,"context_line":"        swift_scenario \u003d swift_utils.SwiftScenario(clients\u003dclients)"},{"line_number":98,"context_line":"        container_name \u003d \"rally_\" + parse.urlparse(input_url).netloc.rstrip("},{"line_number":99,"context_line":"            \".sahara\")"}],"source_content_type":"text/x-python","patch_set":28,"id":"3a50d1a3_003a9be7","line":96,"updated":"2015-07-31 12:06:48.000000000","message":"If we have swift as input type but not specified swift objects this function will create an empty container. That containers wouldn\u0027t be deleted. I think its not a good behaviour.","commit_id":"6924a8b8fc46ef54250891a7575cffa0b96bfad9"},{"author":{"_account_id":13919,"name":"Evgeny Sikachev","email":"esikachov@gmail.com","username":"esikachev"},"change_message_id":"b3c6c7b99cf83cedcd1b2c39bd2ec0b580191364","unresolved":false,"context_lines":[{"line_number":93,"context_line":"        self.context[\"tenants\"][tenant_id][\"sahara_input\"] \u003d input_ds.id"},{"line_number":94,"context_line":""},{"line_number":95,"context_line":"    def setup_inputs_swift(self, clients, tenant_id, input_url,"},{"line_number":96,"context_line":"                           swift_files, username, password):"},{"line_number":97,"context_line":"        swift_scenario \u003d swift_utils.SwiftScenario(clients\u003dclients)"},{"line_number":98,"context_line":"        container_name \u003d \"rally_\" + parse.urlparse(input_url).netloc.rstrip("},{"line_number":99,"context_line":"            \".sahara\")"}],"source_content_type":"text/x-python","patch_set":28,"id":"3a50d1a3_3ac25f54","line":96,"in_reply_to":"3a50d1a3_003a9be7","updated":"2015-07-31 14:12:35.000000000","message":"see line 46-59. we can\u0027t not specify swift-objects","commit_id":"6924a8b8fc46ef54250891a7575cffa0b96bfad9"},{"author":{"_account_id":12395,"name":"Roman Vasylets","email":"pomeo92@gmail.com","username":"rvasilets"},"change_message_id":"d01f8885b3f767c2acc82f7f98e09731cb670782","unresolved":false,"context_lines":[{"line_number":111,"context_line":"                data_source_type\u003d\"swift\","},{"line_number":112,"context_line":"                url\u003dinput_url,"},{"line_number":113,"context_line":"                credential_user\u003dusername,"},{"line_number":114,"context_line":"                credential_pass\u003dpassword)"},{"line_number":115,"context_line":""},{"line_number":116,"context_line":"            self.context[\"tenants\"][tenant_id][\"sahara_input\"] \u003d ("},{"line_number":117,"context_line":"                input_ds_swift.id"}],"source_content_type":"text/x-python","patch_set":28,"id":"3a50d1a3_eae5340a","line":114,"updated":"2015-07-31 12:06:48.000000000","message":"This could be write in fewer lines","commit_id":"6924a8b8fc46ef54250891a7575cffa0b96bfad9"},{"author":{"_account_id":13919,"name":"Evgeny Sikachev","email":"esikachov@gmail.com","username":"esikachev"},"change_message_id":"b3c6c7b99cf83cedcd1b2c39bd2ec0b580191364","unresolved":false,"context_lines":[{"line_number":111,"context_line":"                data_source_type\u003d\"swift\","},{"line_number":112,"context_line":"                url\u003dinput_url,"},{"line_number":113,"context_line":"                credential_user\u003dusername,"},{"line_number":114,"context_line":"                credential_pass\u003dpassword)"},{"line_number":115,"context_line":""},{"line_number":116,"context_line":"            self.context[\"tenants\"][tenant_id][\"sahara_input\"] \u003d ("},{"line_number":117,"context_line":"                input_ds_swift.id"}],"source_content_type":"text/x-python","patch_set":28,"id":"3a50d1a3_faa2b7ac","line":114,"in_reply_to":"3a50d1a3_eae5340a","updated":"2015-07-31 14:12:35.000000000","message":"Done","commit_id":"6924a8b8fc46ef54250891a7575cffa0b96bfad9"},{"author":{"_account_id":12395,"name":"Roman Vasylets","email":"pomeo92@gmail.com","username":"rvasilets"},"change_message_id":"d01f8885b3f767c2acc82f7f98e09731cb670782","unresolved":false,"context_lines":[{"line_number":129,"context_line":"                for swift_object in self.context[\"swift_objects\"]:"},{"line_number":130,"context_line":"                    swift_scenario._delete_object("},{"line_number":131,"context_line":"                        self.context[\"container_name\"], swift_object[1])"},{"line_number":132,"context_line":"        swift_scenario._delete_container(self.context[\"container_name\"])"},{"line_number":133,"context_line":""},{"line_number":134,"context_line":"        # TODO(boris-42): Delete only resources created by this context"},{"line_number":135,"context_line":"        resource_manager.cleanup("}],"source_content_type":"text/x-python","patch_set":28,"id":"3a50d1a3_ca72b811","line":132,"updated":"2015-07-31 12:06:48.000000000","message":"This should be write using our cleanup manager. https://github.com/openstack/rally/blob/master/rally/plugins/openstack/context/cleanup/resources.py Swift containers should be deleted by swift cleanup","commit_id":"6924a8b8fc46ef54250891a7575cffa0b96bfad9"},{"author":{"_account_id":13919,"name":"Evgeny Sikachev","email":"esikachov@gmail.com","username":"esikachev"},"change_message_id":"b3c6c7b99cf83cedcd1b2c39bd2ec0b580191364","unresolved":false,"context_lines":[{"line_number":129,"context_line":"                for swift_object in self.context[\"swift_objects\"]:"},{"line_number":130,"context_line":"                    swift_scenario._delete_object("},{"line_number":131,"context_line":"                        self.context[\"container_name\"], swift_object[1])"},{"line_number":132,"context_line":"        swift_scenario._delete_container(self.context[\"container_name\"])"},{"line_number":133,"context_line":""},{"line_number":134,"context_line":"        # TODO(boris-42): Delete only resources created by this context"},{"line_number":135,"context_line":"        resource_manager.cleanup("}],"source_content_type":"text/x-python","patch_set":28,"id":"3a50d1a3_3b4341b1","line":132,"in_reply_to":"3a50d1a3_ca72b811","updated":"2015-07-31 14:12:35.000000000","message":"Done","commit_id":"6924a8b8fc46ef54250891a7575cffa0b96bfad9"},{"author":{"_account_id":12395,"name":"Roman Vasylets","email":"pomeo92@gmail.com","username":"rvasilets"},"change_message_id":"07f9a04a13a2b1618a20f85e214c259d8704fe13","unresolved":false,"context_lines":[{"line_number":71,"context_line":"        self.context[\"swift_objects\"] \u003d []"},{"line_number":72,"context_line":"        self.context[\"container_name\"] \u003d None"},{"line_number":73,"context_line":"        input_type \u003d self.config[\"input_type\"]"},{"line_number":74,"context_line":"        input_url \u003d self.config[\"input_url\"]"},{"line_number":75,"context_line":""},{"line_number":76,"context_line":"        for user, tenant_id in rutils.iterate_per_tenants("},{"line_number":77,"context_line":"                self.context[\"users\"]):"}],"source_content_type":"text/x-python","patch_set":29,"id":"3a50d1a3_027cc7b3","line":74,"updated":"2015-07-31 21:08:29.000000000","message":"I have wrote previously that our PTL don\u0027t like extra variables","commit_id":"f4cb8ebbc4b9c3981d86691aaf2a6335516b489f"},{"author":{"_account_id":13919,"name":"Evgeny Sikachev","email":"esikachov@gmail.com","username":"esikachev"},"change_message_id":"d67a12af893be59510d9185f897b88988c58ec15","unresolved":false,"context_lines":[{"line_number":71,"context_line":"        self.context[\"swift_objects\"] \u003d []"},{"line_number":72,"context_line":"        self.context[\"container_name\"] \u003d None"},{"line_number":73,"context_line":"        input_type \u003d self.config[\"input_type\"]"},{"line_number":74,"context_line":"        input_url \u003d self.config[\"input_url\"]"},{"line_number":75,"context_line":""},{"line_number":76,"context_line":"        for user, tenant_id in rutils.iterate_per_tenants("},{"line_number":77,"context_line":"                self.context[\"users\"]):"}],"source_content_type":"text/x-python","patch_set":29,"id":"3a50d1a3_d9d8e255","line":74,"in_reply_to":"3a50d1a3_027cc7b3","updated":"2015-08-03 12:11:20.000000000","message":"Done","commit_id":"f4cb8ebbc4b9c3981d86691aaf2a6335516b489f"},{"author":{"_account_id":12395,"name":"Roman Vasylets","email":"pomeo92@gmail.com","username":"rvasilets"},"change_message_id":"c79a1badcd7c40b599046eb490d8ebf8bc6e513e","unresolved":false,"context_lines":[{"line_number":99,"context_line":"        container_name \u003d \"rally_\" + parse.urlparse(input_url).netloc.rstrip("},{"line_number":100,"context_line":"            \".sahara\")"},{"line_number":101,"context_line":"        self.context[\"container_name\"] \u003d ("},{"line_number":102,"context_line":"            swift_scenario._create_container(container_name\u003dcontainer_name))"},{"line_number":103,"context_line":"        for swift_file in swift_files:"},{"line_number":104,"context_line":"            content \u003d requests.get(swift_file[\"download_url\"]).content"},{"line_number":105,"context_line":"            self.context[\"swift_objects\"].append("}],"source_content_type":"text/x-python","patch_set":29,"id":"3a50d1a3_d3c9cf26","line":102,"updated":"2015-07-31 21:41:06.000000000","message":"Also this need to be done by swift conext, not sahara. Don\u0027t create swift objects in sahara context. There is swift context for that.","commit_id":"f4cb8ebbc4b9c3981d86691aaf2a6335516b489f"},{"author":{"_account_id":13919,"name":"Evgeny Sikachev","email":"esikachov@gmail.com","username":"esikachev"},"change_message_id":"d67a12af893be59510d9185f897b88988c58ec15","unresolved":false,"context_lines":[{"line_number":99,"context_line":"        container_name \u003d \"rally_\" + parse.urlparse(input_url).netloc.rstrip("},{"line_number":100,"context_line":"            \".sahara\")"},{"line_number":101,"context_line":"        self.context[\"container_name\"] \u003d ("},{"line_number":102,"context_line":"            swift_scenario._create_container(container_name\u003dcontainer_name))"},{"line_number":103,"context_line":"        for swift_file in swift_files:"},{"line_number":104,"context_line":"            content \u003d requests.get(swift_file[\"download_url\"]).content"},{"line_number":105,"context_line":"            self.context[\"swift_objects\"].append("}],"source_content_type":"text/x-python","patch_set":29,"id":"3a50d1a3_7922ee55","line":102,"in_reply_to":"3a50d1a3_d3c9cf26","updated":"2015-08-03 12:11:20.000000000","message":"i can\u0027t see it in swift context. can you attach link?","commit_id":"f4cb8ebbc4b9c3981d86691aaf2a6335516b489f"},{"author":{"_account_id":12395,"name":"Roman Vasylets","email":"pomeo92@gmail.com","username":"rvasilets"},"change_message_id":"07f9a04a13a2b1618a20f85e214c259d8704fe13","unresolved":false,"context_lines":[{"line_number":121,"context_line":"        if self.context[\"container_name\"] is not None:"},{"line_number":122,"context_line":"            for swift_object in self.context[\"swift_objects\"]:"},{"line_number":123,"context_line":"                res_cleanup.SwiftObject(resource\u003dswift_object[1])"},{"line_number":124,"context_line":"        res_cleanup.SwiftContainer(resource\u003dself.context[\"container_name\"])"},{"line_number":125,"context_line":""},{"line_number":126,"context_line":"        # TODO(boris-42): Delete only resources created by this context"},{"line_number":127,"context_line":"        resource_manager.cleanup("}],"source_content_type":"text/x-python","patch_set":29,"id":"3a50d1a3_b8c98227","line":124,"updated":"2015-07-31 21:08:29.000000000","message":"It need to be used through decorator for scenario. See other function. Calling swift cleanup in sahara cleanup is bad.","commit_id":"f4cb8ebbc4b9c3981d86691aaf2a6335516b489f"},{"author":{"_account_id":13919,"name":"Evgeny Sikachev","email":"esikachov@gmail.com","username":"esikachev"},"change_message_id":"d67a12af893be59510d9185f897b88988c58ec15","unresolved":false,"context_lines":[{"line_number":121,"context_line":"        if self.context[\"container_name\"] is not None:"},{"line_number":122,"context_line":"            for swift_object in self.context[\"swift_objects\"]:"},{"line_number":123,"context_line":"                res_cleanup.SwiftObject(resource\u003dswift_object[1])"},{"line_number":124,"context_line":"        res_cleanup.SwiftContainer(resource\u003dself.context[\"container_name\"])"},{"line_number":125,"context_line":""},{"line_number":126,"context_line":"        # TODO(boris-42): Delete only resources created by this context"},{"line_number":127,"context_line":"        resource_manager.cleanup("}],"source_content_type":"text/x-python","patch_set":29,"id":"3a50d1a3_b9d39637","line":124,"in_reply_to":"3a50d1a3_b8c98227","updated":"2015-08-03 12:11:20.000000000","message":"ditto","commit_id":"f4cb8ebbc4b9c3981d86691aaf2a6335516b489f"},{"author":{"_account_id":7369,"name":"Sergey Skripnick","email":"sskripnick@mirantis.com","username":"redixin"},"change_message_id":"3268d4321456ec69ea2a6110c951cd521bfe98c2","unresolved":false,"context_lines":[{"line_number":111,"context_line":"            input_ds_swift \u003d clients.sahara().data_sources.create("},{"line_number":112,"context_line":"                name\u003dself.generate_random_name(), description\u003d\"\","},{"line_number":113,"context_line":"                data_source_type\u003d\"swift\", url\u003dinput_url,"},{"line_number":114,"context_line":"                credential_user\u003dusername, credential_pass\u003dpassword)"},{"line_number":115,"context_line":""},{"line_number":116,"context_line":"            self.context[\"tenants\"][tenant_id][\"sahara_input\"] \u003d ("},{"line_number":117,"context_line":"                input_ds_swift.id)"}],"source_content_type":"text/x-python","patch_set":36,"id":"fa80f949_ad1c0114","line":114,"updated":"2015-11-04 16:14:08.000000000","message":"AFAIU _any_ swift service may be used as input_data_source right? (input_url seems to be endpoint of swift service) so there may be any username/password too","commit_id":"b556cd4b16d5b42940a595899f42421072121c7b"},{"author":{"_account_id":9601,"name":"Oleh Anufriiev","email":"oanufriev@mirantis.com","username":"oanufriev"},"change_message_id":"50eec201f247b2ef9ac4b1f0dd4e102f189185bc","unresolved":false,"context_lines":[{"line_number":113,"context_line":"                data_source_type\u003d\"swift\", url\u003dinput_url,"},{"line_number":114,"context_line":"                credential_user\u003dusername, credential_pass\u003dpassword)"},{"line_number":115,"context_line":""},{"line_number":116,"context_line":"            self.context[\"tenants\"][tenant_id][\"sahara_input\"] \u003d ("},{"line_number":117,"context_line":"                input_ds_swift.id)"},{"line_number":118,"context_line":""},{"line_number":119,"context_line":"    @logging.log_task_wrapper(LOG.info, _(\"Exit context: `Sahara Input Data\""},{"line_number":120,"context_line":"                                          \"Sources`\"))"}],"source_content_type":"text/x-python","patch_set":36,"id":"fa80f949_b14ebebf","line":117,"range":{"start_line":116,"start_character":11,"end_line":117,"end_character":34},"updated":"2015-11-03 22:42:42.000000000","message":"why are you using round brackets here and at #103?\n\n\u003e\u003e ... \u003d (input_ds_swift.id)","commit_id":"b556cd4b16d5b42940a595899f42421072121c7b"},{"author":{"_account_id":13919,"name":"Evgeny Sikachev","email":"esikachov@gmail.com","username":"esikachev"},"change_message_id":"d4b8d550c4f541ed06852825801dce39b331005d","unresolved":false,"context_lines":[{"line_number":113,"context_line":"                data_source_type\u003d\"swift\", url\u003dinput_url,"},{"line_number":114,"context_line":"                credential_user\u003dusername, credential_pass\u003dpassword)"},{"line_number":115,"context_line":""},{"line_number":116,"context_line":"            self.context[\"tenants\"][tenant_id][\"sahara_input\"] \u003d ("},{"line_number":117,"context_line":"                input_ds_swift.id)"},{"line_number":118,"context_line":""},{"line_number":119,"context_line":"    @logging.log_task_wrapper(LOG.info, _(\"Exit context: `Sahara Input Data\""},{"line_number":120,"context_line":"                                          \"Sources`\"))"}],"source_content_type":"text/x-python","patch_set":36,"id":"fa80f949_a41d0f68","line":117,"range":{"start_line":116,"start_character":11,"end_line":117,"end_character":34},"in_reply_to":"fa80f949_b14ebebf","updated":"2015-11-04 07:33:25.000000000","message":"for a line break, this is pep8 recomendations https://www.python.org/dev/peps/pep-0008/#maximum-line-length","commit_id":"b556cd4b16d5b42940a595899f42421072121c7b"},{"author":{"_account_id":7369,"name":"Sergey Skripnick","email":"sskripnick@mirantis.com","username":"redixin"},"change_message_id":"3268d4321456ec69ea2a6110c951cd521bfe98c2","unresolved":false,"context_lines":[{"line_number":120,"context_line":"                                          \"Sources`\"))"},{"line_number":121,"context_line":"    def cleanup(self):"},{"line_number":122,"context_line":"        resources \u003d [\"data_sources\"]"},{"line_number":123,"context_line":"        if self.context[\"container_name\"] is not None:"},{"line_number":124,"context_line":"            for swift_object in self.context[\"swift_objects\"]:"},{"line_number":125,"context_line":"                res_cleanup.SwiftObject(resource\u003dswift_object[1])"},{"line_number":126,"context_line":"        res_cleanup.SwiftContainer(resource\u003dself.context[\"container_name\"])"}],"source_content_type":"text/x-python","patch_set":36,"id":"fa80f949_adaba1d5","line":123,"updated":"2015-11-04 16:14:08.000000000","message":"This check is not necessary. context[\"swift_objects\"] is empty list by default, so it safe to just iterate over it","commit_id":"b556cd4b16d5b42940a595899f42421072121c7b"}],"tests/unit/plugins/openstack/context/sahara/test_sahara_input_data_sources.py":[{"author":{"_account_id":13609,"name":"Pavel Boldin","email":"pboldin@mirantis.com","username":"pboldin"},"change_message_id":"1e1e805cc7c4e9cb54093fa78d586502b1c29a1d","unresolved":false,"context_lines":[{"line_number":22,"context_line":"SCN \u003d \"rally.plugins.openstack.scenarios\""},{"line_number":23,"context_line":""},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"class FakeDict(object):"},{"line_number":26,"context_line":"    def __init__(self):"},{"line_number":27,"context_line":"        pass"},{"line_number":28,"context_line":""}],"source_content_type":"text/x-python","patch_set":18,"id":"7a016987_0ad94d22","line":25,"updated":"2015-05-29 00:44:45.000000000","message":"Just use `objects.Endpoint\u0027.","commit_id":"c7a85402d38f690602c95ac9f56e0ce3a9efa968"},{"author":{"_account_id":13609,"name":"Pavel Boldin","email":"pboldin@mirantis.com","username":"pboldin"},"change_message_id":"1e1e805cc7c4e9cb54093fa78d586502b1c29a1d","unresolved":false,"context_lines":[{"line_number":31,"context_line":""},{"line_number":32,"context_line":"    def setUp(self):"},{"line_number":33,"context_line":"        super(SaharaInputDataSourcesTestCase, self).setUp()"},{"line_number":34,"context_line":"        fake_dict \u003d FakeDict()"},{"line_number":35,"context_line":"        fake_dict.__dict__[\"username\"] \u003d \"user\""},{"line_number":36,"context_line":"        fake_dict.__dict__[\"password\"] \u003d \"passwd\""},{"line_number":37,"context_line":"        self.tenants_num \u003d 2"}],"source_content_type":"text/x-python","patch_set":18,"id":"7a016987_4afaa576","line":34,"updated":"2015-05-29 00:44:45.000000000","message":"Just use `objects.Endpoint\u0027","commit_id":"c7a85402d38f690602c95ac9f56e0ce3a9efa968"},{"author":{"_account_id":13609,"name":"Pavel Boldin","email":"pboldin@mirantis.com","username":"pboldin"},"change_message_id":"1e1e805cc7c4e9cb54093fa78d586502b1c29a1d","unresolved":false,"context_lines":[{"line_number":48,"context_line":"            for j in range(self.users_per_tenant):"},{"line_number":49,"context_line":"                self.users_key.append({\"id\": \"%s_%s\" % (str(i), str(j)),"},{"line_number":50,"context_line":"                                       \"tenant_id\": str(i),"},{"line_number":51,"context_line":"                                       \"endpoint\": fake_dict})"},{"line_number":52,"context_line":""},{"line_number":53,"context_line":"        self.user_key \u003d [{\"id\": i, \"tenant_id\": j, \"endpoint\": \"endpoint\"}"},{"line_number":54,"context_line":"                         for j in range(self.tenants_num)"}],"source_content_type":"text/x-python","patch_set":18,"id":"7a016987_ca05757a","line":51,"updated":"2015-05-29 00:44:45.000000000","message":"Just use `objects.Endpoint\u0027","commit_id":"c7a85402d38f690602c95ac9f56e0ce3a9efa968"},{"author":{"_account_id":13609,"name":"Pavel Boldin","email":"pboldin@mirantis.com","username":"pboldin"},"change_message_id":"1e1e805cc7c4e9cb54093fa78d586502b1c29a1d","unresolved":false,"context_lines":[{"line_number":55,"context_line":"                         for i in range(self.users_per_tenant)]"},{"line_number":56,"context_line":""},{"line_number":57,"context_line":"    @property"},{"line_number":58,"context_line":"    def context_with_edp_keys(self):"},{"line_number":59,"context_line":"        return {"},{"line_number":60,"context_line":"            \"config\": {"},{"line_number":61,"context_line":"                \"users\": {"}],"source_content_type":"text/x-python","patch_set":18,"id":"7a016987_aa7fd9de","line":58,"updated":"2015-05-29 00:44:45.000000000","message":"Overall, `setup\u0027/`cleanup\u0027 tests for swift+swift_files are missing.\n\nPlease add them named `setup_swift_files\u0027 and `cleanup_swift_files\u0027.","commit_id":"c7a85402d38f690602c95ac9f56e0ce3a9efa968"},{"author":{"_account_id":13609,"name":"Pavel Boldin","email":"pboldin@mirantis.com","username":"pboldin"},"change_message_id":"1e1e805cc7c4e9cb54093fa78d586502b1c29a1d","unresolved":false,"context_lines":[{"line_number":127,"context_line":""},{"line_number":128,"context_line":"    @mock.patch(\"requests.get\")"},{"line_number":129,"context_line":"    @mock.patch(\"%s.sahara_input_data_sources.osclients\" % CTX)"},{"line_number":130,"context_line":"    def test_setup_inputs_swift(self, mock_osclients, mock_requests,"},{"line_number":131,"context_line":"                                ):"},{"line_number":132,"context_line":"        mock_sahara \u003d mock_osclients.Clients(mock.MagicMock()).sahara()"},{"line_number":133,"context_line":"        mock_requests.content \u003d mock.MagicMock(content\u003d\"OK\")"}],"source_content_type":"text/x-python","patch_set":18,"id":"7a016987_ca61f53a","line":130,"updated":"2015-05-29 00:44:45.000000000","message":"At first, this function should check *exactly* the behaviour and codeflow of the `setup_inputs_swift\u0027. Now it checks how it is called in the `setup\u0027.","commit_id":"c7a85402d38f690602c95ac9f56e0ce3a9efa968"},{"author":{"_account_id":13609,"name":"Pavel Boldin","email":"pboldin@mirantis.com","username":"pboldin"},"change_message_id":"1e1e805cc7c4e9cb54093fa78d586502b1c29a1d","unresolved":false,"context_lines":[{"line_number":129,"context_line":"    @mock.patch(\"%s.sahara_input_data_sources.osclients\" % CTX)"},{"line_number":130,"context_line":"    def test_setup_inputs_swift(self, mock_osclients, mock_requests,"},{"line_number":131,"context_line":"                                ):"},{"line_number":132,"context_line":"        mock_sahara \u003d mock_osclients.Clients(mock.MagicMock()).sahara()"},{"line_number":133,"context_line":"        mock_requests.content \u003d mock.MagicMock(content\u003d\"OK\")"},{"line_number":134,"context_line":""},{"line_number":135,"context_line":"        ctx \u003d self.context_with_edp_keys_swift"}],"source_content_type":"text/x-python","patch_set":18,"id":"7a016987_2acd2985","line":132,"updated":"2015-05-29 00:44:45.000000000","message":"Please use:\n mock_sahara \u003d mock_osclients.Clients.return_value.sahara.return_value instead.","commit_id":"c7a85402d38f690602c95ac9f56e0ce3a9efa968"},{"author":{"_account_id":13609,"name":"Pavel Boldin","email":"pboldin@mirantis.com","username":"pboldin"},"change_message_id":"1e1e805cc7c4e9cb54093fa78d586502b1c29a1d","unresolved":false,"context_lines":[{"line_number":135,"context_line":"        ctx \u003d self.context_with_edp_keys_swift"},{"line_number":136,"context_line":"        sahara_ctx \u003d sahara_input_data_sources.SaharaInputDataSources(ctx)"},{"line_number":137,"context_line":""},{"line_number":138,"context_line":"        input_ds_crete_calls \u003d []"},{"line_number":139,"context_line":""},{"line_number":140,"context_line":"        for i in range(self.tenants_num):"},{"line_number":141,"context_line":"            input_ds_crete_calls.append(mock.call("}],"source_content_type":"text/x-python","patch_set":18,"id":"7a016987_2a940941","line":138,"updated":"2015-05-29 00:44:45.000000000","message":"should be named input_ds_create_calls","commit_id":"c7a85402d38f690602c95ac9f56e0ce3a9efa968"},{"author":{"_account_id":13609,"name":"Pavel Boldin","email":"pboldin@mirantis.com","username":"pboldin"},"change_message_id":"1e1e805cc7c4e9cb54093fa78d586502b1c29a1d","unresolved":false,"context_lines":[{"line_number":148,"context_line":""},{"line_number":149,"context_line":"        sahara_ctx.setup()"},{"line_number":150,"context_line":""},{"line_number":151,"context_line":"        mock_sahara.data_sources.create.assert_has_calls("},{"line_number":152,"context_line":"            input_ds_crete_calls)"},{"line_number":153,"context_line":""},{"line_number":154,"context_line":"        sahara_ctx.cleanup()"}],"source_content_type":"text/x-python","patch_set":18,"id":"7a016987_4a7e251a","line":151,"updated":"2015-05-29 00:44:45.000000000","message":"Probably, better use:\n self.assertEqual(input_ds_create_calls, mock_sahara.data_sources.create.mock_calls)","commit_id":"c7a85402d38f690602c95ac9f56e0ce3a9efa968"},{"author":{"_account_id":13609,"name":"Pavel Boldin","email":"pboldin@mirantis.com","username":"pboldin"},"change_message_id":"1e1e805cc7c4e9cb54093fa78d586502b1c29a1d","unresolved":false,"context_lines":[{"line_number":151,"context_line":"        mock_sahara.data_sources.create.assert_has_calls("},{"line_number":152,"context_line":"            input_ds_crete_calls)"},{"line_number":153,"context_line":""},{"line_number":154,"context_line":"        sahara_ctx.cleanup()"}],"source_content_type":"text/x-python","patch_set":18,"id":"7a016987_6a9b2167","line":154,"updated":"2015-05-29 00:44:45.000000000","message":"Is not necessary to call it here.","commit_id":"c7a85402d38f690602c95ac9f56e0ce3a9efa968"}]}
