)]}'
{"rally-jobs/rally-murano.yaml":[{"author":{"_account_id":12395,"name":"Roman Vasylets","email":"pomeo92@gmail.com","username":"rvasilets"},"change_message_id":"0aeb433ad450f7c4dbb9a590601ce1186a5f61b6","unresolved":false,"context_lines":[{"line_number":68,"context_line":"        package: \"rally/rally-jobs/extra/murano/applications/HelloReporter/\""},{"line_number":69,"context_line":"      runner:"},{"line_number":70,"context_line":"        type: \"constant\""},{"line_number":71,"context_line":"        times: 5"},{"line_number":72,"context_line":"        concurrency: 1"},{"line_number":73,"context_line":"      context:"},{"line_number":74,"context_line":"        users:"}],"source_content_type":"text/x-yaml","patch_set":6,"id":"9a41bdd9_3b383cd3","line":71,"updated":"2015-07-13 14:05:23.000000000","message":"If this job working quick it would be better to increase number of times. For example, times - 10. concurrency - 5. If it would be work with such parameters.","commit_id":"bbfbe5edf67b30aafe2aba1d452122bd42793435"},{"author":{"_account_id":12395,"name":"Roman Vasylets","email":"pomeo92@gmail.com","username":"rvasilets"},"change_message_id":"0aeb433ad450f7c4dbb9a590601ce1186a5f61b6","unresolved":false,"context_lines":[{"line_number":69,"context_line":"      runner:"},{"line_number":70,"context_line":"        type: \"constant\""},{"line_number":71,"context_line":"        times: 5"},{"line_number":72,"context_line":"        concurrency: 1"},{"line_number":73,"context_line":"      context:"},{"line_number":74,"context_line":"        users:"},{"line_number":75,"context_line":"          tenants: 2"}],"source_content_type":"text/x-yaml","patch_set":6,"id":"9a41bdd9_401e710d","line":72,"updated":"2015-07-13 14:05:23.000000000","message":"Please make concurrency at least 2, to test how it works with threads. The same for code below.","commit_id":"bbfbe5edf67b30aafe2aba1d452122bd42793435"},{"author":{"_account_id":12395,"name":"Roman Vasylets","email":"pomeo92@gmail.com","username":"rvasilets"},"change_message_id":"0aeb433ad450f7c4dbb9a590601ce1186a5f61b6","unresolved":false,"context_lines":[{"line_number":73,"context_line":"      context:"},{"line_number":74,"context_line":"        users:"},{"line_number":75,"context_line":"          tenants: 2"},{"line_number":76,"context_line":"          users_per_tenant: 1"},{"line_number":77,"context_line":"      sla:"},{"line_number":78,"context_line":"        failure_rate:"},{"line_number":79,"context_line":"          max: 0"}],"source_content_type":"text/x-yaml","patch_set":6,"id":"9a41bdd9_e0db051a","line":76,"updated":"2015-07-13 14:05:23.000000000","message":"Also it would be great to test is it works if multiple users in tenant. The same for code below.","commit_id":"bbfbe5edf67b30aafe2aba1d452122bd42793435"},{"author":{"_account_id":10475,"name":"Alexander Maretskiy","email":"amaretskiy@mirantis.com","username":"maretskiy"},"change_message_id":"d1b770ac0e0e3a703a6b6a1d971696b208524a5a","unresolved":false,"context_lines":[{"line_number":82,"context_line":"        package: \"/home/jenkins/.rally/extra/murano/applications/HelloReporter/io.murano.apps.HelloReporter.zip\""},{"line_number":83,"context_line":"      runner:"},{"line_number":84,"context_line":"        type: \"constant\""},{"line_number":85,"context_line":"        times: 1"},{"line_number":86,"context_line":"        concurrency: 1"},{"line_number":87,"context_line":"      context:"},{"line_number":88,"context_line":"        users:"}],"source_content_type":"text/x-yaml","patch_set":12,"id":"3a50d1a3_4eba4ae3","line":85,"updated":"2015-07-20 10:49:39.000000000","message":"One iteration is almost useless. I suggest to set at least 2 iterations","commit_id":"e79f413dca99b15f1ce74e45efecaf29f794c38c"},{"author":{"_account_id":10475,"name":"Alexander Maretskiy","email":"amaretskiy@mirantis.com","username":"maretskiy"},"change_message_id":"cdd83f519caddf81a16e7b000074369e10282ed0","unresolved":false,"context_lines":[{"line_number":112,"context_line":"    -"},{"line_number":113,"context_line":"      args:"},{"line_number":114,"context_line":"        package: \"/home/jenkins/.rally/extra/murano/applications/HelloReporter/io.murano.apps.HelloReporter/\""},{"line_number":115,"context_line":"        filter_query: \"{\\\"category\\\" : \\\"Web\\\"}\""},{"line_number":116,"context_line":"      runner:"},{"line_number":117,"context_line":"        type: \"constant\""},{"line_number":118,"context_line":"        times: 10"}],"source_content_type":"text/x-yaml","patch_set":15,"id":"3a50d1a3_6fa4164a","line":115,"updated":"2015-07-23 13:19:12.000000000","message":"Why that is a string representation of dict, you can use dict here, that will also simplify code in packages.py since you do not need json.loads","commit_id":"7059ff0d6d9f99c59a628925dec71692ee5f4c49"},{"author":{"_account_id":10475,"name":"Alexander Maretskiy","email":"amaretskiy@mirantis.com","username":"maretskiy"},"change_message_id":"cdd83f519caddf81a16e7b000074369e10282ed0","unresolved":false,"context_lines":[{"line_number":129,"context_line":"    -"},{"line_number":130,"context_line":"      args:"},{"line_number":131,"context_line":"        package: \"/home/jenkins/.rally/extra/murano/applications/HelloReporter/io.murano.apps.HelloReporter/\""},{"line_number":132,"context_line":"        body: \"{\\\"tags\\\": [\\\"tag\\\"]}\""},{"line_number":133,"context_line":"        operation: \"add\""},{"line_number":134,"context_line":"      runner:"},{"line_number":135,"context_line":"        type: \"constant\""}],"source_content_type":"text/x-yaml","patch_set":15,"id":"3a50d1a3_0f66b229","line":132,"updated":"2015-07-23 13:19:12.000000000","message":"same here","commit_id":"7059ff0d6d9f99c59a628925dec71692ee5f4c49"},{"author":{"_account_id":12395,"name":"Roman Vasylets","email":"pomeo92@gmail.com","username":"rvasilets"},"change_message_id":"b2cc306926f707737eb1b78bd6e8e3c2ab5d38e5","unresolved":false,"context_lines":[{"line_number":82,"context_line":"        package: \"/home/jenkins/.rally/extra/murano/applications/HelloReporter/io.murano.apps.HelloReporter.zip\""},{"line_number":83,"context_line":"      runner:"},{"line_number":84,"context_line":"        type: \"constant\""},{"line_number":85,"context_line":"        times: 1"},{"line_number":86,"context_line":"        concurrency: 1"},{"line_number":87,"context_line":"      context:"},{"line_number":88,"context_line":"        users:"}],"source_content_type":"text/x-yaml","patch_set":26,"id":"1a4dcd0f_4d633bb2","line":85,"updated":"2015-08-03 23:31:57.000000000","message":"Why here is small consts? Lets use the same as in other. times: 10, concurrency: 2, tenants: 2, users_per_tenant: 2.","commit_id":"d36aaaa79b91ff74c7b97e2bcb1fc1c60a0f3f62"},{"author":{"_account_id":8592,"name":"Anastasia Kuznetsova","email":"akuznetsova@mirantis.com","username":"nastya-kuz"},"change_message_id":"75d694cd594c78b2d11af1575d4c4e19a2520872","unresolved":false,"context_lines":[{"line_number":82,"context_line":"        package: \"/home/jenkins/.rally/extra/murano/applications/HelloReporter/io.murano.apps.HelloReporter.zip\""},{"line_number":83,"context_line":"      runner:"},{"line_number":84,"context_line":"        type: \"constant\""},{"line_number":85,"context_line":"        times: 1"},{"line_number":86,"context_line":"        concurrency: 1"},{"line_number":87,"context_line":"      context:"},{"line_number":88,"context_line":"        users:"}],"source_content_type":"text/x-yaml","patch_set":26,"id":"1a4dcd0f_a82096f8","line":85,"in_reply_to":"1a4dcd0f_4d633bb2","updated":"2015-08-04 08:25:49.000000000","message":"We can not use such parameters here, Murano will generate 409 Conflict error, because we can not import packages with the same name (if we import one package under the one tenant, it will be public and available in all other tenants, so all other imports will fail), that\u0027s why I implemented a lot of methods which modify package context and change application name.\n\nAbility to use zip archive directly is needed not for load testing, we need it for further usage of this functionality in another gates where it is enough just to import one already prepared package.","commit_id":"d36aaaa79b91ff74c7b97e2bcb1fc1c60a0f3f62"},{"author":{"_account_id":10475,"name":"Alexander Maretskiy","email":"amaretskiy@mirantis.com","username":"maretskiy"},"change_message_id":"3847511ff7ff735bed58527d90d0fa401e1efbef","unresolved":false,"context_lines":[{"line_number":82,"context_line":"        package: \"/home/jenkins/.rally/extra/murano/applications/HelloReporter/io.murano.apps.HelloReporter.zip\""},{"line_number":83,"context_line":"      runner:"},{"line_number":84,"context_line":"        type: \"constant\""},{"line_number":85,"context_line":"        times: 1"},{"line_number":86,"context_line":"        concurrency: 1"},{"line_number":87,"context_line":"      context:"},{"line_number":88,"context_line":"        users:"}],"source_content_type":"text/x-yaml","patch_set":27,"id":"1a4dcd0f_7716e759","line":85,"updated":"2015-08-14 12:59:47.000000000","message":"1 iteration is almost useless, use at least 2","commit_id":"f7210493a28b57902ea9df16b2ee2c4a01ddf5f8"},{"author":{"_account_id":8592,"name":"Anastasia Kuznetsova","email":"akuznetsova@mirantis.com","username":"nastya-kuz"},"change_message_id":"891517968f88a7060a2f543d5519544251b70f19","unresolved":false,"context_lines":[{"line_number":82,"context_line":"        package: \"/home/jenkins/.rally/extra/murano/applications/HelloReporter/io.murano.apps.HelloReporter.zip\""},{"line_number":83,"context_line":"      runner:"},{"line_number":84,"context_line":"        type: \"constant\""},{"line_number":85,"context_line":"        times: 1"},{"line_number":86,"context_line":"        concurrency: 1"},{"line_number":87,"context_line":"      context:"},{"line_number":88,"context_line":"        users:"}],"source_content_type":"text/x-yaml","patch_set":27,"id":"fa1b9901_975537c3","line":85,"in_reply_to":"1a4dcd0f_7716e759","updated":"2015-08-20 10:27:39.000000000","message":"Please, take a look at my comment in previous patch set","commit_id":"f7210493a28b57902ea9df16b2ee2c4a01ddf5f8"}],"rally/plugins/openstack/scenarios/murano/packages.py":[{"author":{"_account_id":12395,"name":"Roman Vasylets","email":"pomeo92@gmail.com","username":"rvasilets"},"change_message_id":"156efc15cc9200f2323ede85b363a3d0e9c12eb2","unresolved":false,"context_lines":[{"line_number":66,"context_line":"    @validation.file_exists(\"package\")"},{"line_number":67,"context_line":"    @validation.required_parameters(\"package\")"},{"line_number":68,"context_line":"    @validation.required_parameters(\"body\")"},{"line_number":69,"context_line":"    @validation.required_parameters(\"operation\")"},{"line_number":70,"context_line":"    @validation.required_clients(\"murano\")"},{"line_number":71,"context_line":"    @validation.required_services(consts.Service.MURANO)"},{"line_number":72,"context_line":"    @base.scenario(context\u003d{\"cleanup\": [\"murano.packages\"]})"}],"source_content_type":"text/x-python","patch_set":3,"id":"ba3cc151_cccc2564","line":69,"updated":"2015-07-10 11:34:22.000000000","message":"Required parameter is working with lists. Please change it to ([\"1\", \"2\",...])","commit_id":"d572a4ce386b000c80b54777157c99525b734ea2"},{"author":{"_account_id":12395,"name":"Roman Vasylets","email":"pomeo92@gmail.com","username":"rvasilets"},"change_message_id":"642a89fb97954f89d6879f288c516cb353810248","unresolved":false,"context_lines":[{"line_number":33,"context_line":"        \"\"\"Scenario tests murano package-list command."},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"        This simple scenario tests Murano import-package and"},{"line_number":36,"context_line":"        packages-list commands."},{"line_number":37,"context_line":"        :param package: path to zip archive that represents Murano"},{"line_number":38,"context_line":"                        application package or absolute path to folder with"},{"line_number":39,"context_line":"                        package components"}],"source_content_type":"text/x-python","patch_set":6,"id":"9a41bdd9_230d6d37","line":36,"updated":"2015-07-13 14:36:53.000000000","message":"Bad description. \"\"\" import and murano list packages...","commit_id":"bbfbe5edf67b30aafe2aba1d452122bd42793435"},{"author":{"_account_id":12395,"name":"Roman Vasylets","email":"pomeo92@gmail.com","username":"rvasilets"},"change_message_id":"642a89fb97954f89d6879f288c516cb353810248","unresolved":false,"context_lines":[{"line_number":51,"context_line":"    def import_and_delete_package(self, package):"},{"line_number":52,"context_line":"        \"\"\"Scenario tests package creation and deletion."},{"line_number":53,"context_line":""},{"line_number":54,"context_line":"        This scenario allows to measure the Murano \"import-package\""},{"line_number":55,"context_line":"        and \"package-delete\" commands performance."},{"line_number":56,"context_line":"        :param package: path to zip archive that represents Murano"},{"line_number":57,"context_line":"                        application package or absolute path to folder with"}],"source_content_type":"text/x-python","patch_set":6,"id":"9a41bdd9_c373617f","line":54,"updated":"2015-07-13 14:36:53.000000000","message":"\u0027This scenario\u0027 is redundant prefix","commit_id":"bbfbe5edf67b30aafe2aba1d452122bd42793435"},{"author":{"_account_id":12395,"name":"Roman Vasylets","email":"pomeo92@gmail.com","username":"rvasilets"},"change_message_id":"0aeb433ad450f7c4dbb9a590601ce1186a5f61b6","unresolved":false,"context_lines":[{"line_number":63,"context_line":"        package \u003d self._import_package(package)"},{"line_number":64,"context_line":"        self._delete_package(package.id)"},{"line_number":65,"context_line":""},{"line_number":66,"context_line":"    @validation.required_parameters([\"package\", \"body\", \"operation\"])"},{"line_number":67,"context_line":"    @validation.required_clients(\"murano\")"},{"line_number":68,"context_line":"    @validation.required_services(consts.Service.MURANO)"},{"line_number":69,"context_line":"    @base.scenario(context\u003d{\"cleanup\": [\"murano.packages\"]})"}],"source_content_type":"text/x-python","patch_set":6,"id":"9a41bdd9_604ff0bd","line":66,"updated":"2015-07-13 14:05:23.000000000","message":"@validation.required_parameters(\"package\", \"body\", \"operation\")","commit_id":"bbfbe5edf67b30aafe2aba1d452122bd42793435"},{"author":{"_account_id":12395,"name":"Roman Vasylets","email":"pomeo92@gmail.com","username":"rvasilets"},"change_message_id":"0aeb433ad450f7c4dbb9a590601ce1186a5f61b6","unresolved":false,"context_lines":[{"line_number":93,"context_line":"    @validation.required_clients(\"murano\")"},{"line_number":94,"context_line":"    @validation.required_services(consts.Service.MURANO)"},{"line_number":95,"context_line":"    @base.scenario(context\u003d{\"cleanup\": [\"murano.packages\"]})"},{"line_number":96,"context_line":"    def import_and_filter_applications(self, package, filter_query):"},{"line_number":97,"context_line":"        \"\"\"Scenario tests application filtering."},{"line_number":98,"context_line":""},{"line_number":99,"context_line":"        This scenario allows to measure the performance of application"}],"source_content_type":"text/x-python","patch_set":6,"id":"9a41bdd9_4b78cd8f","line":96,"updated":"2015-07-13 14:05:23.000000000","message":"If we don\u0027t specify package we will get error","commit_id":"bbfbe5edf67b30aafe2aba1d452122bd42793435"},{"author":{"_account_id":12395,"name":"Roman Vasylets","email":"pomeo92@gmail.com","username":"rvasilets"},"change_message_id":"642a89fb97954f89d6879f288c516cb353810248","unresolved":false,"context_lines":[{"line_number":94,"context_line":"    @validation.required_services(consts.Service.MURANO)"},{"line_number":95,"context_line":"    @base.scenario(context\u003d{\"cleanup\": [\"murano.packages\"]})"},{"line_number":96,"context_line":"    def import_and_filter_applications(self, package, filter_query):"},{"line_number":97,"context_line":"        \"\"\"Scenario tests application filtering."},{"line_number":98,"context_line":""},{"line_number":99,"context_line":"        This scenario allows to measure the performance of application"},{"line_number":100,"context_line":"        filtering command."}],"source_content_type":"text/x-python","patch_set":6,"id":"9a41bdd9_23456d16","line":97,"updated":"2015-07-13 14:36:53.000000000","message":"\"\"\" Import and filter murano application...","commit_id":"bbfbe5edf67b30aafe2aba1d452122bd42793435"},{"author":{"_account_id":10475,"name":"Alexander Maretskiy","email":"amaretskiy@mirantis.com","username":"maretskiy"},"change_message_id":"cdd83f519caddf81a16e7b000074369e10282ed0","unresolved":false,"context_lines":[{"line_number":79,"context_line":"        :param package: path to zip archive that represents Murano"},{"line_number":80,"context_line":"                        application package or absolute path to folder with"},{"line_number":81,"context_line":"                        package components"},{"line_number":82,"context_line":"        :param body: string object that defines what package property will be"},{"line_number":83,"context_line":"                     updated, e.g \"{\"tags\": [\"tag\"]}\" or \"{\"enabled\": \"true\"}\""},{"line_number":84,"context_line":"        :param operation: string object that defines the way of how package"},{"line_number":85,"context_line":"                          property will be updated, allowed operations are"}],"source_content_type":"text/x-python","patch_set":15,"id":"3a50d1a3_cf10ca5b","line":82,"updated":"2015-07-23 13:19:12.000000000","message":"you can use dict here, so you do not need to transform this string into dict with json.loads","commit_id":"7059ff0d6d9f99c59a628925dec71692ee5f4c49"},{"author":{"_account_id":10475,"name":"Alexander Maretskiy","email":"amaretskiy@mirantis.com","username":"maretskiy"},"change_message_id":"cdd83f519caddf81a16e7b000074369e10282ed0","unresolved":false,"context_lines":[{"line_number":106,"context_line":"        :param package: path to zip archive that represents Murano"},{"line_number":107,"context_line":"                        application package or absolute path to folder with"},{"line_number":108,"context_line":"                        package components"},{"line_number":109,"context_line":"        :param filter_query: string that contains filter criteria, lately it"},{"line_number":110,"context_line":"                             will be transformed to dict object to be passed"},{"line_number":111,"context_line":"                             as **kwargs to filter method"},{"line_number":112,"context_line":"                             e.g. \"{\"category\": \"Web\"}\""}],"source_content_type":"text/x-python","patch_set":15,"id":"3a50d1a3_6f009602","line":109,"updated":"2015-07-23 13:19:12.000000000","message":"same here","commit_id":"7059ff0d6d9f99c59a628925dec71692ee5f4c49"},{"author":{"_account_id":6172,"name":"Boris Pavlovic","email":"boris@pavlovic.me","username":"boris-42"},"change_message_id":"64bbbaad604fa5dfde4c4e928563d607f97908e3","unresolved":false,"context_lines":[{"line_number":59,"context_line":"                        application package or absolute path to folder with"},{"line_number":60,"context_line":"                        package components"},{"line_number":61,"context_line":"        \"\"\""},{"line_number":62,"context_line":"        if not zipfile.is_zipfile(package):"},{"line_number":63,"context_line":"            package \u003d self._make_package_zip(package)"},{"line_number":64,"context_line":""},{"line_number":65,"context_line":"        package \u003d self._import_package(package)"}],"source_content_type":"text/x-python","patch_set":17,"id":"3a50d1a3_1875bd62","line":62,"updated":"2015-07-28 23:28:45.000000000","message":"You shouldn\u0027t run this on each operation. \n\nPlease create @type decorator for murano (like we have in Mistral https://github.com/openstack/rally/blob/master/rally/plugins/openstack/scenarios/mistral/workbooks.py#L38)  that will do this work once and before actually load. \n\nPut it in murano/utils.py because it\u0027s actually related only to these scenarios and can\u0027t be reused for other projects.","commit_id":"2e2c18abca5b4b8f15c007fb68388c9cd32ed0d8"},{"author":{"_account_id":6172,"name":"Boris Pavlovic","email":"boris@pavlovic.me","username":"boris-42"},"change_message_id":"0ef7b3b0cd91ef187b66dd05d15e26f2a774f188","unresolved":false,"context_lines":[{"line_number":69,"context_line":"        Measure the Murano import, update and delete package"},{"line_number":70,"context_line":"        commands performance."},{"line_number":71,"context_line":""},{"line_number":72,"context_line":"        :param package: path to zip archive that represents Murano\t38"},{"line_number":73,"context_line":"                        application package or absolute path to folder with\t39"},{"line_number":74,"context_line":"                        package components"},{"line_number":75,"context_line":"        :param body: dict object that defines what package property will be"}],"source_content_type":"text/x-python","patch_set":23,"id":"3a50d1a3_2aa406a4","line":72,"updated":"2015-08-03 13:24:50.000000000","message":"Please remove numbers of lines from lines 54,55, 72, 73, 97, 98","commit_id":"e7892e11d7d8064d6fb7c0d0dda7a92e793796fb"},{"author":{"_account_id":6172,"name":"Boris Pavlovic","email":"boris@pavlovic.me","username":"boris-42"},"change_message_id":"2eadfc44cb411cdb093a9a496344867e9ec96562","unresolved":false,"context_lines":[{"line_number":25,"context_line":""},{"line_number":26,"context_line":"    @validation.required_parameters(\"package\")"},{"line_number":27,"context_line":"    @validation.required_clients(\"murano\")"},{"line_number":28,"context_line":"    @validation.required_services(consts.Service.MURANO)"},{"line_number":29,"context_line":"    @base.scenario(context\u003d{\"cleanup\": [\"murano.packages\"]})"},{"line_number":30,"context_line":"    def import_and_list_packages(self, package):"},{"line_number":31,"context_line":"        \"\"\"Import Murano package and get list of packages."}],"source_content_type":"text/x-python","patch_set":26,"id":"1a4dcd0f_5cad2787","line":28,"updated":"2015-08-03 20:50:25.000000000","message":"you should add validation that \"package\" actually exist.\n\nOtherwise benchmark that doesn\u0027t work will start..","commit_id":"d36aaaa79b91ff74c7b97e2bcb1fc1c60a0f3f62"},{"author":{"_account_id":6172,"name":"Boris Pavlovic","email":"boris@pavlovic.me","username":"boris-42"},"change_message_id":"78d0ad8cf67a730560d3698cf3c8d8dc8672a31a","unresolved":false,"context_lines":[{"line_number":25,"context_line":""},{"line_number":26,"context_line":"    @validation.required_parameters(\"package\")"},{"line_number":27,"context_line":"    @validation.required_clients(\"murano\")"},{"line_number":28,"context_line":"    @validation.required_services(consts.Service.MURANO)"},{"line_number":29,"context_line":"    @base.scenario(context\u003d{\"cleanup\": [\"murano.packages\"]})"},{"line_number":30,"context_line":"    def import_and_list_packages(self, package):"},{"line_number":31,"context_line":"        \"\"\"Import Murano package and get list of packages."}],"source_content_type":"text/x-python","patch_set":26,"id":"1a4dcd0f_fc10b3aa","line":28,"in_reply_to":"1a4dcd0f_5cad2787","updated":"2015-08-03 20:53:08.000000000","message":"as well you should add \n\n  @validation.required_openstack(users\u003dTrue)","commit_id":"d36aaaa79b91ff74c7b97e2bcb1fc1c60a0f3f62"},{"author":{"_account_id":8592,"name":"Anastasia Kuznetsova","email":"akuznetsova@mirantis.com","username":"nastya-kuz"},"change_message_id":"fdbfe2ca2cbe470dfb80b574f980a7a298c3f992","unresolved":false,"context_lines":[{"line_number":25,"context_line":""},{"line_number":26,"context_line":"    @validation.required_parameters(\"package\")"},{"line_number":27,"context_line":"    @validation.required_clients(\"murano\")"},{"line_number":28,"context_line":"    @validation.required_services(consts.Service.MURANO)"},{"line_number":29,"context_line":"    @base.scenario(context\u003d{\"cleanup\": [\"murano.packages\"]})"},{"line_number":30,"context_line":"    def import_and_list_packages(self, package):"},{"line_number":31,"context_line":"        \"\"\"Import Murano package and get list of packages."}],"source_content_type":"text/x-python","patch_set":26,"id":"1a4dcd0f_f7bf52ce","line":28,"in_reply_to":"1a4dcd0f_fc10b3aa","updated":"2015-08-04 10:36:50.000000000","message":"Done","commit_id":"d36aaaa79b91ff74c7b97e2bcb1fc1c60a0f3f62"},{"author":{"_account_id":12395,"name":"Roman Vasylets","email":"pomeo92@gmail.com","username":"rvasilets"},"change_message_id":"b2cc306926f707737eb1b78bd6e8e3c2ab5d38e5","unresolved":false,"context_lines":[{"line_number":33,"context_line":"        Measure the \"murano import-package\" and \"murano package-list\" commands"},{"line_number":34,"context_line":"        performance."},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"        :param package: path to zip archive that represents Murano"},{"line_number":37,"context_line":"                        application package or absolute path to folder with"},{"line_number":38,"context_line":"                        package components"},{"line_number":39,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":26,"id":"1a4dcd0f_ecf56083","line":36,"updated":"2015-08-03 23:31:57.000000000","message":"It a path not only to zip archive. In you case its a dir. Of cause it could be both.","commit_id":"d36aaaa79b91ff74c7b97e2bcb1fc1c60a0f3f62"},{"author":{"_account_id":12395,"name":"Roman Vasylets","email":"pomeo92@gmail.com","username":"rvasilets"},"change_message_id":"3e0ee5e07b289c533b43a7a8646aca887dd4f5b9","unresolved":false,"context_lines":[{"line_number":33,"context_line":"        Measure the \"murano import-package\" and \"murano package-list\" commands"},{"line_number":34,"context_line":"        performance."},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"        :param package: path to zip archive that represents Murano"},{"line_number":37,"context_line":"                        application package or absolute path to folder with"},{"line_number":38,"context_line":"                        package components"},{"line_number":39,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":26,"id":"1a4dcd0f_d70576c2","line":36,"in_reply_to":"1a4dcd0f_68c7ee12","updated":"2015-08-04 10:39:28.000000000","message":"Agree with you. It was too late. Sorry","commit_id":"d36aaaa79b91ff74c7b97e2bcb1fc1c60a0f3f62"},{"author":{"_account_id":8592,"name":"Anastasia Kuznetsova","email":"akuznetsova@mirantis.com","username":"nastya-kuz"},"change_message_id":"75d694cd594c78b2d11af1575d4c4e19a2520872","unresolved":false,"context_lines":[{"line_number":33,"context_line":"        Measure the \"murano import-package\" and \"murano package-list\" commands"},{"line_number":34,"context_line":"        performance."},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"        :param package: path to zip archive that represents Murano"},{"line_number":37,"context_line":"                        application package or absolute path to folder with"},{"line_number":38,"context_line":"                        package components"},{"line_number":39,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":26,"id":"1a4dcd0f_68c7ee12","line":36,"in_reply_to":"1a4dcd0f_ecf56083","updated":"2015-08-04 08:25:49.000000000","message":"I am a little bit confused about you comment, I said that it is not just a path to zip archive.","commit_id":"d36aaaa79b91ff74c7b97e2bcb1fc1c60a0f3f62"},{"author":{"_account_id":12395,"name":"Roman Vasylets","email":"pomeo92@gmail.com","username":"rvasilets"},"change_message_id":"b2cc306926f707737eb1b78bd6e8e3c2ab5d38e5","unresolved":false,"context_lines":[{"line_number":48,"context_line":"    def import_and_delete_package(self, package):"},{"line_number":49,"context_line":"        \"\"\"Import Murano package and then delete it."},{"line_number":50,"context_line":""},{"line_number":51,"context_line":"        Measure the \"murano import-package\" and \"murano package-delete\""},{"line_number":52,"context_line":"        commands performance."},{"line_number":53,"context_line":""},{"line_number":54,"context_line":"        :param package: path to zip archive that represents Murano"}],"source_content_type":"text/x-python","patch_set":26,"id":"1a4dcd0f_2c8828e7","line":51,"updated":"2015-08-03 23:31:57.000000000","message":"Create Murano package from \u0027package\u0027 if there is not zip by this path... Import and delete package.  This is just a recommendation to rewrite description","commit_id":"d36aaaa79b91ff74c7b97e2bcb1fc1c60a0f3f62"},{"author":{"_account_id":8592,"name":"Anastasia Kuznetsova","email":"akuznetsova@mirantis.com","username":"nastya-kuz"},"change_message_id":"fdbfe2ca2cbe470dfb80b574f980a7a298c3f992","unresolved":false,"context_lines":[{"line_number":48,"context_line":"    def import_and_delete_package(self, package):"},{"line_number":49,"context_line":"        \"\"\"Import Murano package and then delete it."},{"line_number":50,"context_line":""},{"line_number":51,"context_line":"        Measure the \"murano import-package\" and \"murano package-delete\""},{"line_number":52,"context_line":"        commands performance."},{"line_number":53,"context_line":""},{"line_number":54,"context_line":"        :param package: path to zip archive that represents Murano"}],"source_content_type":"text/x-python","patch_set":26,"id":"1a4dcd0f_97b4cef2","line":51,"in_reply_to":"1a4dcd0f_2c8828e7","updated":"2015-08-04 10:36:50.000000000","message":"Done","commit_id":"d36aaaa79b91ff74c7b97e2bcb1fc1c60a0f3f62"},{"author":{"_account_id":12395,"name":"Roman Vasylets","email":"pomeo92@gmail.com","username":"rvasilets"},"change_message_id":"b2cc306926f707737eb1b78bd6e8e3c2ab5d38e5","unresolved":false,"context_lines":[{"line_number":51,"context_line":"        Measure the \"murano import-package\" and \"murano package-delete\""},{"line_number":52,"context_line":"        commands performance."},{"line_number":53,"context_line":""},{"line_number":54,"context_line":"        :param package: path to zip archive that represents Murano"},{"line_number":55,"context_line":"                        application package or absolute path to folder with"},{"line_number":56,"context_line":"                        package components"},{"line_number":57,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":26,"id":"1a4dcd0f_4c2b34ec","line":54,"updated":"2015-08-03 23:31:57.000000000","message":"not only zip archive","commit_id":"d36aaaa79b91ff74c7b97e2bcb1fc1c60a0f3f62"},{"author":{"_account_id":8592,"name":"Anastasia Kuznetsova","email":"akuznetsova@mirantis.com","username":"nastya-kuz"},"change_message_id":"75d694cd594c78b2d11af1575d4c4e19a2520872","unresolved":false,"context_lines":[{"line_number":51,"context_line":"        Measure the \"murano import-package\" and \"murano package-delete\""},{"line_number":52,"context_line":"        commands performance."},{"line_number":53,"context_line":""},{"line_number":54,"context_line":"        :param package: path to zip archive that represents Murano"},{"line_number":55,"context_line":"                        application package or absolute path to folder with"},{"line_number":56,"context_line":"                        package components"},{"line_number":57,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":26,"id":"1a4dcd0f_e8dbfeeb","line":54,"in_reply_to":"1a4dcd0f_4c2b34ec","updated":"2015-08-04 08:25:49.000000000","message":"ditto","commit_id":"d36aaaa79b91ff74c7b97e2bcb1fc1c60a0f3f62"},{"author":{"_account_id":12395,"name":"Roman Vasylets","email":"pomeo92@gmail.com","username":"rvasilets"},"change_message_id":"3e0ee5e07b289c533b43a7a8646aca887dd4f5b9","unresolved":false,"context_lines":[{"line_number":51,"context_line":"        Measure the \"murano import-package\" and \"murano package-delete\""},{"line_number":52,"context_line":"        commands performance."},{"line_number":53,"context_line":""},{"line_number":54,"context_line":"        :param package: path to zip archive that represents Murano"},{"line_number":55,"context_line":"                        application package or absolute path to folder with"},{"line_number":56,"context_line":"                        package components"},{"line_number":57,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":26,"id":"1a4dcd0f_57fac6be","line":54,"in_reply_to":"1a4dcd0f_e8dbfeeb","updated":"2015-08-04 10:39:28.000000000","message":"Agree with you. It was too late. Sorry","commit_id":"d36aaaa79b91ff74c7b97e2bcb1fc1c60a0f3f62"},{"author":{"_account_id":12395,"name":"Roman Vasylets","email":"pomeo92@gmail.com","username":"rvasilets"},"change_message_id":"b2cc306926f707737eb1b78bd6e8e3c2ab5d38e5","unresolved":false,"context_lines":[{"line_number":66,"context_line":"    def package_lifecycle(self, package, body, operation):"},{"line_number":67,"context_line":"        \"\"\"Import Murano package, modify it and then delete it."},{"line_number":68,"context_line":""},{"line_number":69,"context_line":"        Measure the Murano import, update and delete package"},{"line_number":70,"context_line":"        commands performance."},{"line_number":71,"context_line":""},{"line_number":72,"context_line":"        :param package: path to zip archive that represents Murano"}],"source_content_type":"text/x-python","patch_set":26,"id":"1a4dcd0f_8cc4dc40","line":69,"updated":"2015-08-03 23:31:57.000000000","message":"Create Murano package from package content. Import, update and delete package. This is just a recomendation to rewrite description.","commit_id":"d36aaaa79b91ff74c7b97e2bcb1fc1c60a0f3f62"},{"author":{"_account_id":8592,"name":"Anastasia Kuznetsova","email":"akuznetsova@mirantis.com","username":"nastya-kuz"},"change_message_id":"fdbfe2ca2cbe470dfb80b574f980a7a298c3f992","unresolved":false,"context_lines":[{"line_number":66,"context_line":"    def package_lifecycle(self, package, body, operation):"},{"line_number":67,"context_line":"        \"\"\"Import Murano package, modify it and then delete it."},{"line_number":68,"context_line":""},{"line_number":69,"context_line":"        Measure the Murano import, update and delete package"},{"line_number":70,"context_line":"        commands performance."},{"line_number":71,"context_line":""},{"line_number":72,"context_line":"        :param package: path to zip archive that represents Murano"}],"source_content_type":"text/x-python","patch_set":26,"id":"1a4dcd0f_b7b9caeb","line":69,"in_reply_to":"1a4dcd0f_8cc4dc40","updated":"2015-08-04 10:36:50.000000000","message":"Done","commit_id":"d36aaaa79b91ff74c7b97e2bcb1fc1c60a0f3f62"},{"author":{"_account_id":12395,"name":"Roman Vasylets","email":"pomeo92@gmail.com","username":"rvasilets"},"change_message_id":"b2cc306926f707737eb1b78bd6e8e3c2ab5d38e5","unresolved":false,"context_lines":[{"line_number":92,"context_line":"        \"\"\"Import Murano package and then filter packages by some criteria."},{"line_number":93,"context_line":""},{"line_number":94,"context_line":"        Measure the performance of package import and package"},{"line_number":95,"context_line":"        filtering commands."},{"line_number":96,"context_line":""},{"line_number":97,"context_line":"        :param package: path to zip archive that represents Murano"},{"line_number":98,"context_line":"                        application package or absolute path to folder with"}],"source_content_type":"text/x-python","patch_set":26,"id":"1a4dcd0f_2c5fc873","line":95,"updated":"2015-08-03 23:31:57.000000000","message":"As above I recommend to you to a bit rewrite description. For example action like \u0027Measure the performance\u0027 not needed because all scenarios doing this","commit_id":"d36aaaa79b91ff74c7b97e2bcb1fc1c60a0f3f62"},{"author":{"_account_id":8592,"name":"Anastasia Kuznetsova","email":"akuznetsova@mirantis.com","username":"nastya-kuz"},"change_message_id":"fdbfe2ca2cbe470dfb80b574f980a7a298c3f992","unresolved":false,"context_lines":[{"line_number":92,"context_line":"        \"\"\"Import Murano package and then filter packages by some criteria."},{"line_number":93,"context_line":""},{"line_number":94,"context_line":"        Measure the performance of package import and package"},{"line_number":95,"context_line":"        filtering commands."},{"line_number":96,"context_line":""},{"line_number":97,"context_line":"        :param package: path to zip archive that represents Murano"},{"line_number":98,"context_line":"                        application package or absolute path to folder with"}],"source_content_type":"text/x-python","patch_set":26,"id":"1a4dcd0f_57cf267f","line":95,"in_reply_to":"1a4dcd0f_2c5fc873","updated":"2015-08-04 10:36:50.000000000","message":"Done","commit_id":"d36aaaa79b91ff74c7b97e2bcb1fc1c60a0f3f62"},{"author":{"_account_id":10475,"name":"Alexander Maretskiy","email":"amaretskiy@mirantis.com","username":"maretskiy"},"change_message_id":"3847511ff7ff735bed58527d90d0fa401e1efbef","unresolved":false,"context_lines":[{"line_number":43,"context_line":"                        application package or absolute path to folder with"},{"line_number":44,"context_line":"                        package components"},{"line_number":45,"context_line":"        \"\"\""},{"line_number":46,"context_line":"        package \u003d self._zip_package(package)"},{"line_number":47,"context_line":"        self._import_package(package)"},{"line_number":48,"context_line":"        self._list_packages()"},{"line_number":49,"context_line":""}],"source_content_type":"text/x-python","patch_set":27,"id":"1a4dcd0f_d2c34956","line":46,"updated":"2015-08-14 12:59:47.000000000","message":"I would recommend s/package/pkg_path/ (or something similar) since _zip_package() returns path to zip file","commit_id":"f7210493a28b57902ea9df16b2ee2c4a01ddf5f8"},{"author":{"_account_id":10475,"name":"Alexander Maretskiy","email":"amaretskiy@mirantis.com","username":"maretskiy"},"change_message_id":"3847511ff7ff735bed58527d90d0fa401e1efbef","unresolved":false,"context_lines":[{"line_number":65,"context_line":"                        application package or absolute path to folder with"},{"line_number":66,"context_line":"                        package components"},{"line_number":67,"context_line":"        \"\"\""},{"line_number":68,"context_line":"        package \u003d self._zip_package(package)"},{"line_number":69,"context_line":"        package \u003d self._import_package(package)"},{"line_number":70,"context_line":"        self._delete_package(package.id)"},{"line_number":71,"context_line":""}],"source_content_type":"text/x-python","patch_set":27,"id":"1a4dcd0f_d2a8297a","line":68,"updated":"2015-08-14 12:59:47.000000000","message":"s/package/pkg_path/","commit_id":"f7210493a28b57902ea9df16b2ee2c4a01ddf5f8"},{"author":{"_account_id":10475,"name":"Alexander Maretskiy","email":"amaretskiy@mirantis.com","username":"maretskiy"},"change_message_id":"3847511ff7ff735bed58527d90d0fa401e1efbef","unresolved":false,"context_lines":[{"line_number":121,"context_line":"                             will be passed as **kwargs to filter method"},{"line_number":122,"context_line":"                             e.g. {\"category\": \"Web\"}"},{"line_number":123,"context_line":"        \"\"\""},{"line_number":124,"context_line":"        package \u003d self._zip_package(package)"},{"line_number":125,"context_line":"        self._import_package(package)"},{"line_number":126,"context_line":"        self._filter_applications(filter_query)"}],"source_content_type":"text/x-python","patch_set":27,"id":"1a4dcd0f_d21b49c9","line":124,"updated":"2015-08-14 12:59:47.000000000","message":"s/package/pkg_path/","commit_id":"f7210493a28b57902ea9df16b2ee2c4a01ddf5f8"},{"author":{"_account_id":9545,"name":"Andriy Kurilin","email":"andr.kurilin@gmail.com","username":"akurilin"},"change_message_id":"b9916f5c60b6aa912ba0b9ea3caea54f390f66e3","unresolved":false,"context_lines":[{"line_number":18,"context_line":""},{"line_number":19,"context_line":"from rally import consts"},{"line_number":20,"context_line":"from rally.plugins.openstack.scenarios.murano import utils"},{"line_number":21,"context_line":"from rally.task.scenarios import base"},{"line_number":22,"context_line":"from rally.task import validation"},{"line_number":23,"context_line":""},{"line_number":24,"context_line":""}],"source_content_type":"text/x-python","patch_set":28,"id":"fa1b9901_2384265c","line":21,"updated":"2015-08-20 12:50:02.000000000","message":"please change the import, it should be:\n\n    from rally.task import scenario","commit_id":"5aa5523807167839600b9ee15765a4084136dcb8"},{"author":{"_account_id":12395,"name":"Roman Vasylets","email":"pomeo92@gmail.com","username":"rvasilets"},"change_message_id":"f6b01454c8529894464456d48dac92f19cb97c3d","unresolved":false,"context_lines":[{"line_number":31,"context_line":"    @validation.required_services(consts.Service.MURANO)"},{"line_number":32,"context_line":"    @validation.required_openstack(users\u003dTrue)"},{"line_number":33,"context_line":"    @scenario.configure(context\u003d{\"cleanup\": [\"murano.packages\"]})"},{"line_number":34,"context_line":"    def import_and_list_packages(self, package):"},{"line_number":35,"context_line":"        \"\"\"Import Murano package and get list of packages."},{"line_number":36,"context_line":""},{"line_number":37,"context_line":"        Measure the \"murano import-package\" and \"murano package-list\" commands"}],"source_content_type":"text/x-python","patch_set":32,"id":"ba15a1d1_bbcf7db2","line":34,"updated":"2015-09-21 17:07:41.000000000","message":"Here must to be argument of _list_packages(...) - include_disabled. Or we can;t use this parameter now if we want.","commit_id":"e9421e000b9b3fc7be87c24415d7cdcd1da838b1"},{"author":{"_account_id":8592,"name":"Anastasia Kuznetsova","email":"akuznetsova@mirantis.com","username":"nastya-kuz"},"change_message_id":"1c0918edb850982b4b6928898a213e3af872b969","unresolved":false,"context_lines":[{"line_number":31,"context_line":"    @validation.required_services(consts.Service.MURANO)"},{"line_number":32,"context_line":"    @validation.required_openstack(users\u003dTrue)"},{"line_number":33,"context_line":"    @scenario.configure(context\u003d{\"cleanup\": [\"murano.packages\"]})"},{"line_number":34,"context_line":"    def import_and_list_packages(self, package):"},{"line_number":35,"context_line":"        \"\"\"Import Murano package and get list of packages."},{"line_number":36,"context_line":""},{"line_number":37,"context_line":"        Measure the \"murano import-package\" and \"murano package-list\" commands"}],"source_content_type":"text/x-python","patch_set":32,"id":"ba15a1d1_98d623c2","line":34,"in_reply_to":"ba15a1d1_bbcf7db2","updated":"2015-09-22 09:42:26.000000000","message":"Done","commit_id":"e9421e000b9b3fc7be87c24415d7cdcd1da838b1"}],"rally/plugins/openstack/scenarios/murano/utils.py":[{"author":{"_account_id":12395,"name":"Roman Vasylets","email":"pomeo92@gmail.com","username":"rvasilets"},"change_message_id":"156efc15cc9200f2323ede85b363a3d0e9c12eb2","unresolved":false,"context_lines":[{"line_number":137,"context_line":"        return self.clients(\"murano\").packages.list()"},{"line_number":138,"context_line":""},{"line_number":139,"context_line":"    def _update_manifest(self, manifest_file):"},{"line_number":140,"context_line":"        f \u003d open(manifest_file, \"r\")"},{"line_number":141,"context_line":"        manifest_data \u003d f.read()"},{"line_number":142,"context_line":"        f.close()"},{"line_number":143,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"ba3cc151_2c1031ab","line":140,"updated":"2015-07-10 11:34:22.000000000","message":"Please use context manager here.","commit_id":"d572a4ce386b000c80b54777157c99525b734ea2"},{"author":{"_account_id":12395,"name":"Roman Vasylets","email":"pomeo92@gmail.com","username":"rvasilets"},"change_message_id":"156efc15cc9200f2323ede85b363a3d0e9c12eb2","unresolved":false,"context_lines":[{"line_number":193,"context_line":"        self.clients(\"murano\").packages.delete(package_id)"},{"line_number":194,"context_line":""},{"line_number":195,"context_line":"    @base.atomic_action_timer(\"murano.update_package\")"},{"line_number":196,"context_line":"    def _update_package(self, package_id, body, operation):"},{"line_number":197,"context_line":"        \"\"\"Update specified package.\"\"\""},{"line_number":198,"context_line":""},{"line_number":199,"context_line":"        return self.clients(\"murano\").packages.update("}],"source_content_type":"text/x-python","patch_set":3,"id":"ba3cc151_8cedbdb9","line":196,"updated":"2015-07-10 11:34:22.000000000","message":"All parameters should to be document. And return velues also. In all your code.","commit_id":"d572a4ce386b000c80b54777157c99525b734ea2"},{"author":{"_account_id":12395,"name":"Roman Vasylets","email":"pomeo92@gmail.com","username":"rvasilets"},"change_message_id":"f252c006544f00fbba3bfe3a6e79461df29181ce","unresolved":false,"context_lines":[{"line_number":134,"context_line":"    @base.atomic_action_timer(\"murano.list_packages\")"},{"line_number":135,"context_line":"    def _list_packages(self):"},{"line_number":136,"context_line":"        \"\"\"Returns packages list.\"\"\""},{"line_number":137,"context_line":"        return self.clients(\"murano\").packages.list()"},{"line_number":138,"context_line":""},{"line_number":139,"context_line":"    def _update_manifest(self, manifest_file):"},{"line_number":140,"context_line":"        \"\"\"This method updates Murano application manifest file."}],"source_content_type":"text/x-python","patch_set":6,"id":"9a41bdd9_763571d8","line":137,"updated":"2015-07-13 15:08:31.000000000","message":"https://github.com/openstack/python-muranoclient/blob/master/muranoclient/v1/packages.py#L104 there is one more parameter in this function","commit_id":"bbfbe5edf67b30aafe2aba1d452122bd42793435"},{"author":{"_account_id":12395,"name":"Roman Vasylets","email":"pomeo92@gmail.com","username":"rvasilets"},"change_message_id":"f252c006544f00fbba3bfe3a6e79461df29181ce","unresolved":false,"context_lines":[{"line_number":137,"context_line":"        return self.clients(\"murano\").packages.list()"},{"line_number":138,"context_line":""},{"line_number":139,"context_line":"    def _update_manifest(self, manifest_file):"},{"line_number":140,"context_line":"        \"\"\"This method updates Murano application manifest file."},{"line_number":141,"context_line":""},{"line_number":142,"context_line":"        :param manifest_file: path to manifest.yaml file that will be"},{"line_number":143,"context_line":"                              updated"}],"source_content_type":"text/x-python","patch_set":6,"id":"9a41bdd9_f9e732e2","line":140,"updated":"2015-07-13 15:08:31.000000000","message":"You need to test this function. Please describe how it update manifest","commit_id":"bbfbe5edf67b30aafe2aba1d452122bd42793435"},{"author":{"_account_id":12395,"name":"Roman Vasylets","email":"pomeo92@gmail.com","username":"rvasilets"},"change_message_id":"0aeb433ad450f7c4dbb9a590601ce1186a5f61b6","unresolved":false,"context_lines":[{"line_number":142,"context_line":"        :param manifest_file: path to manifest.yaml file that will be"},{"line_number":143,"context_line":"                              updated"},{"line_number":144,"context_line":"        \"\"\""},{"line_number":145,"context_line":"        f \u003d open(manifest_file, \"r\")"},{"line_number":146,"context_line":"        manifest_data \u003d f.read()"},{"line_number":147,"context_line":"        f.close()"},{"line_number":148,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"9a41bdd9_6b6d9197","line":145,"updated":"2015-07-13 14:05:23.000000000","message":"use ContextManager here","commit_id":"bbfbe5edf67b30aafe2aba1d452122bd42793435"},{"author":{"_account_id":12395,"name":"Roman Vasylets","email":"pomeo92@gmail.com","username":"rvasilets"},"change_message_id":"0aeb433ad450f7c4dbb9a590601ce1186a5f61b6","unresolved":false,"context_lines":[{"line_number":148,"context_line":""},{"line_number":149,"context_line":"        manifest \u003d yaml.safe_load(manifest_data)"},{"line_number":150,"context_line":"        old_classes_file \u003d manifest[\"Classes\"][manifest[\"FullName\"]]"},{"line_number":151,"context_line":"        del manifest[\"Classes\"][manifest[\"FullName\"]]"},{"line_number":152,"context_line":"        manifest[\"FullName\"] \u003d self._generate_random_name(manifest[\"FullName\"])"},{"line_number":153,"context_line":"        manifest[\"Classes\"][manifest[\"FullName\"]] \u003d old_classes_file"},{"line_number":154,"context_line":"        manifest \u003d yaml.safe_dump(manifest)"}],"source_content_type":"text/x-python","patch_set":6,"id":"9a41bdd9_2c90ff42","line":151,"updated":"2015-07-13 14:05:23.000000000","message":"Why we use this line? It would be update by 153 line","commit_id":"bbfbe5edf67b30aafe2aba1d452122bd42793435"},{"author":{"_account_id":12395,"name":"Roman Vasylets","email":"pomeo92@gmail.com","username":"rvasilets"},"change_message_id":"0aeb433ad450f7c4dbb9a590601ce1186a5f61b6","unresolved":false,"context_lines":[{"line_number":151,"context_line":"        del manifest[\"Classes\"][manifest[\"FullName\"]]"},{"line_number":152,"context_line":"        manifest[\"FullName\"] \u003d self._generate_random_name(manifest[\"FullName\"])"},{"line_number":153,"context_line":"        manifest[\"Classes\"][manifest[\"FullName\"]] \u003d old_classes_file"},{"line_number":154,"context_line":"        manifest \u003d yaml.safe_dump(manifest)"},{"line_number":155,"context_line":""},{"line_number":156,"context_line":"        f \u003d open(manifest_file, \"w\")"},{"line_number":157,"context_line":"        f.write(manifest)"}],"source_content_type":"text/x-python","patch_set":6,"id":"9a41bdd9_262d8046","line":154,"updated":"2015-07-13 14:05:23.000000000","message":"Safe dump have option that help us to avoid lines 157-159. yaml.safe_dump(manifest, manifest_file)","commit_id":"bbfbe5edf67b30aafe2aba1d452122bd42793435"},{"author":{"_account_id":12395,"name":"Roman Vasylets","email":"pomeo92@gmail.com","username":"rvasilets"},"change_message_id":"16cb49557ba9bdf05d4a09d0d81ed11eb90ae545","unresolved":false,"context_lines":[{"line_number":157,"context_line":"        f.write(manifest)"},{"line_number":158,"context_line":"        f.close()"},{"line_number":159,"context_line":""},{"line_number":160,"context_line":"    def _make_zip(self, path):"},{"line_number":161,"context_line":"        \"\"\"Prepare zip archive with Murano application."},{"line_number":162,"context_line":""},{"line_number":163,"context_line":"        It copies directory with Murano app files to temporary folder,"}],"source_content_type":"text/x-python","patch_set":6,"id":"9a41bdd9_608ccb35","line":160,"updated":"2015-07-13 14:22:35.000000000","message":"As its not only doing ordinary zip we need to specify in the name that we are making murano application from directory. For example _make_app_from_dir","commit_id":"bbfbe5edf67b30aafe2aba1d452122bd42793435"},{"author":{"_account_id":12395,"name":"Roman Vasylets","email":"pomeo92@gmail.com","username":"rvasilets"},"change_message_id":"f252c006544f00fbba3bfe3a6e79461df29181ce","unresolved":false,"context_lines":[{"line_number":157,"context_line":"        f.write(manifest)"},{"line_number":158,"context_line":"        f.close()"},{"line_number":159,"context_line":""},{"line_number":160,"context_line":"    def _make_zip(self, path):"},{"line_number":161,"context_line":"        \"\"\"Prepare zip archive with Murano application."},{"line_number":162,"context_line":""},{"line_number":163,"context_line":"        It copies directory with Murano app files to temporary folder,"}],"source_content_type":"text/x-python","patch_set":6,"id":"9a41bdd9_39903a43","line":160,"updated":"2015-07-13 15:08:31.000000000","message":"You need to test this function","commit_id":"bbfbe5edf67b30aafe2aba1d452122bd42793435"},{"author":{"_account_id":12395,"name":"Roman Vasylets","email":"pomeo92@gmail.com","username":"rvasilets"},"change_message_id":"0aeb433ad450f7c4dbb9a590601ce1186a5f61b6","unresolved":false,"context_lines":[{"line_number":164,"context_line":"        changes  manifest.yaml (to avoid \u0027409 Conflict\u0027 errors in Murano)"},{"line_number":165,"context_line":"        and prepares zip package."},{"line_number":166,"context_line":"        :param path: path to the root directory that will be archived"},{"line_number":167,"context_line":"        :returns: zip archive with Murano application with changed "},{"line_number":168,"context_line":"                  manifest file"},{"line_number":169,"context_line":"        \"\"\""},{"line_number":170,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"9a41bdd9_656dc703","line":167,"updated":"2015-07-13 14:05:23.000000000","message":"http://logs.openstack.org/84/200184/6/check/gate-rally-pep8/ab89d17/console.html#_2015-07-13_09_17_41_375","commit_id":"bbfbe5edf67b30aafe2aba1d452122bd42793435"},{"author":{"_account_id":12395,"name":"Roman Vasylets","email":"pomeo92@gmail.com","username":"rvasilets"},"change_message_id":"ead3d8951ac58cf0f266f2f9453dcc0d486116c2","unresolved":false,"context_lines":[{"line_number":169,"context_line":"        \"\"\""},{"line_number":170,"context_line":""},{"line_number":171,"context_line":"        tmp_dir \u003d tempfile.mkdtemp() + \"/package\""},{"line_number":172,"context_line":"        shutil.copytree(path, tmp_dir)"},{"line_number":173,"context_line":""},{"line_number":174,"context_line":"        zip_file \u003d tmp_dir + \".zip\""},{"line_number":175,"context_line":"        path_len \u003d len(tmp_dir) + 1"}],"source_content_type":"text/x-python","patch_set":6,"id":"9a41bdd9_4c3543f5","line":172,"updated":"2015-07-13 14:11:36.000000000","message":"Also need to delete package from tmp dirs","commit_id":"bbfbe5edf67b30aafe2aba1d452122bd42793435"},{"author":{"_account_id":12395,"name":"Roman Vasylets","email":"pomeo92@gmail.com","username":"rvasilets"},"change_message_id":"0aeb433ad450f7c4dbb9a590601ce1186a5f61b6","unresolved":false,"context_lines":[{"line_number":171,"context_line":"        tmp_dir \u003d tempfile.mkdtemp() + \"/package\""},{"line_number":172,"context_line":"        shutil.copytree(path, tmp_dir)"},{"line_number":173,"context_line":""},{"line_number":174,"context_line":"        zip_file \u003d tmp_dir + \".zip\""},{"line_number":175,"context_line":"        path_len \u003d len(tmp_dir) + 1"},{"line_number":176,"context_line":"        with zipfile.ZipFile(zip_file, \"w\") as zf:"},{"line_number":177,"context_line":"            for dir_name, _, files in os.walk(tmp_dir):"}],"source_content_type":"text/x-python","patch_set":6,"id":"9a41bdd9_cc915354","line":174,"updated":"2015-07-13 14:05:23.000000000","message":"Who will delete this file?","commit_id":"bbfbe5edf67b30aafe2aba1d452122bd42793435"},{"author":{"_account_id":12395,"name":"Roman Vasylets","email":"pomeo92@gmail.com","username":"rvasilets"},"change_message_id":"0aeb433ad450f7c4dbb9a590601ce1186a5f61b6","unresolved":false,"context_lines":[{"line_number":176,"context_line":"        with zipfile.ZipFile(zip_file, \"w\") as zf:"},{"line_number":177,"context_line":"            for dir_name, _, files in os.walk(tmp_dir):"},{"line_number":178,"context_line":"                for filename in files:"},{"line_number":179,"context_line":"                    fn \u003d os.path.join(dir_name, filename)"},{"line_number":180,"context_line":"                    if filename \u003d\u003d \"manifest.yaml\":"},{"line_number":181,"context_line":"                        self._update_manifest(fn)"},{"line_number":182,"context_line":"                    zf.write(fn, fn[path_len:])"}],"source_content_type":"text/x-python","patch_set":6,"id":"9a41bdd9_8cffcba9","line":179,"updated":"2015-07-13 14:05:23.000000000","message":"Could we give more readable name?","commit_id":"bbfbe5edf67b30aafe2aba1d452122bd42793435"},{"author":{"_account_id":12395,"name":"Roman Vasylets","email":"pomeo92@gmail.com","username":"rvasilets"},"change_message_id":"0aeb433ad450f7c4dbb9a590601ce1186a5f61b6","unresolved":false,"context_lines":[{"line_number":179,"context_line":"                    fn \u003d os.path.join(dir_name, filename)"},{"line_number":180,"context_line":"                    if filename \u003d\u003d \"manifest.yaml\":"},{"line_number":181,"context_line":"                        self._update_manifest(fn)"},{"line_number":182,"context_line":"                    zf.write(fn, fn[path_len:])"},{"line_number":183,"context_line":""},{"line_number":184,"context_line":"        return zip_file"},{"line_number":185,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"9a41bdd9_2c5f9fe6","line":182,"updated":"2015-07-13 14:05:23.000000000","message":"fn[path_len:] why we use such a magic?","commit_id":"bbfbe5edf67b30aafe2aba1d452122bd42793435"},{"author":{"_account_id":10475,"name":"Alexander Maretskiy","email":"amaretskiy@mirantis.com","username":"maretskiy"},"change_message_id":"d1b770ac0e0e3a703a6b6a1d971696b208524a5a","unresolved":false,"context_lines":[{"line_number":250,"context_line":"        self.clients(\"murano\").packages.delete(package_id)"},{"line_number":251,"context_line":""},{"line_number":252,"context_line":"    @base.atomic_action_timer(\"murano.update_package\")"},{"line_number":253,"context_line":"    def _update_package(self, package_id, body, operation):"},{"line_number":254,"context_line":"        \"\"\"Update specified package."},{"line_number":255,"context_line":""},{"line_number":256,"context_line":"        :param package_id: id of package tha will be updated"}],"source_content_type":"text/x-python","patch_set":12,"id":"3a50d1a3_44d30939","line":253,"updated":"2015-07-20 10:49:39.000000000","message":"Why not use `body\u0027 as dict, since we transform it into dict in any case","commit_id":"e79f413dca99b15f1ce74e45efecaf29f794c38c"},{"author":{"_account_id":10475,"name":"Alexander Maretskiy","email":"amaretskiy@mirantis.com","username":"maretskiy"},"change_message_id":"d1b770ac0e0e3a703a6b6a1d971696b208524a5a","unresolved":false,"context_lines":[{"line_number":269,"context_line":"    def _filter_applications(self, filter_query):"},{"line_number":270,"context_line":"        \"\"\"Filter list of uploaded application by specified criteria."},{"line_number":271,"context_line":""},{"line_number":272,"context_line":"        :param filter_query: string that contains filter criteria, lately it"},{"line_number":273,"context_line":"                             will be transformed to dict object to be passed"},{"line_number":274,"context_line":"                             as **kwargs to filter method"},{"line_number":275,"context_line":"                             e.g. \"{\"category\": \"Web\"}\""}],"source_content_type":"text/x-python","patch_set":12,"id":"3a50d1a3_242b5d32","line":272,"updated":"2015-07-20 10:49:39.000000000","message":"Transformation str-\u003edict looks unnecessary, why not use `filter_query\u0027 as dict? This looks logical","commit_id":"e79f413dca99b15f1ce74e45efecaf29f794c38c"},{"author":{"_account_id":6172,"name":"Boris Pavlovic","email":"boris@pavlovic.me","username":"boris-42"},"change_message_id":"64bbbaad604fa5dfde4c4e928563d607f97908e3","unresolved":false,"context_lines":[{"line_number":137,"context_line":"            include_disabled\u003dinclude_disabled)"},{"line_number":138,"context_line":""},{"line_number":139,"context_line":"    @staticmethod"},{"line_number":140,"context_line":"    def _read_from_file(filename):"},{"line_number":141,"context_line":"        with open(filename, \"r\") as f:"},{"line_number":142,"context_line":"            read_data \u003d f.read()"},{"line_number":143,"context_line":"        return yaml.safe_load(read_data)"}],"source_content_type":"text/x-python","patch_set":17,"id":"3a50d1a3_b88da932","line":140,"updated":"2015-07-28 23:28:45.000000000","message":"What I am saying is that: \n\n  _read_from_file - you should specify what actually are you reading.","commit_id":"2e2c18abca5b4b8f15c007fb68388c9cd32ed0d8"},{"author":{"_account_id":6172,"name":"Boris Pavlovic","email":"boris@pavlovic.me","username":"boris-42"},"change_message_id":"64bbbaad604fa5dfde4c4e928563d607f97908e3","unresolved":false,"context_lines":[{"line_number":143,"context_line":"        return yaml.safe_load(read_data)"},{"line_number":144,"context_line":""},{"line_number":145,"context_line":"    @staticmethod"},{"line_number":146,"context_line":"    def _write_to_file(data, filename):"},{"line_number":147,"context_line":"        with open(filename, \"w\") as f:"},{"line_number":148,"context_line":"            yaml.safe_dump(data, f)"},{"line_number":149,"context_line":""}],"source_content_type":"text/x-python","patch_set":17,"id":"3a50d1a3_7883a103","line":146,"updated":"2015-07-28 23:28:45.000000000","message":"you should specify what you are writing.","commit_id":"2e2c18abca5b4b8f15c007fb68388c9cd32ed0d8"},{"author":{"_account_id":6172,"name":"Boris Pavlovic","email":"boris@pavlovic.me","username":"boris-42"},"change_message_id":"64bbbaad604fa5dfde4c4e928563d607f97908e3","unresolved":false,"context_lines":[{"line_number":200,"context_line":"        class_data[\"Name\"] \u003d class_data[\"Name\"] + fullname_suffix"},{"line_number":201,"context_line":"        self._write_to_file(class_data, class_file)"},{"line_number":202,"context_line":""},{"line_number":203,"context_line":"    def _make_package_zip(self, path):"},{"line_number":204,"context_line":"        \"\"\"Prepare zip archive with Murano application."},{"line_number":205,"context_line":""},{"line_number":206,"context_line":"        It copies directory with Murano app files to temporary folder,"}],"source_content_type":"text/x-python","patch_set":17,"id":"3a50d1a3_f86fb15d","line":203,"updated":"2015-07-28 23:28:45.000000000","message":"_make_package_zip, read_file, write_file and change app name should go together inside the type decorator (outside of this class)","commit_id":"2e2c18abca5b4b8f15c007fb68388c9cd32ed0d8"},{"author":{"_account_id":11748,"name":"Chris St. Pierre","email":"cstpierr@cisco.com","username":"stpierre"},"change_message_id":"4fc986d110a7cbb78d0f5b015d4a93ae56bfb328","unresolved":false,"context_lines":[{"line_number":239,"context_line":"                        context"},{"line_number":240,"context_line":"        \"\"\""},{"line_number":241,"context_line":""},{"line_number":242,"context_line":"        fullname_suffix \u003d uuid.uuid4().hex[:8]"},{"line_number":243,"context_line":""},{"line_number":244,"context_line":"        manifest_file \u003d app_dir + \"manifest.yaml\""},{"line_number":245,"context_line":"        manifest \u003d self._read_from_file(manifest_file)"}],"source_content_type":"text/x-python","patch_set":23,"id":"3a50d1a3_39fa26be","line":242,"updated":"2015-08-03 12:21:12.000000000","message":"Instead of suffixing the name with a portion of a UUID, this should use self._generate_random_name() and completely replace the names. Everything needs to be named consistently to support out-of-band cleanup.","commit_id":"e7892e11d7d8064d6fb7c0d0dda7a92e793796fb"},{"author":{"_account_id":12395,"name":"Roman Vasylets","email":"pomeo92@gmail.com","username":"rvasilets"},"change_message_id":"b2cc306926f707737eb1b78bd6e8e3c2ab5d38e5","unresolved":false,"context_lines":[{"line_number":133,"context_line":"        )"},{"line_number":134,"context_line":""},{"line_number":135,"context_line":"    @base.atomic_action_timer(\"murano.list_packages\")"},{"line_number":136,"context_line":"    def _list_packages(self, include_disabled\u003dFalse):"},{"line_number":137,"context_line":"        \"\"\"Returns packages list.\"\"\""},{"line_number":138,"context_line":"        return self.clients(\"murano\").packages.list("},{"line_number":139,"context_line":"            include_disabled\u003dinclude_disabled)"}],"source_content_type":"text/x-python","patch_set":26,"id":"1a4dcd0f_964b90b0","line":136,"updated":"2015-08-03 23:31:57.000000000","message":"Please document this parameter, return value.","commit_id":"d36aaaa79b91ff74c7b97e2bcb1fc1c60a0f3f62"},{"author":{"_account_id":8592,"name":"Anastasia Kuznetsova","email":"akuznetsova@mirantis.com","username":"nastya-kuz"},"change_message_id":"fdbfe2ca2cbe470dfb80b574f980a7a298c3f992","unresolved":false,"context_lines":[{"line_number":133,"context_line":"        )"},{"line_number":134,"context_line":""},{"line_number":135,"context_line":"    @base.atomic_action_timer(\"murano.list_packages\")"},{"line_number":136,"context_line":"    def _list_packages(self, include_disabled\u003dFalse):"},{"line_number":137,"context_line":"        \"\"\"Returns packages list.\"\"\""},{"line_number":138,"context_line":"        return self.clients(\"murano\").packages.list("},{"line_number":139,"context_line":"            include_disabled\u003dinclude_disabled)"}],"source_content_type":"text/x-python","patch_set":26,"id":"1a4dcd0f_17c99e78","line":136,"in_reply_to":"1a4dcd0f_964b90b0","updated":"2015-08-04 10:36:50.000000000","message":"Done","commit_id":"d36aaaa79b91ff74c7b97e2bcb1fc1c60a0f3f62"},{"author":{"_account_id":12395,"name":"Roman Vasylets","email":"pomeo92@gmail.com","username":"rvasilets"},"change_message_id":"b2cc306926f707737eb1b78bd6e8e3c2ab5d38e5","unresolved":false,"context_lines":[{"line_number":198,"context_line":"class MuranoPackageManager(object):"},{"line_number":199,"context_line":""},{"line_number":200,"context_line":"    @staticmethod"},{"line_number":201,"context_line":"    def _read_from_file(filename):"},{"line_number":202,"context_line":"        with open(filename, \"r\") as f:"},{"line_number":203,"context_line":"            read_data \u003d f.read()"},{"line_number":204,"context_line":"        return yaml.safe_load(read_data)"}],"source_content_type":"text/x-python","patch_set":26,"id":"1a4dcd0f_6c0ab0d4","line":201,"updated":"2015-08-03 23:31:57.000000000","message":"Interesting decision to make a separate function for read/write\u003d) Ok,","commit_id":"d36aaaa79b91ff74c7b97e2bcb1fc1c60a0f3f62"},{"author":{"_account_id":12395,"name":"Roman Vasylets","email":"pomeo92@gmail.com","username":"rvasilets"},"change_message_id":"b2cc306926f707737eb1b78bd6e8e3c2ab5d38e5","unresolved":false,"context_lines":[{"line_number":211,"context_line":"    def _change_app_fullname(self, app_dir):"},{"line_number":212,"context_line":"        \"\"\"Change application full name."},{"line_number":213,"context_line":""},{"line_number":214,"context_line":"        To avoid name conflict error during package import (when one user"},{"line_number":215,"context_line":"        tries to import a few packages into the same tenant) need to change the"},{"line_number":216,"context_line":"        application name. For doing this need to replace following strings"},{"line_number":217,"context_line":"        in manifest.yaml"}],"source_content_type":"text/x-python","patch_set":26,"id":"1a4dcd0f_8c1a9c16","line":214,"updated":"2015-08-03 23:31:57.000000000","message":"\"one user\" -\u003e \"user\". Its already a single form.","commit_id":"d36aaaa79b91ff74c7b97e2bcb1fc1c60a0f3f62"},{"author":{"_account_id":8592,"name":"Anastasia Kuznetsova","email":"akuznetsova@mirantis.com","username":"nastya-kuz"},"change_message_id":"fdbfe2ca2cbe470dfb80b574f980a7a298c3f992","unresolved":false,"context_lines":[{"line_number":211,"context_line":"    def _change_app_fullname(self, app_dir):"},{"line_number":212,"context_line":"        \"\"\"Change application full name."},{"line_number":213,"context_line":""},{"line_number":214,"context_line":"        To avoid name conflict error during package import (when one user"},{"line_number":215,"context_line":"        tries to import a few packages into the same tenant) need to change the"},{"line_number":216,"context_line":"        application name. For doing this need to replace following strings"},{"line_number":217,"context_line":"        in manifest.yaml"}],"source_content_type":"text/x-python","patch_set":26,"id":"1a4dcd0f_d7a1f6aa","line":214,"in_reply_to":"1a4dcd0f_8c1a9c16","updated":"2015-08-04 10:36:50.000000000","message":"Done","commit_id":"d36aaaa79b91ff74c7b97e2bcb1fc1c60a0f3f62"},{"author":{"_account_id":12395,"name":"Roman Vasylets","email":"pomeo92@gmail.com","username":"rvasilets"},"change_message_id":"b2cc306926f707737eb1b78bd6e8e3c2ab5d38e5","unresolved":false,"context_lines":[{"line_number":213,"context_line":""},{"line_number":214,"context_line":"        To avoid name conflict error during package import (when one user"},{"line_number":215,"context_line":"        tries to import a few packages into the same tenant) need to change the"},{"line_number":216,"context_line":"        application name. For doing this need to replace following strings"},{"line_number":217,"context_line":"        in manifest.yaml"},{"line_number":218,"context_line":"        from"},{"line_number":219,"context_line":"            ..."}],"source_content_type":"text/x-python","patch_set":26,"id":"1a4dcd0f_6c3150a2","line":216,"updated":"2015-08-03 23:31:57.000000000","message":"strings -\u003e parts. Maybe its better, its a nit.","commit_id":"d36aaaa79b91ff74c7b97e2bcb1fc1c60a0f3f62"},{"author":{"_account_id":8592,"name":"Anastasia Kuznetsova","email":"akuznetsova@mirantis.com","username":"nastya-kuz"},"change_message_id":"fdbfe2ca2cbe470dfb80b574f980a7a298c3f992","unresolved":false,"context_lines":[{"line_number":213,"context_line":""},{"line_number":214,"context_line":"        To avoid name conflict error during package import (when one user"},{"line_number":215,"context_line":"        tries to import a few packages into the same tenant) need to change the"},{"line_number":216,"context_line":"        application name. For doing this need to replace following strings"},{"line_number":217,"context_line":"        in manifest.yaml"},{"line_number":218,"context_line":"        from"},{"line_number":219,"context_line":"            ..."}],"source_content_type":"text/x-python","patch_set":26,"id":"1a4dcd0f_f7a672c0","line":216,"in_reply_to":"1a4dcd0f_6c3150a2","updated":"2015-08-04 10:36:50.000000000","message":"Done","commit_id":"d36aaaa79b91ff74c7b97e2bcb1fc1c60a0f3f62"},{"author":{"_account_id":12395,"name":"Roman Vasylets","email":"pomeo92@gmail.com","username":"rvasilets"},"change_message_id":"b2cc306926f707737eb1b78bd6e8e3c2ab5d38e5","unresolved":false,"context_lines":[{"line_number":241,"context_line":"              std: io.murano"},{"line_number":242,"context_line":"            Name: \u003cnew_name\u003e"},{"line_number":243,"context_line":"            ..."},{"line_number":244,"context_line":"        :param app_dir: path to temporary dir with copied Murano application"},{"line_number":245,"context_line":"                        context"},{"line_number":246,"context_line":"        \"\"\""},{"line_number":247,"context_line":""}],"source_content_type":"text/x-python","patch_set":26,"id":"1a4dcd0f_b973184d","line":244,"updated":"2015-08-03 23:31:57.000000000","message":"\"path to directory with Murano application content\". Here is typo context, I think. Also This function could be used not only for temporary directories.","commit_id":"d36aaaa79b91ff74c7b97e2bcb1fc1c60a0f3f62"},{"author":{"_account_id":8592,"name":"Anastasia Kuznetsova","email":"akuznetsova@mirantis.com","username":"nastya-kuz"},"change_message_id":"fdbfe2ca2cbe470dfb80b574f980a7a298c3f992","unresolved":false,"context_lines":[{"line_number":241,"context_line":"              std: io.murano"},{"line_number":242,"context_line":"            Name: \u003cnew_name\u003e"},{"line_number":243,"context_line":"            ..."},{"line_number":244,"context_line":"        :param app_dir: path to temporary dir with copied Murano application"},{"line_number":245,"context_line":"                        context"},{"line_number":246,"context_line":"        \"\"\""},{"line_number":247,"context_line":""}],"source_content_type":"text/x-python","patch_set":26,"id":"1a4dcd0f_97ab6e89","line":244,"in_reply_to":"1a4dcd0f_b973184d","updated":"2015-08-04 10:36:50.000000000","message":"Done","commit_id":"d36aaaa79b91ff74c7b97e2bcb1fc1c60a0f3f62"},{"author":{"_account_id":12395,"name":"Roman Vasylets","email":"pomeo92@gmail.com","username":"rvasilets"},"change_message_id":"b2cc306926f707737eb1b78bd6e8e3c2ab5d38e5","unresolved":false,"context_lines":[{"line_number":290,"context_line":""},{"line_number":291,"context_line":"        return path_to_zip_file"},{"line_number":292,"context_line":""},{"line_number":293,"context_line":"    def _prepare_package(self, package_path):"},{"line_number":294,"context_line":"        \"\"\"Check whether the package path is path to zip archive or not."},{"line_number":295,"context_line":""},{"line_number":296,"context_line":"        If package_path is not a path to zip archive but path to Murano"}],"source_content_type":"text/x-python","patch_set":26,"id":"1a4dcd0f_76091f95","line":293,"updated":"2015-08-03 23:31:57.000000000","message":"I don\u0027t like this function. It execute one if. That is all. I think we could add this check to the _make_package_zip and delete 15 lines of code.","commit_id":"d36aaaa79b91ff74c7b97e2bcb1fc1c60a0f3f62"},{"author":{"_account_id":8592,"name":"Anastasia Kuznetsova","email":"akuznetsova@mirantis.com","username":"nastya-kuz"},"change_message_id":"75d694cd594c78b2d11af1575d4c4e19a2520872","unresolved":false,"context_lines":[{"line_number":290,"context_line":""},{"line_number":291,"context_line":"        return path_to_zip_file"},{"line_number":292,"context_line":""},{"line_number":293,"context_line":"    def _prepare_package(self, package_path):"},{"line_number":294,"context_line":"        \"\"\"Check whether the package path is path to zip archive or not."},{"line_number":295,"context_line":""},{"line_number":296,"context_line":"        If package_path is not a path to zip archive but path to Murano"}],"source_content_type":"text/x-python","patch_set":26,"id":"1a4dcd0f_ebe77810","line":293,"in_reply_to":"1a4dcd0f_76091f95","updated":"2015-08-04 08:25:49.000000000","message":"I do not want mix all in one method. _make_package_zip makes package zip) I think that there is nothing wrong to have one more method that checks input data and decides what to do next.","commit_id":"d36aaaa79b91ff74c7b97e2bcb1fc1c60a0f3f62"},{"author":{"_account_id":12395,"name":"Roman Vasylets","email":"pomeo92@gmail.com","username":"rvasilets"},"change_message_id":"3e0ee5e07b289c533b43a7a8646aca887dd4f5b9","unresolved":false,"context_lines":[{"line_number":290,"context_line":""},{"line_number":291,"context_line":"        return path_to_zip_file"},{"line_number":292,"context_line":""},{"line_number":293,"context_line":"    def _prepare_package(self, package_path):"},{"line_number":294,"context_line":"        \"\"\"Check whether the package path is path to zip archive or not."},{"line_number":295,"context_line":""},{"line_number":296,"context_line":"        If package_path is not a path to zip archive but path to Murano"}],"source_content_type":"text/x-python","patch_set":26,"id":"1a4dcd0f_17775e3b","line":293,"in_reply_to":"1a4dcd0f_ebe77810","updated":"2015-08-04 10:39:28.000000000","message":"I think adding one more if to method its not \u0027all in one\u0027 But one more function for if its called anti-pattern or overhead.","commit_id":"d36aaaa79b91ff74c7b97e2bcb1fc1c60a0f3f62"},{"author":{"_account_id":10475,"name":"Alexander Maretskiy","email":"amaretskiy@mirantis.com","username":"maretskiy"},"change_message_id":"3847511ff7ff735bed58527d90d0fa401e1efbef","unresolved":false,"context_lines":[{"line_number":252,"context_line":""},{"line_number":253,"context_line":"        new_fullname \u003d common_utils.generate_random_name()"},{"line_number":254,"context_line":""},{"line_number":255,"context_line":"        manifest_file \u003d app_dir + \"manifest.yaml\""},{"line_number":256,"context_line":"        manifest \u003d self._read_from_file(manifest_file)"},{"line_number":257,"context_line":""},{"line_number":258,"context_line":"        class_file_name \u003d manifest[\"Classes\"][manifest[\"FullName\"]]"}],"source_content_type":"text/x-python","patch_set":27,"id":"1a4dcd0f_0dc0b47b","line":255,"updated":"2015-08-14 12:59:47.000000000","message":"Use os.path.join, because 1) that is common way to construct paths and 2) app_dir is not verified to have \"/\" at the end:\n\n manifest_file \u003d os.path.join(app_dir, \"manifest.yaml\")","commit_id":"f7210493a28b57902ea9df16b2ee2c4a01ddf5f8"},{"author":{"_account_id":10475,"name":"Alexander Maretskiy","email":"amaretskiy@mirantis.com","username":"maretskiy"},"change_message_id":"3847511ff7ff735bed58527d90d0fa401e1efbef","unresolved":false,"context_lines":[{"line_number":257,"context_line":""},{"line_number":258,"context_line":"        class_file_name \u003d manifest[\"Classes\"][manifest[\"FullName\"]]"},{"line_number":259,"context_line":""},{"line_number":260,"context_line":"        class_file \u003d app_dir + \"Classes/\" + class_file_name"},{"line_number":261,"context_line":"        class_data \u003d self._read_from_file(class_file)"},{"line_number":262,"context_line":""},{"line_number":263,"context_line":"        # update manifest.yaml file"}],"source_content_type":"text/x-python","patch_set":27,"id":"1a4dcd0f_4d5b1cf7","line":260,"updated":"2015-08-14 12:59:47.000000000","message":"os.path.join","commit_id":"f7210493a28b57902ea9df16b2ee2c4a01ddf5f8"},{"author":{"_account_id":10475,"name":"Alexander Maretskiy","email":"amaretskiy@mirantis.com","username":"maretskiy"},"change_message_id":"3847511ff7ff735bed58527d90d0fa401e1efbef","unresolved":false,"context_lines":[{"line_number":263,"context_line":"        # update manifest.yaml file"},{"line_number":264,"context_line":"        del manifest[\"Classes\"][manifest[\"FullName\"]]"},{"line_number":265,"context_line":"        manifest[\"FullName\"] \u003d new_fullname"},{"line_number":266,"context_line":"        manifest[\"Classes\"][manifest[\"FullName\"]] \u003d class_file_name"},{"line_number":267,"context_line":"        self._write_to_file(manifest, manifest_file)"},{"line_number":268,"context_line":""},{"line_number":269,"context_line":"        # update Classes/\u003cclass_file_name\u003e.yaml"}],"source_content_type":"text/x-python","patch_set":27,"id":"1a4dcd0f_8da4c4b9","line":266,"updated":"2015-08-14 12:59:47.000000000","message":"s/manifest[\"FullName\"]/new_fullname/","commit_id":"f7210493a28b57902ea9df16b2ee2c4a01ddf5f8"},{"author":{"_account_id":10475,"name":"Alexander Maretskiy","email":"amaretskiy@mirantis.com","username":"maretskiy"},"change_message_id":"3847511ff7ff735bed58527d90d0fa401e1efbef","unresolved":false,"context_lines":[{"line_number":283,"context_line":"        \"\"\""},{"line_number":284,"context_line":""},{"line_number":285,"context_line":"        tmp_dir \u003d tempfile.mkdtemp()"},{"line_number":286,"context_line":"        pkg_dir \u003d tmp_dir + \"/package/\""},{"line_number":287,"context_line":"        try:"},{"line_number":288,"context_line":"            shutil.copytree(path, pkg_dir)"},{"line_number":289,"context_line":""}],"source_content_type":"text/x-python","patch_set":27,"id":"1a4dcd0f_2d97b03b","line":286,"updated":"2015-08-14 12:59:47.000000000","message":"os.path.join","commit_id":"f7210493a28b57902ea9df16b2ee2c4a01ddf5f8"},{"author":{"_account_id":12395,"name":"Roman Vasylets","email":"pomeo92@gmail.com","username":"rvasilets"},"change_message_id":"f6b01454c8529894464456d48dac92f19cb97c3d","unresolved":false,"context_lines":[{"line_number":166,"context_line":"        :param package_id: id of package that will be deleted"},{"line_number":167,"context_line":"        \"\"\""},{"line_number":168,"context_line":""},{"line_number":169,"context_line":"        self.clients(\"murano\").packages.delete(package_id)"},{"line_number":170,"context_line":""},{"line_number":171,"context_line":"    @atomic.action_timer(\"murano.update_package\")"},{"line_number":172,"context_line":"    def _update_package(self, package_id, body, operation):"}],"source_content_type":"text/x-python","patch_set":32,"id":"ba15a1d1_b5178c53","line":169,"updated":"2015-09-21 17:07:41.000000000","message":"Just a a question. Don\u0027t we need to use wait here?","commit_id":"e9421e000b9b3fc7be87c24415d7cdcd1da838b1"},{"author":{"_account_id":8592,"name":"Anastasia Kuznetsova","email":"akuznetsova@mirantis.com","username":"nastya-kuz"},"change_message_id":"1c0918edb850982b4b6928898a213e3af872b969","unresolved":false,"context_lines":[{"line_number":166,"context_line":"        :param package_id: id of package that will be deleted"},{"line_number":167,"context_line":"        \"\"\""},{"line_number":168,"context_line":""},{"line_number":169,"context_line":"        self.clients(\"murano\").packages.delete(package_id)"},{"line_number":170,"context_line":""},{"line_number":171,"context_line":"    @atomic.action_timer(\"murano.update_package\")"},{"line_number":172,"context_line":"    def _update_package(self, package_id, body, operation):"}],"source_content_type":"text/x-python","patch_set":32,"id":"ba15a1d1_f862bf15","line":169,"in_reply_to":"ba15a1d1_b5178c53","updated":"2015-09-22 09:42:26.000000000","message":"I guess no, because it is kind of atomic operation, just a delete request and we don\u0027t need to wait when package is deleted unlike environment, environment is more complex object and we need time to be sure that environment is deleted (it calls stack deletion, instances deletion, etc)","commit_id":"e9421e000b9b3fc7be87c24415d7cdcd1da838b1"},{"author":{"_account_id":12395,"name":"Roman Vasylets","email":"pomeo92@gmail.com","username":"rvasilets"},"change_message_id":"f6b01454c8529894464456d48dac92f19cb97c3d","unresolved":false,"context_lines":[{"line_number":169,"context_line":"        self.clients(\"murano\").packages.delete(package_id)"},{"line_number":170,"context_line":""},{"line_number":171,"context_line":"    @atomic.action_timer(\"murano.update_package\")"},{"line_number":172,"context_line":"    def _update_package(self, package_id, body, operation):"},{"line_number":173,"context_line":"        \"\"\"Update specified package."},{"line_number":174,"context_line":""},{"line_number":175,"context_line":"        :param package_id: id of package tha will be updated"}],"source_content_type":"text/x-python","patch_set":32,"id":"ba15a1d1_e08c6437","line":172,"updated":"2015-09-21 17:07:41.000000000","message":"Here we have default value for operation variable. https://github.com/openstack/python-muranoclient/blob/master/muranoclient/v1/packages.py#L113 So its better to document it or use in the code.","commit_id":"e9421e000b9b3fc7be87c24415d7cdcd1da838b1"},{"author":{"_account_id":8592,"name":"Anastasia Kuznetsova","email":"akuznetsova@mirantis.com","username":"nastya-kuz"},"change_message_id":"1c0918edb850982b4b6928898a213e3af872b969","unresolved":false,"context_lines":[{"line_number":169,"context_line":"        self.clients(\"murano\").packages.delete(package_id)"},{"line_number":170,"context_line":""},{"line_number":171,"context_line":"    @atomic.action_timer(\"murano.update_package\")"},{"line_number":172,"context_line":"    def _update_package(self, package_id, body, operation):"},{"line_number":173,"context_line":"        \"\"\"Update specified package."},{"line_number":174,"context_line":""},{"line_number":175,"context_line":"        :param package_id: id of package tha will be updated"}],"source_content_type":"text/x-python","patch_set":32,"id":"ba15a1d1_9b9e1d53","line":172,"in_reply_to":"ba15a1d1_e08c6437","updated":"2015-09-22 09:42:26.000000000","message":"Done","commit_id":"e9421e000b9b3fc7be87c24415d7cdcd1da838b1"},{"author":{"_account_id":12395,"name":"Roman Vasylets","email":"pomeo92@gmail.com","username":"rvasilets"},"change_message_id":"f6b01454c8529894464456d48dac92f19cb97c3d","unresolved":false,"context_lines":[{"line_number":194,"context_line":"        :returns: filtered list of packages"},{"line_number":195,"context_line":"        \"\"\""},{"line_number":196,"context_line":""},{"line_number":197,"context_line":"        return self.clients(\"murano\").packages.filter(**filter_query)"},{"line_number":198,"context_line":""},{"line_number":199,"context_line":"    @atomic.action_timer(\"murano.zip_package\")"},{"line_number":200,"context_line":"    def _zip_package(self, package_path):"}],"source_content_type":"text/x-python","patch_set":32,"id":"ba15a1d1_5574f0cd","line":197,"updated":"2015-09-21 17:07:41.000000000","message":"Nit. Is this atomic working? http://paste.openstack.org/show/472958/ Zeros confused me. Could we use filter somehow to see more durable results?","commit_id":"e9421e000b9b3fc7be87c24415d7cdcd1da838b1"},{"author":{"_account_id":8592,"name":"Anastasia Kuznetsova","email":"akuznetsova@mirantis.com","username":"nastya-kuz"},"change_message_id":"1c0918edb850982b4b6928898a213e3af872b969","unresolved":false,"context_lines":[{"line_number":194,"context_line":"        :returns: filtered list of packages"},{"line_number":195,"context_line":"        \"\"\""},{"line_number":196,"context_line":""},{"line_number":197,"context_line":"        return self.clients(\"murano\").packages.filter(**filter_query)"},{"line_number":198,"context_line":""},{"line_number":199,"context_line":"    @atomic.action_timer(\"murano.zip_package\")"},{"line_number":200,"context_line":"    def _zip_package(self, package_path):"}],"source_content_type":"text/x-python","patch_set":32,"id":"ba15a1d1_81354edc","line":197,"in_reply_to":"ba15a1d1_5574f0cd","updated":"2015-09-22 09:42:26.000000000","message":"Yes, this is an atomic action, we will see some results when we have more packages and have some \"bad\" filter request or problems in Murano API (slow request handling), I am not sure that we have to reproduce it in the gate, we will \"play\" with number of packages/ filter queries in the scale environment and during real performance testing.","commit_id":"e9421e000b9b3fc7be87c24415d7cdcd1da838b1"},{"author":{"_account_id":12395,"name":"Roman Vasylets","email":"pomeo92@gmail.com","username":"rvasilets"},"change_message_id":"f6b01454c8529894464456d48dac92f19cb97c3d","unresolved":false,"context_lines":[{"line_number":196,"context_line":""},{"line_number":197,"context_line":"        return self.clients(\"murano\").packages.filter(**filter_query)"},{"line_number":198,"context_line":""},{"line_number":199,"context_line":"    @atomic.action_timer(\"murano.zip_package\")"},{"line_number":200,"context_line":"    def _zip_package(self, package_path):"},{"line_number":201,"context_line":"        \"\"\"Call _prepare_package method that returns path to zip archive.\"\"\""},{"line_number":202,"context_line":"        return MuranoPackageManager()._prepare_package(package_path)"}],"source_content_type":"text/x-python","patch_set":32,"id":"ba15a1d1_d5cb201d","line":199,"updated":"2015-09-21 17:07:41.000000000","message":"I think that this mustn’t be an atomic function. Why? - By Rally with atomic actions we measure OpenStack Clients functions for now. There is no such function in CLi of Murano. To check just Python staff is not for what atomic actions was created.","commit_id":"e9421e000b9b3fc7be87c24415d7cdcd1da838b1"},{"author":{"_account_id":8592,"name":"Anastasia Kuznetsova","email":"akuznetsova@mirantis.com","username":"nastya-kuz"},"change_message_id":"1c0918edb850982b4b6928898a213e3af872b969","unresolved":false,"context_lines":[{"line_number":196,"context_line":""},{"line_number":197,"context_line":"        return self.clients(\"murano\").packages.filter(**filter_query)"},{"line_number":198,"context_line":""},{"line_number":199,"context_line":"    @atomic.action_timer(\"murano.zip_package\")"},{"line_number":200,"context_line":"    def _zip_package(self, package_path):"},{"line_number":201,"context_line":"        \"\"\"Call _prepare_package method that returns path to zip archive.\"\"\""},{"line_number":202,"context_line":"        return MuranoPackageManager()._prepare_package(package_path)"}],"source_content_type":"text/x-python","patch_set":32,"id":"ba15a1d1_412f3688","line":199,"in_reply_to":"ba15a1d1_d5cb201d","updated":"2015-09-22 09:42:26.000000000","message":"Done","commit_id":"e9421e000b9b3fc7be87c24415d7cdcd1da838b1"},{"author":{"_account_id":12395,"name":"Roman Vasylets","email":"pomeo92@gmail.com","username":"rvasilets"},"change_message_id":"f6b01454c8529894464456d48dac92f19cb97c3d","unresolved":false,"context_lines":[{"line_number":251,"context_line":"        manifest[\"Classes\"][new_fullname] \u003d class_file_name"},{"line_number":252,"context_line":"        self._write_to_file(manifest, manifest_file)"},{"line_number":253,"context_line":""},{"line_number":254,"context_line":"    def _make_package_zip(self, path):"},{"line_number":255,"context_line":"        \"\"\"Prepare zip archive with Murano application."},{"line_number":256,"context_line":""},{"line_number":257,"context_line":"        It copies directory with Murano app files to temporary folder,"}],"source_content_type":"text/x-python","patch_set":32,"id":"ba15a1d1_da358ff7","line":254,"updated":"2015-09-21 17:07:41.000000000","message":"Why not to move this under _prepare_package function and delete a lot of redundant lines and one function. This function is call inly in 2-3 lines function in 291 line. I think that in this case code became more entangled with this function.","commit_id":"e9421e000b9b3fc7be87c24415d7cdcd1da838b1"},{"author":{"_account_id":8592,"name":"Anastasia Kuznetsova","email":"akuznetsova@mirantis.com","username":"nastya-kuz"},"change_message_id":"1c0918edb850982b4b6928898a213e3af872b969","unresolved":false,"context_lines":[{"line_number":251,"context_line":"        manifest[\"Classes\"][new_fullname] \u003d class_file_name"},{"line_number":252,"context_line":"        self._write_to_file(manifest, manifest_file)"},{"line_number":253,"context_line":""},{"line_number":254,"context_line":"    def _make_package_zip(self, path):"},{"line_number":255,"context_line":"        \"\"\"Prepare zip archive with Murano application."},{"line_number":256,"context_line":""},{"line_number":257,"context_line":"        It copies directory with Murano app files to temporary folder,"}],"source_content_type":"text/x-python","patch_set":32,"id":"ba15a1d1_acb3a909","line":254,"in_reply_to":"ba15a1d1_da358ff7","updated":"2015-09-22 09:42:26.000000000","message":"Done","commit_id":"e9421e000b9b3fc7be87c24415d7cdcd1da838b1"}],"samples/tasks/scenarios/murano/import_and_delete_package.json":[{"author":{"_account_id":10475,"name":"Alexander Maretskiy","email":"amaretskiy@mirantis.com","username":"maretskiy"},"change_message_id":"d1b770ac0e0e3a703a6b6a1d971696b208524a5a","unresolved":false,"context_lines":[{"line_number":7,"context_line":"            \"runner\": {"},{"line_number":8,"context_line":"                \"type\": \"constant\","},{"line_number":9,"context_line":"                \"times\": 5,"},{"line_number":10,"context_line":"                \"concurrency\": 1"},{"line_number":11,"context_line":"            },"},{"line_number":12,"context_line":"            \"context\": {"},{"line_number":13,"context_line":"                \"users\": {"}],"source_content_type":"application/json","patch_set":12,"id":"3a50d1a3_64e2c5d7","line":10,"updated":"2015-07-20 10:49:39.000000000","message":"Use at least `2\u0027, otherwise there is no reason to use `constant\u0027 runner, since single thread is actually `serial\u0027 runner","commit_id":"e79f413dca99b15f1ce74e45efecaf29f794c38c"}],"samples/tasks/scenarios/murano/import_and_delete_package.yaml":[{"author":{"_account_id":12395,"name":"Roman Vasylets","email":"pomeo92@gmail.com","username":"rvasilets"},"change_message_id":"86547c64c1962c307f215701f325027289deb8e0","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"  MuranoPackages.import_and_list_packages:"},{"line_number":3,"context_line":"    -"},{"line_number":4,"context_line":"      args:"},{"line_number":5,"context_line":"        package: \"rally/rally-jobs/extra/murano/applications/HelloReporter/\""}],"source_content_type":"text/x-yaml","patch_set":6,"id":"9a41bdd9_27a82c1f","line":2,"updated":"2015-07-13 09:39:18.000000000","message":"import_and_delete_packages","commit_id":"bbfbe5edf67b30aafe2aba1d452122bd42793435"},{"author":{"_account_id":10475,"name":"Alexander Maretskiy","email":"amaretskiy@mirantis.com","username":"maretskiy"},"change_message_id":"d1b770ac0e0e3a703a6b6a1d971696b208524a5a","unresolved":false,"context_lines":[{"line_number":6,"context_line":"      runner:"},{"line_number":7,"context_line":"        type: \"constant\""},{"line_number":8,"context_line":"        times: 5"},{"line_number":9,"context_line":"        concurrency: 1"},{"line_number":10,"context_line":"      context:"},{"line_number":11,"context_line":"        users:"},{"line_number":12,"context_line":"          tenants: 2"}],"source_content_type":"text/x-yaml","patch_set":12,"id":"3a50d1a3_24ecbdc6","line":9,"updated":"2015-07-20 10:49:39.000000000","message":"ditto","commit_id":"e79f413dca99b15f1ce74e45efecaf29f794c38c"}],"samples/tasks/scenarios/murano/import_and_filter_applications.json":[{"author":{"_account_id":10475,"name":"Alexander Maretskiy","email":"amaretskiy@mirantis.com","username":"maretskiy"},"change_message_id":"d1b770ac0e0e3a703a6b6a1d971696b208524a5a","unresolved":false,"context_lines":[{"line_number":8,"context_line":"            \"runner\": {"},{"line_number":9,"context_line":"                \"type\": \"constant\","},{"line_number":10,"context_line":"                \"times\": 5,"},{"line_number":11,"context_line":"                \"concurrency\": 1"},{"line_number":12,"context_line":"            },"},{"line_number":13,"context_line":"            \"context\": {"},{"line_number":14,"context_line":"                \"users\": {"}],"source_content_type":"application/json","patch_set":12,"id":"3a50d1a3_04350145","line":11,"updated":"2015-07-20 10:49:39.000000000","message":"ditto","commit_id":"e79f413dca99b15f1ce74e45efecaf29f794c38c"}],"samples/tasks/scenarios/murano/import_and_list_packages.json":[{"author":{"_account_id":12395,"name":"Roman Vasylets","email":"pomeo92@gmail.com","username":"rvasilets"},"change_message_id":"0aeb433ad450f7c4dbb9a590601ce1186a5f61b6","unresolved":false,"context_lines":[{"line_number":2,"context_line":"    \"MuranoPackages.import_and_list_packages\": ["},{"line_number":3,"context_line":"        {"},{"line_number":4,"context_line":"            \"args\": {"},{"line_number":5,"context_line":"                \"package\": \"rally/rally-jobs/extra/murano/applications/HelloReporter/\""},{"line_number":6,"context_line":"            },"},{"line_number":7,"context_line":"            \"runner\": {"},{"line_number":8,"context_line":"                \"type\": \"constant\","}],"source_content_type":"application/json","patch_set":6,"id":"9a41bdd9_60ab701e","line":5,"updated":"2015-07-13 14:05:23.000000000","message":"OSError: [Errno 2] No such file or directory: \u0027rally/rally-jobs/extra/murano/applications/HelloReporter/\u0027\nLooks like would be work rally-jobs/extra/murano/applications/HelloReporter/\u0027","commit_id":"bbfbe5edf67b30aafe2aba1d452122bd42793435"},{"author":{"_account_id":10475,"name":"Alexander Maretskiy","email":"amaretskiy@mirantis.com","username":"maretskiy"},"change_message_id":"d1b770ac0e0e3a703a6b6a1d971696b208524a5a","unresolved":false,"context_lines":[{"line_number":7,"context_line":"            \"runner\": {"},{"line_number":8,"context_line":"                \"type\": \"constant\","},{"line_number":9,"context_line":"                \"times\": 5,"},{"line_number":10,"context_line":"                \"concurrency\": 1"},{"line_number":11,"context_line":"            },"},{"line_number":12,"context_line":"            \"context\": {"},{"line_number":13,"context_line":"                \"users\": {"}],"source_content_type":"application/json","patch_set":12,"id":"3a50d1a3_a4468dbd","line":10,"updated":"2015-07-20 10:49:39.000000000","message":"same here - use `2\u0027","commit_id":"e79f413dca99b15f1ce74e45efecaf29f794c38c"}],"samples/tasks/scenarios/murano/package_lifecycle.json":[{"author":{"_account_id":10475,"name":"Alexander Maretskiy","email":"amaretskiy@mirantis.com","username":"maretskiy"},"change_message_id":"d1b770ac0e0e3a703a6b6a1d971696b208524a5a","unresolved":false,"context_lines":[{"line_number":9,"context_line":"            \"runner\": {"},{"line_number":10,"context_line":"                \"type\": \"constant\","},{"line_number":11,"context_line":"                \"times\": 5,"},{"line_number":12,"context_line":"                \"concurrency\": 1"},{"line_number":13,"context_line":"            },"},{"line_number":14,"context_line":"            \"context\": {"},{"line_number":15,"context_line":"                \"users\": {"}],"source_content_type":"application/json","patch_set":12,"id":"3a50d1a3_641725a4","line":12,"updated":"2015-07-20 10:49:39.000000000","message":"ditto","commit_id":"e79f413dca99b15f1ce74e45efecaf29f794c38c"}],"tests/unit/plugins/openstack/scenarios/murano/test_packages.py":[{"author":{"_account_id":12395,"name":"Roman Vasylets","email":"pomeo92@gmail.com","username":"rvasilets"},"change_message_id":"f252c006544f00fbba3bfe3a6e79461df29181ce","unresolved":false,"context_lines":[{"line_number":18,"context_line":"from rally.plugins.openstack.scenarios.murano import packages"},{"line_number":19,"context_line":"from tests.unit import test"},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"CTX \u003d \"rally.benchmark.context\""},{"line_number":22,"context_line":"MURANO_SCENARIO \u003d (\"rally.plugins.openstack.scenarios.murano.\""},{"line_number":23,"context_line":"                   \"packages.MuranoPackages\")"},{"line_number":24,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"9a41bdd9_4390b143","line":21,"updated":"2015-07-13 15:08:31.000000000","message":"This is not used","commit_id":"bbfbe5edf67b30aafe2aba1d452122bd42793435"},{"author":{"_account_id":12395,"name":"Roman Vasylets","email":"pomeo92@gmail.com","username":"rvasilets"},"change_message_id":"f252c006544f00fbba3bfe3a6e79461df29181ce","unresolved":false,"context_lines":[{"line_number":29,"context_line":"    @mock.patch(MURANO_SCENARIO + \"._make_zip\")"},{"line_number":30,"context_line":"    @mock.patch(MURANO_SCENARIO + \"._list_packages\")"},{"line_number":31,"context_line":"    def test_import_and_list_packages("},{"line_number":32,"context_line":"            self, mock__list_packages, mock__make_zip, mock__import_package):"},{"line_number":33,"context_line":"        scenario \u003d packages.MuranoPackages()"},{"line_number":34,"context_line":"        mock__make_zip.return_value \u003d \"foo_package.zip\""},{"line_number":35,"context_line":"        fake_package \u003d mock.Mock(id\u003d\"foo_id\")"}],"source_content_type":"text/x-python","patch_set":6,"id":"9a41bdd9_0384e9d1","line":32,"updated":"2015-07-13 15:08:31.000000000","message":"I think it must to be second test case of this scenario without using _make_zip","commit_id":"bbfbe5edf67b30aafe2aba1d452122bd42793435"},{"author":{"_account_id":12395,"name":"Roman Vasylets","email":"pomeo92@gmail.com","username":"rvasilets"},"change_message_id":"f252c006544f00fbba3bfe3a6e79461df29181ce","unresolved":false,"context_lines":[{"line_number":32,"context_line":"            self, mock__list_packages, mock__make_zip, mock__import_package):"},{"line_number":33,"context_line":"        scenario \u003d packages.MuranoPackages()"},{"line_number":34,"context_line":"        mock__make_zip.return_value \u003d \"foo_package.zip\""},{"line_number":35,"context_line":"        fake_package \u003d mock.Mock(id\u003d\"foo_id\")"},{"line_number":36,"context_line":"        mock__import_package.return_value \u003d fake_package"},{"line_number":37,"context_line":"        scenario.import_and_list_packages(\"foo_package\")"},{"line_number":38,"context_line":"        mock__import_package.assert_called_once_with(\"foo_package.zip\")"}],"source_content_type":"text/x-python","patch_set":6,"id":"9a41bdd9_63cb751f","line":35,"updated":"2015-07-13 15:08:31.000000000","message":"We don\u0027t need fake_package.id at all","commit_id":"bbfbe5edf67b30aafe2aba1d452122bd42793435"},{"author":{"_account_id":12395,"name":"Roman Vasylets","email":"pomeo92@gmail.com","username":"rvasilets"},"change_message_id":"f252c006544f00fbba3bfe3a6e79461df29181ce","unresolved":false,"context_lines":[{"line_number":70,"context_line":"        mock__delete_package.assert_called_once_with(\"foo_id\")"},{"line_number":71,"context_line":""},{"line_number":72,"context_line":"    @mock.patch(MURANO_SCENARIO + \"._filter_applications\")"},{"line_number":73,"context_line":"    def test_filter_applications(self, mock__filter_applications):"},{"line_number":74,"context_line":"        scenario \u003d packages.MuranoPackages()"},{"line_number":75,"context_line":"        scenario._filter_applications(\"{\\\"category\\\": \\\"Web\\\"}\")"},{"line_number":76,"context_line":"        mock__filter_applications.assert_called_once_with("}],"source_content_type":"text/x-python","patch_set":6,"id":"9a41bdd9_b9fa0abc","line":73,"updated":"2015-07-13 15:08:31.000000000","message":"rename please test_import_and_filter_applications","commit_id":"bbfbe5edf67b30aafe2aba1d452122bd42793435"},{"author":{"_account_id":12395,"name":"Roman Vasylets","email":"pomeo92@gmail.com","username":"rvasilets"},"change_message_id":"f252c006544f00fbba3bfe3a6e79461df29181ce","unresolved":false,"context_lines":[{"line_number":72,"context_line":"    @mock.patch(MURANO_SCENARIO + \"._filter_applications\")"},{"line_number":73,"context_line":"    def test_filter_applications(self, mock__filter_applications):"},{"line_number":74,"context_line":"        scenario \u003d packages.MuranoPackages()"},{"line_number":75,"context_line":"        scenario._filter_applications(\"{\\\"category\\\": \\\"Web\\\"}\")"},{"line_number":76,"context_line":"        mock__filter_applications.assert_called_once_with("},{"line_number":77,"context_line":"            \"{\\\"category\\\": \\\"Web\\\"}\""},{"line_number":78,"context_line":"        )"}],"source_content_type":"text/x-python","patch_set":6,"id":"9a41bdd9_f90f32df","line":75,"updated":"2015-07-13 15:08:31.000000000","message":"You need to call here scenario.import_and_filter_applications","commit_id":"bbfbe5edf67b30aafe2aba1d452122bd42793435"},{"author":{"_account_id":11748,"name":"Chris St. Pierre","email":"cstpierr@cisco.com","username":"stpierre"},"change_message_id":"4fc986d110a7cbb78d0f5b015d4a93ae56bfb328","unresolved":false,"context_lines":[{"line_number":31,"context_line":"            self, mock__list_packages,"},{"line_number":32,"context_line":"            mock__zip_package, mock__import_package):"},{"line_number":33,"context_line":"        scenario \u003d packages.MuranoPackages()"},{"line_number":34,"context_line":"        mock__zip_package.return_value \u003d \"foo_package.zip\""},{"line_number":35,"context_line":"        scenario.import_and_list_packages(\"foo_package.zip\")"},{"line_number":36,"context_line":"        mock__import_package.assert_called_once_with(\"foo_package.zip\")"},{"line_number":37,"context_line":"        mock__list_packages.assert_called_once_with()"}],"source_content_type":"text/x-python","patch_set":23,"id":"3a50d1a3_f9727e49","line":34,"updated":"2015-08-03 12:21:12.000000000","message":"Because you set this return value to the same thing that you pass in to import_and_list_packages(), this test does not ensure that _import_package() is called with the return value of _zip_package. Instead of setting an explicit return value, do:\n\n    scenario.import_and_list_packages(\"foo_package.zip\")\n    mock__import_package.assert_called_once_with(\n        mock__zip_package.return_value)\n    mock__zip_package.assert_called_once_with(\"foo_package.zip\")\n    mock__list_packages.assert_called_once_with()\n\nThe same applies to the other tests below.","commit_id":"e7892e11d7d8064d6fb7c0d0dda7a92e793796fb"},{"author":{"_account_id":11748,"name":"Chris St. Pierre","email":"cstpierr@cisco.com","username":"stpierre"},"change_message_id":"fc99dacfb2bc56a06d63b10cb019b65ee1edeec2","unresolved":false,"context_lines":[{"line_number":34,"context_line":"        mock__zip_package.return_value \u003d \"foo_package.zip\""},{"line_number":35,"context_line":"        scenario.import_and_list_packages(\"foo_package.zip\")"},{"line_number":36,"context_line":"        mock__import_package.assert_called_once_with("},{"line_number":37,"context_line":"            mock__zip_package.return_value)"},{"line_number":38,"context_line":"        mock__zip_package.assert_called_once_with(\"foo_package.zip\")"},{"line_number":39,"context_line":"        mock__list_packages.assert_called_once_with()"},{"line_number":40,"context_line":""}],"source_content_type":"text/x-python","patch_set":26,"id":"1a4dcd0f_9669508e","line":37,"updated":"2015-08-03 19:47:34.000000000","message":"This doesn\u0027t fix the issue; you still set the mock__zip_package return value. This is just a more verbose way of saying the same thing you were before. You need to remove the mock__zip_package.return_value \u003d \"foo_package.zip\" line above so that mock__zip_package just uses the default Mock object return value.","commit_id":"d36aaaa79b91ff74c7b97e2bcb1fc1c60a0f3f62"},{"author":{"_account_id":8592,"name":"Anastasia Kuznetsova","email":"akuznetsova@mirantis.com","username":"nastya-kuz"},"change_message_id":"fdbfe2ca2cbe470dfb80b574f980a7a298c3f992","unresolved":false,"context_lines":[{"line_number":34,"context_line":"        mock__zip_package.return_value \u003d \"foo_package.zip\""},{"line_number":35,"context_line":"        scenario.import_and_list_packages(\"foo_package.zip\")"},{"line_number":36,"context_line":"        mock__import_package.assert_called_once_with("},{"line_number":37,"context_line":"            mock__zip_package.return_value)"},{"line_number":38,"context_line":"        mock__zip_package.assert_called_once_with(\"foo_package.zip\")"},{"line_number":39,"context_line":"        mock__list_packages.assert_called_once_with()"},{"line_number":40,"context_line":""}],"source_content_type":"text/x-python","patch_set":26,"id":"1a4dcd0f_17a0be9e","line":37,"in_reply_to":"1a4dcd0f_9669508e","updated":"2015-08-04 10:36:50.000000000","message":"Done","commit_id":"d36aaaa79b91ff74c7b97e2bcb1fc1c60a0f3f62"},{"author":{"_account_id":10475,"name":"Alexander Maretskiy","email":"amaretskiy@mirantis.com","username":"maretskiy"},"change_message_id":"3847511ff7ff735bed58527d90d0fa401e1efbef","unresolved":false,"context_lines":[{"line_number":30,"context_line":"    def test_make_zip_import_and_list_packages("},{"line_number":31,"context_line":"            self, mock__list_packages,"},{"line_number":32,"context_line":"            mock__zip_package, mock__import_package):"},{"line_number":33,"context_line":"        scenario \u003d packages.MuranoPackages()"},{"line_number":34,"context_line":"        scenario.import_and_list_packages(\"foo_package.zip\")"},{"line_number":35,"context_line":"        mock__import_package.assert_called_once_with("},{"line_number":36,"context_line":"            mock__zip_package.return_value)"}],"source_content_type":"text/x-python","patch_set":27,"id":"1a4dcd0f_31306ae8","line":33,"updated":"2015-08-14 12:59:47.000000000","message":"Remove code duplication and save LOC - add setUp() method and move there scenario initialization and all mocks for utils.MuranoScenario methods:\n\n def setUp(self):\n   super(MuranoPackagesTestCase, self).setUp()\n   self.scenario \u003d packages.MuranoPackages()\n   self.scenario._import_package \u003d mock.Mock()\n   self.scenario._zip_package \u003d mock.Mock()\n   self.scenario._list_packages \u003d mock.Mock()\n   self.scenario._delete_package \u003d mock.Mock()\n   self.scenario._update_package \u003d mock.Mock()\n   self.scenario._filter_applications \u003d mock.Mock()","commit_id":"f7210493a28b57902ea9df16b2ee2c4a01ddf5f8"}],"tests/unit/plugins/openstack/scenarios/murano/test_utils.py":[{"author":{"_account_id":6172,"name":"Boris Pavlovic","email":"boris@pavlovic.me","username":"boris-42"},"change_message_id":"64bbbaad604fa5dfde4c4e928563d607f97908e3","unresolved":false,"context_lines":[{"line_number":107,"context_line":"                                       \"murano.deploy_environment\")"},{"line_number":108,"context_line":""},{"line_number":109,"context_line":"    def test_list_packages(self):"},{"line_number":110,"context_line":"        self.clients(\"murano\").packages.list.return_value \u003d []"},{"line_number":111,"context_line":"        scenario \u003d utils.MuranoScenario()"},{"line_number":112,"context_line":"        return_packages_list \u003d scenario._list_packages()"},{"line_number":113,"context_line":"        self.assertEqual([], return_packages_list)"}],"source_content_type":"text/x-python","patch_set":17,"id":"3a50d1a3_98b8edc9","line":110,"updated":"2015-07-28 23:28:45.000000000","message":"it\u0027s better to test something real [mock.Mock()]","commit_id":"2e2c18abca5b4b8f15c007fb68388c9cd32ed0d8"},{"author":{"_account_id":6172,"name":"Boris Pavlovic","email":"boris@pavlovic.me","username":"boris-42"},"change_message_id":"64bbbaad604fa5dfde4c4e928563d607f97908e3","unresolved":false,"context_lines":[{"line_number":110,"context_line":"        self.clients(\"murano\").packages.list.return_value \u003d []"},{"line_number":111,"context_line":"        scenario \u003d utils.MuranoScenario()"},{"line_number":112,"context_line":"        return_packages_list \u003d scenario._list_packages()"},{"line_number":113,"context_line":"        self.assertEqual([], return_packages_list)"},{"line_number":114,"context_line":"        self._test_atomic_action_timer(scenario.atomic_actions(),"},{"line_number":115,"context_line":"                                       \"murano.list_packages\")"},{"line_number":116,"context_line":""}],"source_content_type":"text/x-python","patch_set":17,"id":"3a50d1a3_38c8b954","line":113,"updated":"2015-07-28 23:28:45.000000000","message":"remove line 112 and put here: \n\n\n  self.assertEqual(self.clients(\"murano\").packages.list.return_value,\n                   scenario._list_packages())","commit_id":"2e2c18abca5b4b8f15c007fb68388c9cd32ed0d8"},{"author":{"_account_id":6172,"name":"Boris Pavlovic","email":"boris@pavlovic.me","username":"boris-42"},"change_message_id":"64bbbaad604fa5dfde4c4e928563d607f97908e3","unresolved":false,"context_lines":[{"line_number":120,"context_line":"    def test_read_from_file(self, mock_open):"},{"line_number":121,"context_line":"        scenario \u003d utils.MuranoScenario()"},{"line_number":122,"context_line":"        data \u003d scenario._read_from_file(\"filename\")"},{"line_number":123,"context_line":"        self.assertEqual({\"Key\": \"value\"}, data)"},{"line_number":124,"context_line":""},{"line_number":125,"context_line":"    @mock.patch(\"rally.task.scenarios.base.Scenario._generate_random_name\")"},{"line_number":126,"context_line":"    @mock.patch(\"rally.plugins.openstack.scenarios.murano.\""}],"source_content_type":"text/x-python","patch_set":17,"id":"3a50d1a3_98df8d0c","line":123,"updated":"2015-07-28 23:28:45.000000000","message":"same here do not introduce data variable.","commit_id":"2e2c18abca5b4b8f15c007fb68388c9cd32ed0d8"},{"author":{"_account_id":11748,"name":"Chris St. Pierre","email":"cstpierr@cisco.com","username":"stpierre"},"change_message_id":"4fc986d110a7cbb78d0f5b015d4a93ae56bfb328","unresolved":false,"context_lines":[{"line_number":185,"context_line":"        self.assertEqual(\"tmp/tmpfile.zip\", zip_file)"},{"line_number":186,"context_line":""},{"line_number":187,"context_line":"    def test_list_packages(self):"},{"line_number":188,"context_line":"        self.clients(\"murano\").packages.list.return_value \u003d [mock.Mock()]"},{"line_number":189,"context_line":"        scenario \u003d utils.MuranoScenario()"},{"line_number":190,"context_line":"        self.assertEqual(self.clients(\"murano\").packages.list.return_value,"},{"line_number":191,"context_line":"                         scenario._list_packages())"}],"source_content_type":"text/x-python","patch_set":23,"id":"3a50d1a3_d91782a1","line":188,"updated":"2015-08-03 12:21:12.000000000","message":"This line is unnecessary.","commit_id":"e7892e11d7d8064d6fb7c0d0dda7a92e793796fb"},{"author":{"_account_id":11748,"name":"Chris St. Pierre","email":"cstpierr@cisco.com","username":"stpierre"},"change_message_id":"4fc986d110a7cbb78d0f5b015d4a93ae56bfb328","unresolved":false,"context_lines":[{"line_number":211,"context_line":"                                       \"murano.import_package\")"},{"line_number":212,"context_line":""},{"line_number":213,"context_line":"    def test_delete_package(self):"},{"line_number":214,"context_line":"        self.clients(\"murano\").packages.delete.return_value \u003d \"ok\""},{"line_number":215,"context_line":"        scenario \u003d utils.MuranoScenario()"},{"line_number":216,"context_line":"        scenario._delete_package(\"package_id\")"},{"line_number":217,"context_line":"        self.clients(\"murano\").packages.delete.assert_called_once_with("}],"source_content_type":"text/x-python","patch_set":23,"id":"3a50d1a3_5987f2b4","line":214,"updated":"2015-08-03 12:21:12.000000000","message":"This line is unnecessary.","commit_id":"e7892e11d7d8064d6fb7c0d0dda7a92e793796fb"},{"author":{"_account_id":10475,"name":"Alexander Maretskiy","email":"amaretskiy@mirantis.com","username":"maretskiy"},"change_message_id":"3847511ff7ff735bed58527d90d0fa401e1efbef","unresolved":false,"context_lines":[{"line_number":106,"context_line":"        self._test_atomic_action_timer(scenario.atomic_actions(),"},{"line_number":107,"context_line":"                                       \"murano.deploy_environment\")"},{"line_number":108,"context_line":""},{"line_number":109,"context_line":"    @mock.patch(\"rally.plugins.openstack.scenarios.murano.utils.open\","},{"line_number":110,"context_line":"                side_effect\u003dmock.mock_open(read_data\u003d\"Key: value\"),"},{"line_number":111,"context_line":"                create\u003dTrue)"},{"line_number":112,"context_line":"    def test_read_from_file(self, mock_open):"}],"source_content_type":"text/x-python","patch_set":27,"id":"1a4dcd0f_f13a0298","line":109,"updated":"2015-08-14 12:59:47.000000000","message":"MRN_UTILS + \".open\"","commit_id":"f7210493a28b57902ea9df16b2ee2c4a01ddf5f8"},{"author":{"_account_id":10475,"name":"Alexander Maretskiy","email":"amaretskiy@mirantis.com","username":"maretskiy"},"change_message_id":"3847511ff7ff735bed58527d90d0fa401e1efbef","unresolved":false,"context_lines":[{"line_number":115,"context_line":"        expected_data \u003d {\"Key\": \"value\"}"},{"line_number":116,"context_line":"        self.assertEqual(expected_data, data)"},{"line_number":117,"context_line":""},{"line_number":118,"context_line":"    @mock.patch(\"rally.plugins.openstack.scenarios.murano.\""},{"line_number":119,"context_line":"                \"utils.MuranoPackageManager._read_from_file\")"},{"line_number":120,"context_line":"    @mock.patch(\"rally.plugins.openstack.scenarios.murano.\""},{"line_number":121,"context_line":"                \"utils.MuranoPackageManager._write_to_file\")"}],"source_content_type":"text/x-python","patch_set":27,"id":"1a4dcd0f_31686a87","line":118,"updated":"2015-08-14 12:59:47.000000000","message":"Use MRN_UTILS + ...","commit_id":"f7210493a28b57902ea9df16b2ee2c4a01ddf5f8"},{"author":{"_account_id":10475,"name":"Alexander Maretskiy","email":"amaretskiy@mirantis.com","username":"maretskiy"},"change_message_id":"3847511ff7ff735bed58527d90d0fa401e1efbef","unresolved":false,"context_lines":[{"line_number":117,"context_line":""},{"line_number":118,"context_line":"    @mock.patch(\"rally.plugins.openstack.scenarios.murano.\""},{"line_number":119,"context_line":"                \"utils.MuranoPackageManager._read_from_file\")"},{"line_number":120,"context_line":"    @mock.patch(\"rally.plugins.openstack.scenarios.murano.\""},{"line_number":121,"context_line":"                \"utils.MuranoPackageManager._write_to_file\")"},{"line_number":122,"context_line":"    def test_change_app_fullname("},{"line_number":123,"context_line":"            self, mock_murano_package_manager__write_to_file,"}],"source_content_type":"text/x-python","patch_set":27,"id":"1a4dcd0f_51f896c4","line":120,"updated":"2015-08-14 12:59:47.000000000","message":"ditto","commit_id":"f7210493a28b57902ea9df16b2ee2c4a01ddf5f8"},{"author":{"_account_id":10475,"name":"Alexander Maretskiy","email":"amaretskiy@mirantis.com","username":"maretskiy"},"change_message_id":"3847511ff7ff735bed58527d90d0fa401e1efbef","unresolved":false,"context_lines":[{"line_number":141,"context_line":""},{"line_number":142,"context_line":"    @mock.patch(\"tempfile.mkdtemp\")"},{"line_number":143,"context_line":"    @mock.patch(\"shutil.copytree\")"},{"line_number":144,"context_line":"    @mock.patch(\"rally.plugins.openstack.scenarios.murano.\""},{"line_number":145,"context_line":"                \"utils.MuranoPackageManager._change_app_fullname\")"},{"line_number":146,"context_line":"    @mock.patch(\"rally.common.fileutils.pack_dir\")"},{"line_number":147,"context_line":"    @mock.patch(\"shutil.rmtree\")"}],"source_content_type":"text/x-python","patch_set":27,"id":"1a4dcd0f_91561ecd","line":144,"updated":"2015-08-14 12:59:47.000000000","message":"MRN_UTILS + \".MuranoPackageManager._change_app_fullname\"","commit_id":"f7210493a28b57902ea9df16b2ee2c4a01ddf5f8"},{"author":{"_account_id":10475,"name":"Alexander Maretskiy","email":"amaretskiy@mirantis.com","username":"maretskiy"},"change_message_id":"3847511ff7ff735bed58527d90d0fa401e1efbef","unresolved":false,"context_lines":[{"line_number":164,"context_line":"        mock_shutil_rmtree.assert_called_once_with(\"tmp/tmpfile\")"},{"line_number":165,"context_line":""},{"line_number":166,"context_line":"    @mock.patch(\"zipfile.is_zipfile\")"},{"line_number":167,"context_line":"    @mock.patch(\"rally.plugins.openstack.scenarios.murano.\""},{"line_number":168,"context_line":"                \"utils.MuranoPackageManager._make_package_zip\")"},{"line_number":169,"context_line":"    def test_prepare_zip_if_not_zip("},{"line_number":170,"context_line":"            self, mock_murano_package_manager__make_package_zip,"}],"source_content_type":"text/x-python","patch_set":27,"id":"1a4dcd0f_11020eb5","line":167,"updated":"2015-08-14 12:59:47.000000000","message":"Use MRN_UTILS + ...","commit_id":"f7210493a28b57902ea9df16b2ee2c4a01ddf5f8"}]}
