)]}'
{".gitignore":[{"author":{"_account_id":9545,"name":"Andriy Kurilin","email":"andr.kurilin@gmail.com","username":"akurilin"},"change_message_id":"1a71e087576fef4e404ca2de2b0de1c61ca233bd","unresolved":false,"context_lines":[{"line_number":1,"context_line":"*.py[cod]"},{"line_number":2,"context_line":""},{"line_number":3,"context_line":"# C extensions"},{"line_number":4,"context_line":"*.so"}],"source_content_type":"application/octet-stream","patch_set":20,"id":"3a961159_263d632d","side":"PARENT","line":1,"updated":"2014-12-29 17:20:56.000000000","message":"why this file is removed?","commit_id":"f5e1917bbf903416d7076747bb38aa3ac0ddd366"},{"author":{"_account_id":9545,"name":"Andriy Kurilin","email":"andr.kurilin@gmail.com","username":"akurilin"},"change_message_id":"87842614976c572b80849127d6b37d8a4c623c56","unresolved":false,"context_lines":[{"line_number":1,"context_line":"*.py[cod]"},{"line_number":2,"context_line":""},{"line_number":3,"context_line":"# C extensions"},{"line_number":4,"context_line":"*.so"},{"line_number":5,"context_line":""}],"source_content_type":"application/octet-stream","patch_set":32,"id":"3a961159_02b65adc","side":"PARENT","line":2,"updated":"2015-01-03 16:12:30.000000000","message":"why you remove empty lines in this file?","commit_id":"c8dac09776423320de387e094ccf5ac7105715d5"}],"/COMMIT_MSG":[{"author":{"_account_id":9545,"name":"Andriy Kurilin","email":"andr.kurilin@gmail.com","username":"akurilin"},"change_message_id":"d71ad3ca5cb3fb6696a463bddf171b6fa6b8dcf4","unresolved":false,"context_lines":[{"line_number":7,"context_line":"Add murano base for murano benchmarks"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Add murano context, add image_name to image context,"},{"line_number":10,"context_line":"add murano client to osclients, add python client validation"},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"Change-Id: I4767be09aec54a441cf31eb924f89444482b66d3"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":22,"id":"3a961159_410ed933","line":10,"updated":"2014-12-29 17:34:25.000000000","message":"From patch-set #18, python-*client validator is disappeared","commit_id":"ff67810efc6231ba53e9b29be006040702d65543"},{"author":{"_account_id":6172,"name":"Boris Pavlovic","email":"boris@pavlovic.me","username":"boris-42"},"change_message_id":"62788fbc523ca0fb9ba73361eda996464a175749","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     Roman Vasilets \u003crvasilets@mirantis.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2015-03-06 17:13:53 +0200"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Add murano base for murano benchmarks"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Add murano context, add image_name to image context,"},{"line_number":10,"context_line":"add murano client to osclients"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":71,"id":"9a80dd14_32e704ae","line":7,"updated":"2015-03-06 16:37:59.000000000","message":"This commit message looks quite bad.\n\n\n\n  Add base for murano benchmarking \n\n  - Add murano client to osclients\n\n\n  - Add murano context that \u003cdo something\u003e\n     \u003clarge description here\u003e\n\n  - Add to samples first Murano APP that is used in gaiting \n\n  ...","commit_id":"7799cbcc1f39f7f4dd392852caba46af9bdfc285"},{"author":{"_account_id":12395,"name":"Roman Vasylets","email":"pomeo92@gmail.com","username":"rvasilets"},"change_message_id":"3906c89d9fb60deaeb7656b4507bce070cd1e334","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     Roman Vasilets \u003crvasilets@mirantis.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2015-03-06 17:13:53 +0200"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Add murano base for murano benchmarks"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Add murano context, add image_name to image context,"},{"line_number":10,"context_line":"add murano client to osclients"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":71,"id":"9a80dd14_e772a210","line":7,"in_reply_to":"9a80dd14_32e704ae","updated":"2015-03-10 14:11:38.000000000","message":"Done","commit_id":"7799cbcc1f39f7f4dd392852caba46af9bdfc285"},{"author":{"_account_id":6172,"name":"Boris Pavlovic","email":"boris@pavlovic.me","username":"boris-42"},"change_message_id":"e7ec92c18dbeecbf65b576f1bfbac5c9037ed725","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Add base for murano benchmarking"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"  - Add murano context that takes a simple package from rally-jobs/"},{"line_number":10,"context_line":"    extra/murano/applications/io.murano.apps.HelloReporter.zip"},{"line_number":11,"context_line":"  - Add to samples first Murano APP that is used in gaiting"},{"line_number":12,"context_line":"  - Add json file that is used to deploy simple Murano"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":98,"id":"7aaa499b_1b9a2915","line":9,"updated":"2015-04-12 10:02:21.000000000","message":"This commit message is not enough good written.\n\nFirst of all you are not adding the base for murano benchmark. You are adding Murano context that uploads applications. \n\n  - We are adding Murano context that can upload application to Murano from specific path \n\n  - Add to rally-jobs/extra base structure and first Murano app, that is used in gates for testing purpose\n\n  - ....","commit_id":"de3e16d0561416768760ff43aa10e8d64432e457"},{"author":{"_account_id":12395,"name":"Roman Vasylets","email":"pomeo92@gmail.com","username":"rvasilets"},"change_message_id":"c529f66387cca68e797c4c167be2a54790559d8f","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Add base for murano benchmarking"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"  - Add murano context that takes a simple package from rally-jobs/"},{"line_number":10,"context_line":"    extra/murano/applications/io.murano.apps.HelloReporter.zip"},{"line_number":11,"context_line":"  - Add to samples first Murano APP that is used in gaiting"},{"line_number":12,"context_line":"  - Add json file that is used to deploy simple Murano"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":98,"id":"7aaa499b_b358bcfb","line":9,"in_reply_to":"7aaa499b_1b9a2915","updated":"2015-04-14 12:45:44.000000000","message":"Done","commit_id":"de3e16d0561416768760ff43aa10e8d64432e457"}],"rally-jobs/extra/README.rst":[{"author":{"_account_id":10475,"name":"Alexander Maretskiy","email":"amaretskiy@mirantis.com","username":"maretskiy"},"change_message_id":"93afa901c36385137524f6580334197cbf7cda5c","unresolved":false,"context_lines":[{"line_number":4,"context_line":"All files from this directory will be copy pasted to gates, so you are able to"},{"line_number":5,"context_line":"use absolute path in rally tasks. Files will be in ~/.rally/extra/*"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"murano_app directory"},{"line_number":8,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":9,"context_line":""},{"line_number":10,"context_line":"It\u0027s prepared Murano directory that we use for running Murano scenarios and"}],"source_content_type":"text/x-rst","patch_set":62,"id":"ba7be1f8_605e88eb","line":7,"updated":"2015-02-20 11:55:23.000000000","message":"Now directory is named `murano\u0027\n\nI recommend to place a slash after directory name so improve readability, like this:\n\n Directory murano/\n \u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d","commit_id":"813e5520099d7cfbdc35f8557bd2294450796a87"},{"author":{"_account_id":12395,"name":"Roman Vasylets","email":"pomeo92@gmail.com","username":"rvasilets"},"change_message_id":"1bc3f4aaddc454cde7ad99d6047cd4ebfdb3fc11","unresolved":false,"context_lines":[{"line_number":4,"context_line":"All files from this directory will be copy pasted to gates, so you are able to"},{"line_number":5,"context_line":"use absolute path in rally tasks. Files will be in ~/.rally/extra/*"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"murano_app directory"},{"line_number":8,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":9,"context_line":""},{"line_number":10,"context_line":"It\u0027s prepared Murano directory that we use for running Murano scenarios and"}],"source_content_type":"text/x-rst","patch_set":62,"id":"ba7be1f8_ef698326","line":7,"in_reply_to":"ba7be1f8_605e88eb","updated":"2015-02-20 13:35:04.000000000","message":"Done","commit_id":"813e5520099d7cfbdc35f8557bd2294450796a87"},{"author":{"_account_id":8507,"name":"Mikhail Dubov","email":"mdubov@mirantis.com","username":"msdubov"},"change_message_id":"49bf539ddbbdd750ae9e274873a9943146647731","unresolved":false,"context_lines":[{"line_number":7,"context_line":"Directory murano/"},{"line_number":8,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":9,"context_line":""},{"line_number":10,"context_line":"It\u0027s prepared Murano directory that we use for running Murano scenarios and"},{"line_number":11,"context_line":"therefore build package from it. Murano can\u0027t work with the packages with"},{"line_number":12,"context_line":"the same content so we change description in manifest file to build different"},{"line_number":13,"context_line":"packages and then achivate(*.zip) it."}],"source_content_type":"text/x-rst","patch_set":69,"id":"9a80dd14_9c0cc796","line":10,"updated":"2015-03-04 14:13:09.000000000","message":"It\u0027s a special Murano directory ...","commit_id":"1897d8935d76923e8e4c19253cce6ea08953eb06"},{"author":{"_account_id":8507,"name":"Mikhail Dubov","email":"mdubov@mirantis.com","username":"msdubov"},"change_message_id":"49bf539ddbbdd750ae9e274873a9943146647731","unresolved":false,"context_lines":[{"line_number":10,"context_line":"It\u0027s prepared Murano directory that we use for running Murano scenarios and"},{"line_number":11,"context_line":"therefore build package from it. Murano can\u0027t work with the packages with"},{"line_number":12,"context_line":"the same content so we change description in manifest file to build different"},{"line_number":13,"context_line":"packages and then achivate(*.zip) it."}],"source_content_type":"text/x-rst","patch_set":69,"id":"9a80dd14_5c124fb5","line":13,"updated":"2015-03-04 14:13:09.000000000","message":"Please correct \u0027achivate\u0027 -\u003e \u0027archive\u0027","commit_id":"1897d8935d76923e8e4c19253cce6ea08953eb06"},{"author":{"_account_id":6172,"name":"Boris Pavlovic","email":"boris@pavlovic.me","username":"boris-42"},"change_message_id":"4003b1df89c03e9fc68ffff7be2e4b67d666549b","unresolved":false,"context_lines":[{"line_number":5,"context_line":"use absolute path in rally tasks. Files will be in ~/.rally/extra/*"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Directory murano/"},{"line_number":8,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":9,"context_line":""},{"line_number":10,"context_line":"It\u0027s a special Murano directory that we use for running Murano scenarios and"},{"line_number":11,"context_line":"therefore build package from it. Murano can\u0027t work with the packages with"}],"source_content_type":"text/x-rst","patch_set":71,"id":"9a80dd14_5248f886","line":8,"updated":"2015-03-06 16:49:39.000000000","message":"This should be \n\n  murano/ directory\n  -----------------\n\nThe second thing is I dislike the structure of this directory. \n\nInstead of having: \n\n  murano/app_package_name/files\n\nyou have\n\n  murano/files\n\nThis means that we can use in gates only 1 APP which is actually quite bad.","commit_id":"7799cbcc1f39f7f4dd392852caba46af9bdfc285"},{"author":{"_account_id":12395,"name":"Roman Vasylets","email":"pomeo92@gmail.com","username":"rvasilets"},"change_message_id":"3906c89d9fb60deaeb7656b4507bce070cd1e334","unresolved":false,"context_lines":[{"line_number":5,"context_line":"use absolute path in rally tasks. Files will be in ~/.rally/extra/*"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Directory murano/"},{"line_number":8,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":9,"context_line":""},{"line_number":10,"context_line":"It\u0027s a special Murano directory that we use for running Murano scenarios and"},{"line_number":11,"context_line":"therefore build package from it. Murano can\u0027t work with the packages with"}],"source_content_type":"text/x-rst","patch_set":71,"id":"9a80dd14_00f6c15c","line":8,"in_reply_to":"9a80dd14_5248f886","updated":"2015-03-10 14:11:38.000000000","message":"I dislike this because in murano/ there is json file that is not applies to Murano package and in setup Murano context therefore we will need to copy all except json. To summarize, it\u0027s to us additional work.","commit_id":"7799cbcc1f39f7f4dd392852caba46af9bdfc285"},{"author":{"_account_id":6172,"name":"Boris Pavlovic","email":"boris@pavlovic.me","username":"boris-42"},"change_message_id":"4003b1df89c03e9fc68ffff7be2e4b67d666549b","unresolved":false,"context_lines":[{"line_number":7,"context_line":"Directory murano/"},{"line_number":8,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":9,"context_line":""},{"line_number":10,"context_line":"It\u0027s a special Murano directory that we use for running Murano scenarios and"},{"line_number":11,"context_line":"therefore build package from it. Murano can\u0027t work with the packages with"},{"line_number":12,"context_line":"the same content so we change description in manifest file to build different"},{"line_number":13,"context_line":"packages and then archive(*.zip) it."}],"source_content_type":"text/x-rst","patch_set":71,"id":"9a80dd14_323aa4e7","line":10,"updated":"2015-03-06 16:49:39.000000000","message":"Murano directory contains \u003cwhat it contains\u003e for running \u003cit is used in context not scenario\u003e.\n\n\nPlease describe what is in directory now how we are using it.","commit_id":"7799cbcc1f39f7f4dd392852caba46af9bdfc285"},{"author":{"_account_id":12395,"name":"Roman Vasylets","email":"pomeo92@gmail.com","username":"rvasilets"},"change_message_id":"3906c89d9fb60deaeb7656b4507bce070cd1e334","unresolved":false,"context_lines":[{"line_number":7,"context_line":"Directory murano/"},{"line_number":8,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":9,"context_line":""},{"line_number":10,"context_line":"It\u0027s a special Murano directory that we use for running Murano scenarios and"},{"line_number":11,"context_line":"therefore build package from it. Murano can\u0027t work with the packages with"},{"line_number":12,"context_line":"the same content so we change description in manifest file to build different"},{"line_number":13,"context_line":"packages and then archive(*.zip) it."}],"source_content_type":"text/x-rst","patch_set":71,"id":"9a80dd14_0a7b40be","line":10,"in_reply_to":"9a80dd14_323aa4e7","updated":"2015-03-10 14:11:38.000000000","message":"Done","commit_id":"7799cbcc1f39f7f4dd392852caba46af9bdfc285"},{"author":{"_account_id":6172,"name":"Boris Pavlovic","email":"boris@pavlovic.me","username":"boris-42"},"change_message_id":"4003b1df89c03e9fc68ffff7be2e4b67d666549b","unresolved":false,"context_lines":[{"line_number":8,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":9,"context_line":""},{"line_number":10,"context_line":"It\u0027s a special Murano directory that we use for running Murano scenarios and"},{"line_number":11,"context_line":"therefore build package from it. Murano can\u0027t work with the packages with"},{"line_number":12,"context_line":"the same content so we change description in manifest file to build different"},{"line_number":13,"context_line":"packages and then archive(*.zip) it."}],"source_content_type":"text/x-rst","patch_set":71,"id":"9a80dd14_fdc1bd54","line":11,"updated":"2015-03-06 16:49:39.000000000","message":"Murano can\u0027t work and rest of the message should be removed. \n\nAt point of reading this directory nobody cares about how we are going to use this inside Rally. \n\nThey should only know that what is this.","commit_id":"7799cbcc1f39f7f4dd392852caba46af9bdfc285"},{"author":{"_account_id":12395,"name":"Roman Vasylets","email":"pomeo92@gmail.com","username":"rvasilets"},"change_message_id":"3906c89d9fb60deaeb7656b4507bce070cd1e334","unresolved":false,"context_lines":[{"line_number":8,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":9,"context_line":""},{"line_number":10,"context_line":"It\u0027s a special Murano directory that we use for running Murano scenarios and"},{"line_number":11,"context_line":"therefore build package from it. Murano can\u0027t work with the packages with"},{"line_number":12,"context_line":"the same content so we change description in manifest file to build different"},{"line_number":13,"context_line":"packages and then archive(*.zip) it."}],"source_content_type":"text/x-rst","patch_set":71,"id":"9a80dd14_ea7fcca8","line":11,"in_reply_to":"9a80dd14_fdc1bd54","updated":"2015-03-10 14:11:38.000000000","message":"Done","commit_id":"7799cbcc1f39f7f4dd392852caba46af9bdfc285"},{"author":{"_account_id":9180,"name":"Olga Kopylova","email":"olkonami@gmail.com","username":"olkonami"},"change_message_id":"86ad49827a601bb8e2c951c7caa2b58b2e97ed19","unresolved":false,"context_lines":[{"line_number":7,"context_line":"murano/ directory"},{"line_number":8,"context_line":"-----------------"},{"line_number":9,"context_line":""},{"line_number":10,"context_line":"Here we have unzipped Murano package that is use to prepare Murano context and"},{"line_number":11,"context_line":"json-file that is use to deploy environment."}],"source_content_type":"text/x-rst","patch_set":84,"id":"1a6ced46_e43b4fe9","line":10,"updated":"2015-03-23 17:43:26.000000000","message":"s/is use/is used/","commit_id":"5db7a6d9814594e3da353e616b1d226b00d893b1"},{"author":{"_account_id":12395,"name":"Roman Vasylets","email":"pomeo92@gmail.com","username":"rvasilets"},"change_message_id":"8b1e72be0072099e9bb5899c7cdae21f246a568d","unresolved":false,"context_lines":[{"line_number":7,"context_line":"murano/ directory"},{"line_number":8,"context_line":"-----------------"},{"line_number":9,"context_line":""},{"line_number":10,"context_line":"Here we have unzipped Murano package that is use to prepare Murano context and"},{"line_number":11,"context_line":"json-file that is use to deploy environment."}],"source_content_type":"text/x-rst","patch_set":84,"id":"1a6ced46_dc4623bf","line":10,"in_reply_to":"1a6ced46_e43b4fe9","updated":"2015-03-23 19:16:02.000000000","message":"I did\u0027t already used this directory when I am sitting at the computer and read this document","commit_id":"5db7a6d9814594e3da353e616b1d226b00d893b1"},{"author":{"_account_id":8507,"name":"Mikhail Dubov","email":"mdubov@mirantis.com","username":"msdubov"},"change_message_id":"adb1bf626186327744a5cacccaf2bdf4bbea6e0b","unresolved":false,"context_lines":[{"line_number":7,"context_line":"murano/ directory"},{"line_number":8,"context_line":"-----------------"},{"line_number":9,"context_line":""},{"line_number":10,"context_line":"Here we have unzipped Murano package that is use to prepare Murano context and"},{"line_number":11,"context_line":"json-file that is use to deploy environment."}],"source_content_type":"text/x-rst","patch_set":98,"id":"7aaa499b_5d953ee2","line":10,"updated":"2015-04-13 07:04:48.000000000","message":"s/use/used","commit_id":"de3e16d0561416768760ff43aa10e8d64432e457"},{"author":{"_account_id":12395,"name":"Roman Vasylets","email":"pomeo92@gmail.com","username":"rvasilets"},"change_message_id":"6183c8dd1cb993501449934a7c33f376459b46a3","unresolved":false,"context_lines":[{"line_number":7,"context_line":"murano/ directory"},{"line_number":8,"context_line":"-----------------"},{"line_number":9,"context_line":""},{"line_number":10,"context_line":"Here we have unzipped Murano package that is use to prepare Murano context and"},{"line_number":11,"context_line":"json-file that is use to deploy environment."}],"source_content_type":"text/x-rst","patch_set":98,"id":"7aaa499b_6d6493e4","line":10,"in_reply_to":"7aaa499b_5d953ee2","updated":"2015-04-14 12:41:37.000000000","message":"Done","commit_id":"de3e16d0561416768760ff43aa10e8d64432e457"},{"author":{"_account_id":8507,"name":"Mikhail Dubov","email":"mdubov@mirantis.com","username":"msdubov"},"change_message_id":"adb1bf626186327744a5cacccaf2bdf4bbea6e0b","unresolved":false,"context_lines":[{"line_number":8,"context_line":"-----------------"},{"line_number":9,"context_line":""},{"line_number":10,"context_line":"Here we have unzipped Murano package that is use to prepare Murano context and"},{"line_number":11,"context_line":"json-file that is use to deploy environment."}],"source_content_type":"text/x-rst","patch_set":98,"id":"7aaa499b_fda3ea4d","line":11,"updated":"2015-04-13 07:04:48.000000000","message":"same here","commit_id":"de3e16d0561416768760ff43aa10e8d64432e457"},{"author":{"_account_id":12395,"name":"Roman Vasylets","email":"pomeo92@gmail.com","username":"rvasilets"},"change_message_id":"6183c8dd1cb993501449934a7c33f376459b46a3","unresolved":false,"context_lines":[{"line_number":8,"context_line":"-----------------"},{"line_number":9,"context_line":""},{"line_number":10,"context_line":"Here we have unzipped Murano package that is use to prepare Murano context and"},{"line_number":11,"context_line":"json-file that is use to deploy environment."}],"source_content_type":"text/x-rst","patch_set":98,"id":"7aaa499b_8d691fc1","line":11,"in_reply_to":"7aaa499b_fda3ea4d","updated":"2015-04-14 12:41:37.000000000","message":"Done","commit_id":"de3e16d0561416768760ff43aa10e8d64432e457"},{"author":{"_account_id":10475,"name":"Alexander Maretskiy","email":"amaretskiy@mirantis.com","username":"maretskiy"},"change_message_id":"f64b8e003b260a908b9f46d77aa2393ae7f26ec5","unresolved":false,"context_lines":[{"line_number":7,"context_line":"murano/ directory"},{"line_number":8,"context_line":"-----------------"},{"line_number":9,"context_line":""},{"line_number":10,"context_line":"Here we have unzipped Murano package that is used to prepare Murano context and"},{"line_number":11,"context_line":"json-file that is used to deploy environment."}],"source_content_type":"text/x-rst","patch_set":103,"id":"1aca2d91_ce5e3945","line":10,"updated":"2015-05-06 13:08:54.000000000","message":"Here we have `unzipped\u0027, but this patch includes `murano/applications/HelloReporter/io.murano.apps.HelloReporter.zip\u0027 instead","commit_id":"b5a343ae2a1faad54fc4cd68bb56c061b374a4cc"}],"rally-jobs/extra/murano/HelloReporter/Classes/HelloReporter.yaml":[{"author":{"_account_id":6172,"name":"Boris Pavlovic","email":"boris@pavlovic.me","username":"boris-42"},"change_message_id":"944813eeaf22abccac5e7432819ea574e501ebdd","unresolved":false,"context_lines":[{"line_number":4,"context_line":"  sys: io.murano.system"},{"line_number":5,"context_line":""},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Name: HelloReporter"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Extends: std:Application"},{"line_number":10,"context_line":""}],"source_content_type":"text/x-yaml","patch_set":90,"id":"da9b358b_1193185d","line":7,"updated":"2015-03-30 12:26:39.000000000","message":"You should change this name as well during creating packages","commit_id":"f3c985ddc767173a4c58950b45c6ec2bf48356ab"}],"rally-jobs/extra/murano/HelloReporter/manifest.yaml":[{"author":{"_account_id":10475,"name":"Alexander Maretskiy","email":"amaretskiy@mirantis.com","username":"maretskiy"},"change_message_id":"93afa901c36385137524f6580334197cbf7cda5c","unresolved":false,"context_lines":[{"line_number":3,"context_line":"FullName: io.murano.apps.HelloReporter"},{"line_number":4,"context_line":"Name: HelloReporter"},{"line_number":5,"context_line":"Description: |"},{"line_number":6,"context_line":" HelloReporter test app."},{"line_number":7,"context_line":"Author: \u0027Mirantis, Inc\u0027"},{"line_number":8,"context_line":"Tags: [App, Test, HelloWorld]"},{"line_number":9,"context_line":"Classes:"}],"source_content_type":"text/x-yaml","patch_set":62,"id":"ba7be1f8_6095a8e3","line":6,"updated":"2015-02-20 11:55:23.000000000","message":"Use 2 spaces indentation (same as in other yamls)","commit_id":"813e5520099d7cfbdc35f8557bd2294450796a87"},{"author":{"_account_id":12395,"name":"Roman Vasylets","email":"pomeo92@gmail.com","username":"rvasilets"},"change_message_id":"1bc3f4aaddc454cde7ad99d6047cd4ebfdb3fc11","unresolved":false,"context_lines":[{"line_number":3,"context_line":"FullName: io.murano.apps.HelloReporter"},{"line_number":4,"context_line":"Name: HelloReporter"},{"line_number":5,"context_line":"Description: |"},{"line_number":6,"context_line":" HelloReporter test app."},{"line_number":7,"context_line":"Author: \u0027Mirantis, Inc\u0027"},{"line_number":8,"context_line":"Tags: [App, Test, HelloWorld]"},{"line_number":9,"context_line":"Classes:"}],"source_content_type":"text/x-yaml","patch_set":62,"id":"ba7be1f8_0f77b703","line":6,"in_reply_to":"ba7be1f8_6095a8e3","updated":"2015-02-20 13:35:04.000000000","message":"Done","commit_id":"813e5520099d7cfbdc35f8557bd2294450796a87"},{"author":{"_account_id":10475,"name":"Alexander Maretskiy","email":"amaretskiy@mirantis.com","username":"maretskiy"},"change_message_id":"93afa901c36385137524f6580334197cbf7cda5c","unresolved":false,"context_lines":[{"line_number":7,"context_line":"Author: \u0027Mirantis, Inc\u0027"},{"line_number":8,"context_line":"Tags: [App, Test, HelloWorld]"},{"line_number":9,"context_line":"Classes:"},{"line_number":10,"context_line":" io.murano.apps.HelloReporter: HelloReporter.yaml"}],"source_content_type":"text/x-yaml","patch_set":62,"id":"ba7be1f8_809a9c12","line":10,"updated":"2015-02-20 11:55:23.000000000","message":"ditto","commit_id":"813e5520099d7cfbdc35f8557bd2294450796a87"},{"author":{"_account_id":12395,"name":"Roman Vasylets","email":"pomeo92@gmail.com","username":"rvasilets"},"change_message_id":"1bc3f4aaddc454cde7ad99d6047cd4ebfdb3fc11","unresolved":false,"context_lines":[{"line_number":7,"context_line":"Author: \u0027Mirantis, Inc\u0027"},{"line_number":8,"context_line":"Tags: [App, Test, HelloWorld]"},{"line_number":9,"context_line":"Classes:"},{"line_number":10,"context_line":" io.murano.apps.HelloReporter: HelloReporter.yaml"}],"source_content_type":"text/x-yaml","patch_set":62,"id":"ba7be1f8_2f747bfc","line":10,"in_reply_to":"ba7be1f8_809a9c12","updated":"2015-02-20 13:35:04.000000000","message":"Done","commit_id":"813e5520099d7cfbdc35f8557bd2294450796a87"}],"rally-jobs/extra/murano/README.rst":[{"author":{"_account_id":10475,"name":"Alexander Maretskiy","email":"amaretskiy@mirantis.com","username":"maretskiy"},"change_message_id":"0d10cb1c8e879c5eb50ccf7b4fa3fbf1fe65d4b1","unresolved":false,"context_lines":[{"line_number":1,"context_line":"Murano related files"},{"line_number":2,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":3,"context_line":""},{"line_number":4,"context_line":"Files that is use to benchmark Murano"},{"line_number":5,"context_line":""},{"line_number":6,"context_line":"Structure"},{"line_number":7,"context_line":"---------"}],"source_content_type":"text/x-rst","patch_set":84,"id":"1a6ced46_ed13145a","line":4,"updated":"2015-03-24 11:20:18.000000000","message":"Files for Murano benchmarking","commit_id":"5db7a6d9814594e3da353e616b1d226b00d893b1"},{"author":{"_account_id":12395,"name":"Roman Vasylets","email":"pomeo92@gmail.com","username":"rvasilets"},"change_message_id":"10581f8bde7048eacede0fdb47d5be3acdd156aa","unresolved":false,"context_lines":[{"line_number":1,"context_line":"Murano related files"},{"line_number":2,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":3,"context_line":""},{"line_number":4,"context_line":"Files that is use to benchmark Murano"},{"line_number":5,"context_line":""},{"line_number":6,"context_line":"Structure"},{"line_number":7,"context_line":"---------"}],"source_content_type":"text/x-rst","patch_set":84,"id":"1a6ced46_5213d865","line":4,"in_reply_to":"1a6ced46_ed13145a","updated":"2015-03-25 16:02:40.000000000","message":"Done","commit_id":"5db7a6d9814594e3da353e616b1d226b00d893b1"},{"author":{"_account_id":10475,"name":"Alexander Maretskiy","email":"amaretskiy@mirantis.com","username":"maretskiy"},"change_message_id":"0d10cb1c8e879c5eb50ccf7b4fa3fbf1fe65d4b1","unresolved":false,"context_lines":[{"line_number":15,"context_line":"Useful links"},{"line_number":16,"context_line":"------------"},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"* More about Murano package: https://wiki.openstack.org/wiki/Murano/Documentation/How_to_create_application_package"}],"source_content_type":"text/x-rst","patch_set":84,"id":"1a6ced46_6a19ca87","line":18,"range":{"start_line":18,"start_character":29,"end_line":18,"end_character":115},"updated":"2015-03-24 11:20:18.000000000","message":"* `More about Murano package \u003chttps://wiki.openstack.org/wiki/Murano/Documentation/How_to_create_application_package\u003e`_","commit_id":"5db7a6d9814594e3da353e616b1d226b00d893b1"},{"author":{"_account_id":12395,"name":"Roman Vasylets","email":"pomeo92@gmail.com","username":"rvasilets"},"change_message_id":"4b5c704ccd5c4be3781744175150ca21dd73472c","unresolved":false,"context_lines":[{"line_number":15,"context_line":"Useful links"},{"line_number":16,"context_line":"------------"},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"* More about Murano package: https://wiki.openstack.org/wiki/Murano/Documentation/How_to_create_application_package"}],"source_content_type":"text/x-rst","patch_set":84,"id":"1a6ced46_7248d487","line":18,"in_reply_to":"1a6ced46_6a19ca87","updated":"2015-03-24 14:58:40.000000000","message":"Why you have correct me? I have wrote like here https://github.com/stackforge/rally/blob/master/rally-jobs/README.rst Why my method is wrong?","commit_id":"5db7a6d9814594e3da353e616b1d226b00d893b1"},{"author":{"_account_id":10475,"name":"Alexander Maretskiy","email":"amaretskiy@mirantis.com","username":"maretskiy"},"change_message_id":"cf805a056c148b7277ab7a7666a4b53284921c24","unresolved":false,"context_lines":[{"line_number":15,"context_line":"Useful links"},{"line_number":16,"context_line":"------------"},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"* More about Murano package: https://wiki.openstack.org/wiki/Murano/Documentation/How_to_create_application_package"}],"source_content_type":"text/x-rst","patch_set":84,"id":"1a6ced46_890a861f","line":18,"in_reply_to":"1a6ced46_7248d487","updated":"2015-03-24 15:19:16.000000000","message":"This not a technical, but content correction, here is an example how this can be transformed into html:\n\n \u003ch3\u003eLinks:\u003c/h3\u003e\n \u003cul\u003e\n   \u003c!-- Bad content --\u003e\n   \u003cli\u003eHere is a link about Foo Bar Spam: \u003ca href\u003d\"http://foo.bar/spam\"\u003ehttp://foo.bar/spam\u003c/a\u003e\n\n   \u003c!-- Good content --\u003e\n   \u003cli\u003e\u003ca href\u003d\"http://foo.bar/spam\"\u003eHere is a link about Foo Bar Spam\u003c/a\u003e\n \u003c/ul\u003e","commit_id":"5db7a6d9814594e3da353e616b1d226b00d893b1"},{"author":{"_account_id":6172,"name":"Boris Pavlovic","email":"boris@pavlovic.me","username":"boris-42"},"change_message_id":"e7ec92c18dbeecbf65b576f1bfbac5c9037ed725","unresolved":false,"context_lines":[{"line_number":7,"context_line":"---------"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"* applications/ directory here is a simple Murano package that is used"},{"line_number":10,"context_line":"  to prepare Murano context and HelloReporter json file is used to deploy"},{"line_number":11,"context_line":"  environment with HelloReporter package."},{"line_number":12,"context_line":""},{"line_number":13,"context_line":""}],"source_content_type":"text/x-rst","patch_set":98,"id":"7aaa499b_9b8639b8","line":10,"updated":"2015-04-12 10:02:21.000000000","message":"I already told you I think 10 times, that structure should be different. \n\n  rally-jobs/murano/app/\u003capp_name\u003e/app_files\n\nnow your structure is next\n\n  rally-jobs/murano/app/app_files\n\nI won\u0027t merge this patch until you fix this issue.","commit_id":"de3e16d0561416768760ff43aa10e8d64432e457"},{"author":{"_account_id":12395,"name":"Roman Vasylets","email":"pomeo92@gmail.com","username":"rvasilets"},"change_message_id":"6183c8dd1cb993501449934a7c33f376459b46a3","unresolved":false,"context_lines":[{"line_number":7,"context_line":"---------"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"* applications/ directory here is a simple Murano package that is used"},{"line_number":10,"context_line":"  to prepare Murano context and HelloReporter json file is used to deploy"},{"line_number":11,"context_line":"  environment with HelloReporter package."},{"line_number":12,"context_line":""},{"line_number":13,"context_line":""}],"source_content_type":"text/x-rst","patch_set":98,"id":"7aaa499b_8d035f42","line":10,"in_reply_to":"7aaa499b_9b8639b8","updated":"2015-04-14 12:41:37.000000000","message":"Done","commit_id":"de3e16d0561416768760ff43aa10e8d64432e457"}],"rally-jobs/extra/murano/applications/README.rst":[{"author":{"_account_id":10475,"name":"Alexander Maretskiy","email":"amaretskiy@mirantis.com","username":"maretskiy"},"change_message_id":"f64b8e003b260a908b9f46d77aa2393ae7f26ec5","unresolved":false,"context_lines":[{"line_number":7,"context_line":"---------"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"* \u003capplication_name\u003e/ directories. Each directory store a simple Murano package"},{"line_number":10,"context_line":"  that is used to prepare Murano context that is used to deploy environment"},{"line_number":11,"context_line":"  with package. Also there can be other files needs for application."},{"line_number":12,"context_line":""},{"line_number":13,"context_line":""}],"source_content_type":"text/x-rst","patch_set":103,"id":"1aca2d91_d9ecc191","line":10,"updated":"2015-05-06 13:08:54.000000000","message":"Rename:\n\n   that is used to prepare Murano context that is used to deploy\n   environment with package.\n\nto:\n\n   for environment deployment in Murano context.","commit_id":"b5a343ae2a1faad54fc4cd68bb56c061b374a4cc"},{"author":{"_account_id":4428,"name":"Liyingjun","email":"yinjalee@163.com","username":"liyingjun"},"change_message_id":"6455dfd10858cd7bf7ade2529baea9afec41ba02","unresolved":false,"context_lines":[{"line_number":8,"context_line":""},{"line_number":9,"context_line":"* \u003capplication_name\u003e/ directories. Each directory store a simple Murano package"},{"line_number":10,"context_line":"  that is used to prepare Murano context that is used to deploy environment"},{"line_number":11,"context_line":"  with package. Also there can be other files needs for application."},{"line_number":12,"context_line":""},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"Useful links"}],"source_content_type":"text/x-rst","patch_set":103,"id":"1aca2d91_b5c1e5e6","line":11,"updated":"2015-05-07 06:59:47.000000000","message":"s/needs/needed","commit_id":"b5a343ae2a1faad54fc4cd68bb56c061b374a4cc"},{"author":{"_account_id":10475,"name":"Alexander Maretskiy","email":"amaretskiy@mirantis.com","username":"maretskiy"},"change_message_id":"f64b8e003b260a908b9f46d77aa2393ae7f26ec5","unresolved":false,"context_lines":[{"line_number":11,"context_line":"  with package. Also there can be other files needs for application."},{"line_number":12,"context_line":""},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"Useful links"},{"line_number":15,"context_line":"------------"},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"* More about Murano package: https://wiki.openstack.org/wiki/Murano/Documentation/How_to_create_application_package"}],"source_content_type":"text/x-rst","patch_set":103,"id":"1aca2d91_f943fd6a","line":17,"range":{"start_line":14,"start_character":0,"end_line":17,"end_character":115},"updated":"2015-05-06 13:08:54.000000000","message":"Use RestructuredText link format:\n\n * `More about Murano package \u003chttps://wiki.openstack.org/wiki/Murano/Documentation/How_to_create_application_package\u003e`_","commit_id":"b5a343ae2a1faad54fc4cd68bb56c061b374a4cc"}],"rally-jobs/rally.yaml":[{"author":{"_account_id":12395,"name":"Roman Vasylets","email":"pomeo92@gmail.com","username":"rvasilets"},"change_message_id":"1a11096d197c3d5aa26766f690b1481a611d978e","unresolved":false,"context_lines":[{"line_number":883,"context_line":"        flavor:"},{"line_number":884,"context_line":"            name: \"m1.tiny\""},{"line_number":885,"context_line":"        image:"},{"line_number":886,"context_line":"            name: \"from_context_uploaded\""},{"line_number":887,"context_line":"      runner:"},{"line_number":888,"context_line":"        type: \"constant\""},{"line_number":889,"context_line":"        times: 1"}],"source_content_type":"text/x-yaml","patch_set":79,"id":"9a80dd14_87b6f9da","side":"PARENT","line":886,"updated":"2015-03-11 20:44:05.000000000","message":"This deletion not good. I will fix it soon.","commit_id":"e198f39ae561a55f884819734da338eaafd954ae"}],"rally/benchmark/context/cleanup/resources.py":[{"author":{"_account_id":9545,"name":"Andriy Kurilin","email":"andr.kurilin@gmail.com","username":"akurilin"},"change_message_id":"3bc665baad886c5e67b9107450d99a6f09f4f3e8","unresolved":false,"context_lines":[{"line_number":285,"context_line":"    def delete(self):"},{"line_number":286,"context_line":"        try:"},{"line_number":287,"context_line":"            self._manager().delete(self.id())"},{"line_number":288,"context_line":"        except murano_exceptions.HTTPNotFound:"},{"line_number":289,"context_line":"            pass"},{"line_number":290,"context_line":""},{"line_number":291,"context_line":""}],"source_content_type":"text/x-python","patch_set":12,"id":"3a961159_0ef46759","line":288,"updated":"2014-12-22 17:31:14.000000000","message":"\u0027muranoclient.exceptions.HTTPNotFound\u0027 has \u0027code\u0027 attr[*], so we can check it without additional redundant imports:\n\n    try:\n        #do some stuff\n    except Exception as e:\n        if getattr(e, \"code\", 0) !\u003d 404:\n            raise\n\n[*] - https://github.com/stackforge/python-muranoclient/blob/master/muranoclient/common/exceptions.py#L90-L96","commit_id":"2365acce4411b26a395fbf623d023243fa1f440f"},{"author":{"_account_id":6172,"name":"Boris Pavlovic","email":"boris@pavlovic.me","username":"boris-42"},"change_message_id":"ae8131c31880322f7f313547409146aad3a53247","unresolved":false,"context_lines":[{"line_number":285,"context_line":"    def delete(self):"},{"line_number":286,"context_line":"        try:"},{"line_number":287,"context_line":"            self._manager().delete(self.id())"},{"line_number":288,"context_line":"        except murano_exceptions.HTTPNotFound:"},{"line_number":289,"context_line":"            pass"},{"line_number":290,"context_line":""},{"line_number":291,"context_line":""}],"source_content_type":"text/x-python","patch_set":12,"id":"3a961159_0918e1d1","line":288,"in_reply_to":"3a961159_0ef46759","updated":"2014-12-22 18:21:32.000000000","message":"I don\u0027t think that you need anything except next:\n\n\n  @base.resource(\"murano\", \"environments\", order\u003d1000)\n  class MuranoEnvironments(base.ResourceManager):\n     pass\n\n\nTake a look here:\n\nhttps://github.com/stackforge/rally/blob/master/rally/benchmark/context/cleanup/base.py#L86-L98","commit_id":"2365acce4411b26a395fbf623d023243fa1f440f"},{"author":{"_account_id":9545,"name":"Andriy Kurilin","email":"andr.kurilin@gmail.com","username":"akurilin"},"change_message_id":"87842614976c572b80849127d6b37d8a4c623c56","unresolved":false,"context_lines":[{"line_number":21,"context_line":"from rally.benchmark.wrappers import keystone as keystone_wrapper"},{"line_number":22,"context_line":"from rally import log as logging"},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"murano_exceptions \u003d importutils.try_import(\"muranoclient.common.exceptions\")"},{"line_number":25,"context_line":""},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"LOG \u003d logging.getLogger(__name__)"}],"source_content_type":"text/x-python","patch_set":32,"id":"3a961159_42b062dd","line":24,"updated":"2015-01-03 16:12:30.000000000","message":"hm...looks like this import is not used.","commit_id":"e06d60dda8beaab6f9307734923b844b929f9225"},{"author":{"_account_id":6172,"name":"Boris Pavlovic","email":"boris@pavlovic.me","username":"boris-42"},"change_message_id":"1588392f64a03c1a1fbe5dda05620584a39d44ac","unresolved":false,"context_lines":[{"line_number":304,"context_line":""},{"line_number":305,"context_line":"# MURANO"},{"line_number":306,"context_line":""},{"line_number":307,"context_line":"@base.resource(\"murano\", \"environments\", order\u003d1000, tenant_resource\u003dTrue)"},{"line_number":308,"context_line":"class MuranoEnvironments(base.ResourceManager):"},{"line_number":309,"context_line":"    pass"},{"line_number":310,"context_line":""}],"source_content_type":"text/x-python","patch_set":64,"id":"ba7be1f8_160bfd25","line":307,"updated":"2015-02-23 22:39:24.000000000","message":"Put resources of murano before mistral","commit_id":"c543d5834b4fcb309fd9dd27ac4c951f8092acc8"},{"author":{"_account_id":6172,"name":"Boris Pavlovic","email":"boris@pavlovic.me","username":"boris-42"},"change_message_id":"1588392f64a03c1a1fbe5dda05620584a39d44ac","unresolved":false,"context_lines":[{"line_number":309,"context_line":"    pass"},{"line_number":310,"context_line":""},{"line_number":311,"context_line":""},{"line_number":312,"context_line":"@base.resource(\"murano\", \"packages\", order\u003d1100, tenant_resource\u003dTrue)"},{"line_number":313,"context_line":"class MuranoPackages(base.ResourceManager):"},{"line_number":314,"context_line":""},{"line_number":315,"context_line":"    def list(self):"}],"source_content_type":"text/x-python","patch_set":64,"id":"ba7be1f8_d627a5b4","line":312,"updated":"2015-02-23 22:39:24.000000000","message":"order 1100 is already used. It should be 1001 plesae create _murano_oder \u003d get_order(1000)","commit_id":"c543d5834b4fcb309fd9dd27ac4c951f8092acc8"},{"author":{"_account_id":8507,"name":"Mikhail Dubov","email":"mdubov@mirantis.com","username":"msdubov"},"change_message_id":"adb1bf626186327744a5cacccaf2bdf4bbea6e0b","unresolved":false,"context_lines":[{"line_number":366,"context_line":""},{"line_number":367,"context_line":"@base.resource(\"murano\", \"packages\", tenant_resource\u003dTrue,"},{"line_number":368,"context_line":"               order\u003dnext(_murano_order))"},{"line_number":369,"context_line":"class MuranoPackages(base.ResourceManager):"},{"line_number":370,"context_line":""},{"line_number":371,"context_line":"    def list(self):"},{"line_number":372,"context_line":"        return filter(lambda x: x.name !\u003d \"Core library\","}],"source_content_type":"text/x-python","patch_set":98,"id":"7aaa499b_1d445672","line":369,"updated":"2015-04-13 07:04:48.000000000","message":"Shouldn\u0027t this be covered by a unit test? As far as I can see, almost all resource types are present there:\n\nhttps://github.com/stackforge/rally/blob/master/tests/unit/benchmark/context/cleanup/test_resources.py","commit_id":"de3e16d0561416768760ff43aa10e8d64432e457"},{"author":{"_account_id":12395,"name":"Roman Vasylets","email":"pomeo92@gmail.com","username":"rvasilets"},"change_message_id":"6183c8dd1cb993501449934a7c33f376459b46a3","unresolved":false,"context_lines":[{"line_number":366,"context_line":""},{"line_number":367,"context_line":"@base.resource(\"murano\", \"packages\", tenant_resource\u003dTrue,"},{"line_number":368,"context_line":"               order\u003dnext(_murano_order))"},{"line_number":369,"context_line":"class MuranoPackages(base.ResourceManager):"},{"line_number":370,"context_line":""},{"line_number":371,"context_line":"    def list(self):"},{"line_number":372,"context_line":"        return filter(lambda x: x.name !\u003d \"Core library\","}],"source_content_type":"text/x-python","patch_set":98,"id":"7aaa499b_334cac6f","line":369,"in_reply_to":"7aaa499b_1d445672","updated":"2015-04-14 12:41:37.000000000","message":"Done","commit_id":"de3e16d0561416768760ff43aa10e8d64432e457"},{"author":{"_account_id":12395,"name":"Roman Vasylets","email":"pomeo92@gmail.com","username":"rvasilets"},"change_message_id":"4c303df173835c5fe2cf8ed40123ec32d752316b","unresolved":false,"context_lines":[{"line_number":366,"context_line":""},{"line_number":367,"context_line":"@base.resource(\"murano\", \"packages\", tenant_resource\u003dTrue,"},{"line_number":368,"context_line":"               order\u003dnext(_murano_order))"},{"line_number":369,"context_line":"class MuranoPackages(base.ResourceManager):"},{"line_number":370,"context_line":""},{"line_number":371,"context_line":"    def list(self):"},{"line_number":372,"context_line":"        return filter(lambda x: x.name !\u003d \"Core library\","}],"source_content_type":"text/x-python","patch_set":98,"id":"7aaa499b_2e00be00","line":369,"in_reply_to":"7aaa499b_1d445672","updated":"2015-04-15 10:57:23.000000000","message":"I will remove this because after Boris comments we don\u0027t need it now","commit_id":"de3e16d0561416768760ff43aa10e8d64432e457"}],"rally/benchmark/context/images.py":[{"author":{"_account_id":9545,"name":"Andriy Kurilin","email":"andr.kurilin@gmail.com","username":"akurilin"},"change_message_id":"87842614976c572b80849127d6b37d8a4c623c56","unresolved":false,"context_lines":[{"line_number":73,"context_line":"        image_type \u003d self.config[\"image_type\"]"},{"line_number":74,"context_line":"        image_container \u003d self.config[\"image_container\"]"},{"line_number":75,"context_line":"        images_per_tenant \u003d self.config[\"images_per_tenant\"]"},{"line_number":76,"context_line":"        image_name \u003d self.config.get(\"image_name\", None)"},{"line_number":77,"context_line":""},{"line_number":78,"context_line":"        for user, tenant_id in rutils.iterate_per_tenants("},{"line_number":79,"context_line":"                self.context[\"users\"]):"}],"source_content_type":"text/x-python","patch_set":32,"id":"3a961159_02dd7a14","line":76,"updated":"2015-01-03 16:12:30.000000000","message":"None is default value which \"get\" method returns if \"key\" is missed in dictionary, so this line can be simplified:\n\n    image_name \u003d self.config.get(\"image_name\")","commit_id":"e06d60dda8beaab6f9307734923b844b929f9225"},{"author":{"_account_id":9545,"name":"Andriy Kurilin","email":"andr.kurilin@gmail.com","username":"akurilin"},"change_message_id":"87842614976c572b80849127d6b37d8a4c623c56","unresolved":false,"context_lines":[{"line_number":83,"context_line":"                clients\u003dclients)"},{"line_number":84,"context_line":"            for i in range(images_per_tenant):"},{"line_number":85,"context_line":"                if image_name:"},{"line_number":86,"context_line":"                    rnd_name \u003d image_name + (i and str(i) or \"\")"},{"line_number":87,"context_line":"                else:"},{"line_number":88,"context_line":"                    rnd_name \u003d ("},{"line_number":89,"context_line":"                        scenario_base.Scenario._generate_random_name())"}],"source_content_type":"text/x-python","patch_set":32,"id":"3a961159_22e0b6cb","line":86,"updated":"2015-01-03 16:12:30.000000000","message":"\"(i and str(i) or \"\")\" looks strange. why not just:\n\n    rnd_name \u003d image_name + str(i)\n\n?","commit_id":"e06d60dda8beaab6f9307734923b844b929f9225"},{"author":{"_account_id":9545,"name":"Andriy Kurilin","email":"andr.kurilin@gmail.com","username":"akurilin"},"change_message_id":"87842614976c572b80849127d6b37d8a4c623c56","unresolved":false,"context_lines":[{"line_number":86,"context_line":"                    rnd_name \u003d image_name + (i and str(i) or \"\")"},{"line_number":87,"context_line":"                else:"},{"line_number":88,"context_line":"                    rnd_name \u003d ("},{"line_number":89,"context_line":"                        scenario_base.Scenario._generate_random_name())"},{"line_number":90,"context_line":"                image \u003d glance_util_class._create_image(rnd_name,"},{"line_number":91,"context_line":"                                                        image_container,"},{"line_number":92,"context_line":"                                                        image_url,"}],"source_content_type":"text/x-python","patch_set":32,"id":"3a961159_82f7aa8b","line":89,"updated":"2015-01-03 16:12:30.000000000","message":"I prefer to use \"_generate_random_name\" from glance_util_class. Reasons:\n\n1) less imports(no need to import rally.benchmark.scenarios.base)\n\n2) better \"random\" name: name will include glance resource prefix","commit_id":"e06d60dda8beaab6f9307734923b844b929f9225"},{"author":{"_account_id":10475,"name":"Alexander Maretskiy","email":"amaretskiy@mirantis.com","username":"maretskiy"},"change_message_id":"226a7f1f8d67f78fd94c634874fabbe9ecf1b32a","unresolved":false,"context_lines":[{"line_number":54,"context_line":"                \"type\": \"integer\","},{"line_number":55,"context_line":"                \"minimum\": 0"},{"line_number":56,"context_line":"            },"},{"line_number":57,"context_line":"            \"min_disk\": {  # gigabytes"},{"line_number":58,"context_line":"                \"type\": \"integer\","},{"line_number":59,"context_line":"                \"minimum\": 0"},{"line_number":60,"context_line":"            },"}],"source_content_type":"text/x-python","patch_set":58,"id":"da86d52c_ef5b881f","line":57,"updated":"2015-02-12 11:54:51.000000000","message":"How RAM and Disk are related to images? AFAIK they are Flavor options and are not required for images generation.\n\nIf you need a flavor, just add specific property that refers some flavor","commit_id":"0112ebb2dec6a7c9a3280814a89bd1ce60cd405d"},{"author":{"_account_id":10475,"name":"Alexander Maretskiy","email":"amaretskiy@mirantis.com","username":"maretskiy"},"change_message_id":"190c2d81fe80b9c7ce4ada78a68ded0c181f87fe","unresolved":false,"context_lines":[{"line_number":54,"context_line":"                \"type\": \"integer\","},{"line_number":55,"context_line":"                \"minimum\": 0"},{"line_number":56,"context_line":"            },"},{"line_number":57,"context_line":"            \"min_disk\": {  # gigabytes"},{"line_number":58,"context_line":"                \"type\": \"integer\","},{"line_number":59,"context_line":"                \"minimum\": 0"},{"line_number":60,"context_line":"            },"}],"source_content_type":"text/x-python","patch_set":58,"id":"da86d52c_580a697a","line":57,"in_reply_to":"da86d52c_91e309a3","updated":"2015-02-13 10:51:09.000000000","message":"Ok. Thanks","commit_id":"0112ebb2dec6a7c9a3280814a89bd1ce60cd405d"},{"author":{"_account_id":12395,"name":"Roman Vasylets","email":"pomeo92@gmail.com","username":"rvasilets"},"change_message_id":"b2ff84279d1282ecad374068af00e217c6e944a5","unresolved":false,"context_lines":[{"line_number":54,"context_line":"                \"type\": \"integer\","},{"line_number":55,"context_line":"                \"minimum\": 0"},{"line_number":56,"context_line":"            },"},{"line_number":57,"context_line":"            \"min_disk\": {  # gigabytes"},{"line_number":58,"context_line":"                \"type\": \"integer\","},{"line_number":59,"context_line":"                \"minimum\": 0"},{"line_number":60,"context_line":"            },"}],"source_content_type":"text/x-python","patch_set":58,"id":"da86d52c_91e309a3","line":57,"in_reply_to":"da86d52c_ef5b881f","updated":"2015-02-12 15:57:26.000000000","message":"As we see in this link http://docs.openstack.org/user-guide/content/cli_manage_images.html its image parameters.","commit_id":"0112ebb2dec6a7c9a3280814a89bd1ce60cd405d"},{"author":{"_account_id":10475,"name":"Alexander Maretskiy","email":"amaretskiy@mirantis.com","username":"maretskiy"},"change_message_id":"93afa901c36385137524f6580334197cbf7cda5c","unresolved":false,"context_lines":[{"line_number":52,"context_line":"            },"},{"line_number":53,"context_line":"            \"min_ram\": {  # megabytes"},{"line_number":54,"context_line":"                \"type\": \"integer\","},{"line_number":55,"context_line":"                \"minimum\": 0"},{"line_number":56,"context_line":"            },"},{"line_number":57,"context_line":"            \"min_disk\": {  # gigabytes"},{"line_number":58,"context_line":"                \"type\": \"integer\","}],"source_content_type":"text/x-python","patch_set":62,"id":"ba7be1f8_60184885","line":55,"updated":"2015-02-20 11:55:23.000000000","message":"So, we can specify `0\u0027 RAM and this can work?","commit_id":"813e5520099d7cfbdc35f8557bd2294450796a87"},{"author":{"_account_id":12395,"name":"Roman Vasylets","email":"pomeo92@gmail.com","username":"rvasilets"},"change_message_id":"1bc3f4aaddc454cde7ad99d6047cd4ebfdb3fc11","unresolved":false,"context_lines":[{"line_number":52,"context_line":"            },"},{"line_number":53,"context_line":"            \"min_ram\": {  # megabytes"},{"line_number":54,"context_line":"                \"type\": \"integer\","},{"line_number":55,"context_line":"                \"minimum\": 0"},{"line_number":56,"context_line":"            },"},{"line_number":57,"context_line":"            \"min_disk\": {  # gigabytes"},{"line_number":58,"context_line":"                \"type\": \"integer\","}],"source_content_type":"text/x-python","patch_set":62,"id":"ba7be1f8_34d84e1d","line":55,"in_reply_to":"ba7be1f8_60184885","updated":"2015-02-20 13:35:04.000000000","message":"Yes, it work. Look to glance example http://docs.openstack.org/user-guide/content/cli_manage_images.html","commit_id":"813e5520099d7cfbdc35f8557bd2294450796a87"},{"author":{"_account_id":10475,"name":"Alexander Maretskiy","email":"amaretskiy@mirantis.com","username":"maretskiy"},"change_message_id":"93afa901c36385137524f6580334197cbf7cda5c","unresolved":false,"context_lines":[{"line_number":79,"context_line":"                self.context[\"users\"]):"},{"line_number":80,"context_line":"            current_images \u003d []"},{"line_number":81,"context_line":"            clients \u003d osclients.Clients(user[\"endpoint\"])"},{"line_number":82,"context_line":"            glance_util_class \u003d glance_utils.GlanceScenario("},{"line_number":83,"context_line":"                clients\u003dclients)"},{"line_number":84,"context_line":"            for i in range(images_per_tenant):"},{"line_number":85,"context_line":"                if image_name:"}],"source_content_type":"text/x-python","patch_set":62,"id":"ba7be1f8_03c15680","line":82,"updated":"2015-02-20 11:55:23.000000000","message":"Since you are editing this part of code, please rename s/glance_util_class/glance_scenario/\n\nThis is not a class and not named *Util*, but GlanceScenario instance.","commit_id":"813e5520099d7cfbdc35f8557bd2294450796a87"},{"author":{"_account_id":12395,"name":"Roman Vasylets","email":"pomeo92@gmail.com","username":"rvasilets"},"change_message_id":"1bc3f4aaddc454cde7ad99d6047cd4ebfdb3fc11","unresolved":false,"context_lines":[{"line_number":79,"context_line":"                self.context[\"users\"]):"},{"line_number":80,"context_line":"            current_images \u003d []"},{"line_number":81,"context_line":"            clients \u003d osclients.Clients(user[\"endpoint\"])"},{"line_number":82,"context_line":"            glance_util_class \u003d glance_utils.GlanceScenario("},{"line_number":83,"context_line":"                clients\u003dclients)"},{"line_number":84,"context_line":"            for i in range(images_per_tenant):"},{"line_number":85,"context_line":"                if image_name:"}],"source_content_type":"text/x-python","patch_set":62,"id":"ba7be1f8_4f60cf35","line":82,"in_reply_to":"ba7be1f8_03c15680","updated":"2015-02-20 13:35:04.000000000","message":"Done","commit_id":"813e5520099d7cfbdc35f8557bd2294450796a87"},{"author":{"_account_id":10475,"name":"Alexander Maretskiy","email":"amaretskiy@mirantis.com","username":"maretskiy"},"change_message_id":"93afa901c36385137524f6580334197cbf7cda5c","unresolved":false,"context_lines":[{"line_number":83,"context_line":"                clients\u003dclients)"},{"line_number":84,"context_line":"            for i in range(images_per_tenant):"},{"line_number":85,"context_line":"                if image_name:"},{"line_number":86,"context_line":"                    rnd_name \u003d image_name + str(i)"},{"line_number":87,"context_line":"                else:"},{"line_number":88,"context_line":"                    rnd_name \u003d ("},{"line_number":89,"context_line":"                        glance_util_class._generate_random_name())"}],"source_content_type":"text/x-python","patch_set":62,"id":"ba7be1f8_e3ae02e7","line":86,"updated":"2015-02-20 11:55:23.000000000","message":"Wrong name `rnd_name\u0027 - this is not random at all, use `name\u0027 or `cur_name\u0027 or something else","commit_id":"813e5520099d7cfbdc35f8557bd2294450796a87"},{"author":{"_account_id":12395,"name":"Roman Vasylets","email":"pomeo92@gmail.com","username":"rvasilets"},"change_message_id":"1bc3f4aaddc454cde7ad99d6047cd4ebfdb3fc11","unresolved":false,"context_lines":[{"line_number":83,"context_line":"                clients\u003dclients)"},{"line_number":84,"context_line":"            for i in range(images_per_tenant):"},{"line_number":85,"context_line":"                if image_name:"},{"line_number":86,"context_line":"                    rnd_name \u003d image_name + str(i)"},{"line_number":87,"context_line":"                else:"},{"line_number":88,"context_line":"                    rnd_name \u003d ("},{"line_number":89,"context_line":"                        glance_util_class._generate_random_name())"}],"source_content_type":"text/x-python","patch_set":62,"id":"ba7be1f8_8f5ac781","line":86,"in_reply_to":"ba7be1f8_e3ae02e7","updated":"2015-02-20 13:35:04.000000000","message":"Done","commit_id":"813e5520099d7cfbdc35f8557bd2294450796a87"},{"author":{"_account_id":9545,"name":"Andriy Kurilin","email":"andr.kurilin@gmail.com","username":"akurilin"},"change_message_id":"88988fd5b20cb982e52114715c6021f072d3e379","unresolved":false,"context_lines":[{"line_number":85,"context_line":"                if image_name:"},{"line_number":86,"context_line":"                    rnd_name \u003d image_name + str(i)"},{"line_number":87,"context_line":"                else:"},{"line_number":88,"context_line":"                    rnd_name \u003d ("},{"line_number":89,"context_line":"                        glance_util_class._generate_random_name())"},{"line_number":90,"context_line":"                image \u003d glance_util_class._create_image(rnd_name,"},{"line_number":91,"context_line":"                                                        image_container,"}],"source_content_type":"text/x-python","patch_set":62,"id":"da86d52c_a9636baf","line":88,"updated":"2015-02-20 12:37:50.000000000","message":"this looks awful:( I understand that this is not your fault, but can you do something like in https://github.com/stackforge/rally/commit/17ac05de7d5bdb13ea1a55537e08179b2789b454 . maybe in separate patch.","commit_id":"813e5520099d7cfbdc35f8557bd2294450796a87"},{"author":{"_account_id":10475,"name":"Alexander Maretskiy","email":"amaretskiy@mirantis.com","username":"maretskiy"},"change_message_id":"93afa901c36385137524f6580334197cbf7cda5c","unresolved":false,"context_lines":[{"line_number":86,"context_line":"                    rnd_name \u003d image_name + str(i)"},{"line_number":87,"context_line":"                else:"},{"line_number":88,"context_line":"                    rnd_name \u003d ("},{"line_number":89,"context_line":"                        glance_util_class._generate_random_name())"},{"line_number":90,"context_line":"                image \u003d glance_util_class._create_image(rnd_name,"},{"line_number":91,"context_line":"                                                        image_container,"},{"line_number":92,"context_line":"                                                        image_url,"}],"source_content_type":"text/x-python","patch_set":62,"id":"ba7be1f8_83d8e654","line":89,"updated":"2015-02-20 11:55:23.000000000","message":"Specify specific name prefix, that refers to context:\n\n  glance_scenario._generate_random_name(\"rally_ctx_image_\")","commit_id":"813e5520099d7cfbdc35f8557bd2294450796a87"},{"author":{"_account_id":12395,"name":"Roman Vasylets","email":"pomeo92@gmail.com","username":"rvasilets"},"change_message_id":"1bc3f4aaddc454cde7ad99d6047cd4ebfdb3fc11","unresolved":false,"context_lines":[{"line_number":86,"context_line":"                    rnd_name \u003d image_name + str(i)"},{"line_number":87,"context_line":"                else:"},{"line_number":88,"context_line":"                    rnd_name \u003d ("},{"line_number":89,"context_line":"                        glance_util_class._generate_random_name())"},{"line_number":90,"context_line":"                image \u003d glance_util_class._create_image(rnd_name,"},{"line_number":91,"context_line":"                                                        image_container,"},{"line_number":92,"context_line":"                                                        image_url,"}],"source_content_type":"text/x-python","patch_set":62,"id":"ba7be1f8_ef50a360","line":89,"in_reply_to":"ba7be1f8_83d8e654","updated":"2015-02-20 13:35:04.000000000","message":"Done","commit_id":"813e5520099d7cfbdc35f8557bd2294450796a87"},{"author":{"_account_id":6172,"name":"Boris Pavlovic","email":"boris@pavlovic.me","username":"boris-42"},"change_message_id":"1588392f64a03c1a1fbe5dda05620584a39d44ac","unresolved":false,"context_lines":[{"line_number":83,"context_line":"                clients\u003dclients)"},{"line_number":84,"context_line":"            for i in range(images_per_tenant):"},{"line_number":85,"context_line":"                if image_name:"},{"line_number":86,"context_line":"                    cur_name \u003d image_name + str(i)"},{"line_number":87,"context_line":"                else:"},{"line_number":88,"context_line":"                    cur_name \u003d ("},{"line_number":89,"context_line":"                        glance_scenario._generate_random_name("}],"source_content_type":"text/x-python","patch_set":64,"id":"ba7be1f8_96636ddb","line":86,"updated":"2015-02-23 22:39:24.000000000","message":"So this will produce misleading result for end user. He will put name: \"my_name\" but image will be \"my_name-0\" I believe that we should skip index for first image. so names will be be: \n\n  my_name\n  my_name-1\n  my_name-2 \n  ...","commit_id":"c543d5834b4fcb309fd9dd27ac4c951f8092acc8"},{"author":{"_account_id":6172,"name":"Boris Pavlovic","email":"boris@pavlovic.me","username":"boris-42"},"change_message_id":"59cf3b42498e7e7630c997f3999640149a756ed2","unresolved":false,"context_lines":[{"line_number":48,"context_line":"                \"type\": \"integer\","},{"line_number":49,"context_line":"                \"minimum\": 1"},{"line_number":50,"context_line":"            },"},{"line_number":51,"context_line":"            \"image_name\": {"},{"line_number":52,"context_line":"                \"type\": \"string\","},{"line_number":53,"context_line":"            },"},{"line_number":54,"context_line":"            \"min_ram\": {  # megabytes"}],"source_content_type":"text/x-python","patch_set":68,"id":"ba7be1f8_42d30c5f","line":51,"updated":"2015-02-28 23:52:15.000000000","message":"You should remove this","commit_id":"2f3fd3ae05395181a382cbdb088929f94910e2b4"},{"author":{"_account_id":8507,"name":"Mikhail Dubov","email":"mdubov@mirantis.com","username":"msdubov"},"change_message_id":"49bf539ddbbdd750ae9e274873a9943146647731","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":69,"id":"9a80dd14_1cf2979a","updated":"2015-03-04 14:13:09.000000000","message":"Seems like a rebase issue, here you abandon changes from https://review.openstack.org/#/c/158797/","commit_id":"1897d8935d76923e8e4c19253cce6ea08953eb06"}],"rally/benchmark/context/murano.py":[{"author":{"_account_id":6172,"name":"Boris Pavlovic","email":"boris@pavlovic.me","username":"boris-42"},"change_message_id":"ddb8a66198e423f3fc82982056eb788a892a2acd","unresolved":false,"context_lines":[{"line_number":26,"context_line":""},{"line_number":27,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":28,"context_line":""},{"line_number":29,"context_line":""},{"line_number":30,"context_line":"class Murano(base.Context):"},{"line_number":31,"context_line":"    \"\"\"Context class for uploading applications for murano.\"\"\""},{"line_number":32,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"5a890539_f79e99b7","line":29,"updated":"2014-11-28 17:12:21.000000000","message":"Rebase your patch. Now instead of \n\n__ctx_*__ stuff we are using @base.context() decorator \n\nhttps://github.com/stackforge/rally/commit/83c9309dedcddda5ff4629ecd73f4a14e0d2210c","commit_id":"fd87724fe8692edc79fa62e928658f153d25e8f5"},{"author":{"_account_id":6172,"name":"Boris Pavlovic","email":"boris@pavlovic.me","username":"boris-42"},"change_message_id":"439a5da25b3257e21063478adf60a5405dda1386","unresolved":false,"context_lines":[{"line_number":66,"context_line":"        for user in self.context[\"users\"]:"},{"line_number":67,"context_line":"            clients \u003d osclients.Clients(user[\"endpoint\"])"},{"line_number":68,"context_line":"            murano \u003d clients.murano()"},{"line_number":69,"context_line":"            if not any(self.config[\"app_name\"].lower() in p.name.lower()"},{"line_number":70,"context_line":"                       for p in murano.packages.list()):"},{"line_number":71,"context_line":"                package \u003d murano.packages.create("},{"line_number":72,"context_line":"                    {\"categories\": [\"Web\"], \"tags\": [\"tag\"]},"}],"source_content_type":"text/x-python","patch_set":2,"id":"3a961159_56ba41c1","line":69,"updated":"2014-12-15 21:19:15.000000000","message":"We merged yesterday patch that refactors how we are creating tenant based resources.\n\nCould you please one more time rebase patch refactor this benchmark context. \n\nFor example take a look here:\nhttps://github.com/stackforge/rally/blob/3a89b0eb3b7aafb654e37fd3f0f095f9e8348cb9/rally/benchmark/context/images.py#L69-L84","commit_id":"f777e05eb305e6ed6ae663828a8fab0b2f922b8c"},{"author":{"_account_id":6172,"name":"Boris Pavlovic","email":"boris@pavlovic.me","username":"boris-42"},"change_message_id":"5ea96179f5d523f3b28f184ef6831169be02093b","unresolved":false,"context_lines":[{"line_number":28,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":29,"context_line":""},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"@base.context(name\u003d\"murano\", order\u003d600)"},{"line_number":32,"context_line":"class Murano(base.Context):"},{"line_number":33,"context_line":"    \"\"\"Context class for uploading applications for murano.\"\"\""},{"line_number":34,"context_line":""}],"source_content_type":"text/x-python","patch_set":14,"id":"3a961159_99ff9165","line":31,"updated":"2014-12-24 09:53:13.000000000","message":"change order to something more reasonable it should be 4xx (pick free number)","commit_id":"327432c21985d7aa4db0929160cae568fd7b423e"},{"author":{"_account_id":6172,"name":"Boris Pavlovic","email":"boris@pavlovic.me","username":"boris-42"},"change_message_id":"5ea96179f5d523f3b28f184ef6831169be02093b","unresolved":false,"context_lines":[{"line_number":59,"context_line":"        archive_location \u003d os.path.basename(package_url)"},{"line_number":60,"context_line":""},{"line_number":61,"context_line":"        with open(archive_location, \"wb\") as local_file:"},{"line_number":62,"context_line":"            local_file.write(archive.content)"},{"line_number":63,"context_line":""},{"line_number":64,"context_line":"        for user, tenant_id in rutils.iterate_per_tenants("},{"line_number":65,"context_line":"                self.context[\"users\"]):"}],"source_content_type":"text/x-python","patch_set":14,"id":"3a961159_f97415ff","line":62,"updated":"2014-12-24 09:53:13.000000000","message":"Wtf is this ? Creating local files??","commit_id":"327432c21985d7aa4db0929160cae568fd7b423e"},{"author":{"_account_id":6172,"name":"Boris Pavlovic","email":"boris@pavlovic.me","username":"boris-42"},"change_message_id":"5ea96179f5d523f3b28f184ef6831169be02093b","unresolved":false,"context_lines":[{"line_number":63,"context_line":""},{"line_number":64,"context_line":"        for user, tenant_id in rutils.iterate_per_tenants("},{"line_number":65,"context_line":"                self.context[\"users\"]):"},{"line_number":66,"context_line":"            self.context[\"tenants\"][tenant_id].setdefault(\"packages\", list())"},{"line_number":67,"context_line":"            clients \u003d osclients.Clients(user[\"endpoint\"])"},{"line_number":68,"context_line":"            murano \u003d clients.murano()"},{"line_number":69,"context_line":"            current_packages \u003d []"}],"source_content_type":"text/x-python","patch_set":14,"id":"3a961159_f91df5be","line":66,"updated":"2014-12-24 09:53:13.000000000","message":"[] instead of list()","commit_id":"327432c21985d7aa4db0929160cae568fd7b423e"},{"author":{"_account_id":6172,"name":"Boris Pavlovic","email":"boris@pavlovic.me","username":"boris-42"},"change_message_id":"5ea96179f5d523f3b28f184ef6831169be02093b","unresolved":false,"context_lines":[{"line_number":65,"context_line":"                self.context[\"users\"]):"},{"line_number":66,"context_line":"            self.context[\"tenants\"][tenant_id].setdefault(\"packages\", list())"},{"line_number":67,"context_line":"            clients \u003d osclients.Clients(user[\"endpoint\"])"},{"line_number":68,"context_line":"            murano \u003d clients.murano()"},{"line_number":69,"context_line":"            current_packages \u003d []"},{"line_number":70,"context_line":"            if not any(self.config[\"app_name\"].lower() in p.name.lower()"},{"line_number":71,"context_line":"                       for p in murano.packages.list()):"}],"source_content_type":"text/x-python","patch_set":14,"id":"3a961159_9984f1d3","line":68,"updated":"2014-12-24 09:53:13.000000000","message":"please remove this variable and use always clients.murano()","commit_id":"327432c21985d7aa4db0929160cae568fd7b423e"},{"author":{"_account_id":6172,"name":"Boris Pavlovic","email":"boris@pavlovic.me","username":"boris-42"},"change_message_id":"d7b8b08773f1460acf8e00127f42c28a8405ccfd","unresolved":false,"context_lines":[{"line_number":47,"context_line":"        \"additionalProperties\": False"},{"line_number":48,"context_line":"    }"},{"line_number":49,"context_line":""},{"line_number":50,"context_line":"    def __init__(self, context):"},{"line_number":51,"context_line":"        super(Murano, self).__init__(context)"},{"line_number":52,"context_line":""},{"line_number":53,"context_line":"    @rutils.log_task_wrapper(LOG.info, _(\"Enter context: `Murano packages`\"))"}],"source_content_type":"text/x-python","patch_set":20,"id":"3a961159_8f98fc1c","line":50,"updated":"2014-12-28 12:58:10.000000000","message":"Just remove this method. It does nothing.","commit_id":"75d90ac4c4259cd919097c51e84e594c5244f839"},{"author":{"_account_id":6172,"name":"Boris Pavlovic","email":"boris@pavlovic.me","username":"boris-42"},"change_message_id":"cc6a3e78a01be28626822af3359ad912b0e75952","unresolved":false,"context_lines":[{"line_number":62,"context_line":"                self.context[\"users\"]):"},{"line_number":63,"context_line":"            self.context[\"tenants\"][tenant_id][\"packages\"] \u003d []"},{"line_number":64,"context_line":"            clients \u003d osclients.Clients(user[\"endpoint\"])"},{"line_number":65,"context_line":"            current_packages \u003d []"},{"line_number":66,"context_line":"            if not any(self.config[\"app_name\"].lower() in p.name.lower()"},{"line_number":67,"context_line":"                       for p in clients.murano().packages.list()):"},{"line_number":68,"context_line":"                package \u003d clients.murano().packages.create("}],"source_content_type":"text/x-python","patch_set":20,"id":"3a961159_0fab2c1f","line":65,"updated":"2014-12-28 13:37:33.000000000","message":"Never make variables that are not used. It adds extra 3 lines of code for nothing and makes code harder to read. \n\n  def app_exists(name, clients):\n     return name in map(lambda p: p.name.lower, clients.murano().packages.list() \n\n\n  def setup():\n    ..\n    for user, tenant_id in rutils.iterate_per_tenants(\n                  self.context[\"users\"]):\n        self.context[\"tenants\"][tenant_id][\"packages\"] \u003d []\n        clients \u003d osclients.Clients(user[\"endpoint\"])\n  \n        if not self.app_exists(self.config[\"app_name\"].lower() in existing): \n            package \u003d clients.murano().packages.create(\n               {\"categories\": [\"Web\"], \"tags\": [\"tag\"]},\n               {app_name: local_file})\n       else:\n           # I think that we should fetch app by name. Or raise exception.\n           # please contact murano team.\n\n            self.context[\"tenants\"][tenant_id][\"packages\"].append(package)","commit_id":"75d90ac4c4259cd919097c51e84e594c5244f839"},{"author":{"_account_id":6172,"name":"Boris Pavlovic","email":"boris@pavlovic.me","username":"boris-42"},"change_message_id":"8534645b3d681903d9f538c9031bf4c53a867293","unresolved":false,"context_lines":[{"line_number":61,"context_line":"                    package \u003d clients.murano().packages.create("},{"line_number":62,"context_line":"                        {\"categories\": [\"Web\"], \"tags\": [\"tag\"]},"},{"line_number":63,"context_line":"                        {self.config[\"app_name\"]: local_file})"},{"line_number":64,"context_line":"                    current_packages.append("},{"line_number":65,"context_line":"                        {\"package_id\": package.id,"},{"line_number":66,"context_line":"                         \"endpoint\": user[\"endpoint\"]})"},{"line_number":67,"context_line":"                except Exception:"}],"source_content_type":"text/x-python","patch_set":35,"id":"3a961159_657d4cb2","line":64,"updated":"2015-01-05 20:45:18.000000000","message":"I already said I think 3 times. DON\u0027T USE LOCAL VARIABLES FOR STORING anything inside them. Use context object directly. \n\n  self.context[\"tenants\"][tenant_id][\"packages\"].append(current_packages)","commit_id":"0ab3e99be22122e7c8618c8eb0035bb9c0c55bd9"},{"author":{"_account_id":6172,"name":"Boris Pavlovic","email":"boris@pavlovic.me","username":"boris-42"},"change_message_id":"8534645b3d681903d9f538c9031bf4c53a867293","unresolved":false,"context_lines":[{"line_number":65,"context_line":"                        {\"package_id\": package.id,"},{"line_number":66,"context_line":"                         \"endpoint\": user[\"endpoint\"]})"},{"line_number":67,"context_line":"                except Exception:"},{"line_number":68,"context_line":"                    LOG.error(\"Can\u0027t create package with duplicated name\")"},{"line_number":69,"context_line":"            self.context[\"tenants\"][tenant_id][\"packages\"] \u003d current_packages"},{"line_number":70,"context_line":"        local_file.close()"},{"line_number":71,"context_line":""}],"source_content_type":"text/x-python","patch_set":35,"id":"3a961159_252504c2","line":68,"updated":"2015-01-05 20:45:18.000000000","message":"Remove this exception. You should stop execution in case of failures.","commit_id":"0ab3e99be22122e7c8618c8eb0035bb9c0c55bd9"},{"author":{"_account_id":6172,"name":"Boris Pavlovic","email":"boris@pavlovic.me","username":"boris-42"},"change_message_id":"8534645b3d681903d9f538c9031bf4c53a867293","unresolved":false,"context_lines":[{"line_number":67,"context_line":"                except Exception:"},{"line_number":68,"context_line":"                    LOG.error(\"Can\u0027t create package with duplicated name\")"},{"line_number":69,"context_line":"            self.context[\"tenants\"][tenant_id][\"packages\"] \u003d current_packages"},{"line_number":70,"context_line":"        local_file.close()"},{"line_number":71,"context_line":""},{"line_number":72,"context_line":"    @rutils.log_task_wrapper(LOG.info, _(\"Exit context: `Murano packages`\"))"},{"line_number":73,"context_line":"    def cleanup(self):"}],"source_content_type":"text/x-python","patch_set":35,"id":"3a961159_50100c4e","line":70,"updated":"2015-01-05 20:45:18.000000000","message":"I believe this code is broken. Why we need close() here?","commit_id":"0ab3e99be22122e7c8618c8eb0035bb9c0c55bd9"},{"author":{"_account_id":12395,"name":"Roman Vasylets","email":"pomeo92@gmail.com","username":"rvasilets"},"change_message_id":"01d5f55551253b52c10126a7c85b2050cb1fa235","unresolved":false,"context_lines":[{"line_number":67,"context_line":"                except Exception:"},{"line_number":68,"context_line":"                    LOG.error(\"Can\u0027t create package with duplicated name\")"},{"line_number":69,"context_line":"            self.context[\"tenants\"][tenant_id][\"packages\"] \u003d current_packages"},{"line_number":70,"context_line":"        local_file.close()"},{"line_number":71,"context_line":""},{"line_number":72,"context_line":"    @rutils.log_task_wrapper(LOG.info, _(\"Exit context: `Murano packages`\"))"},{"line_number":73,"context_line":"    def cleanup(self):"}],"source_content_type":"text/x-python","patch_set":35,"id":"3a961159_a342b00c","line":70,"in_reply_to":"3a961159_50100c4e","updated":"2015-01-06 15:41:44.000000000","message":"Because we need to close object and discard memory buffer to prevent memory leaks. No?","commit_id":"0ab3e99be22122e7c8618c8eb0035bb9c0c55bd9"},{"author":{"_account_id":6172,"name":"Boris Pavlovic","email":"boris@pavlovic.me","username":"boris-42"},"change_message_id":"8534645b3d681903d9f538c9031bf4c53a867293","unresolved":false,"context_lines":[{"line_number":74,"context_line":"        for user, tenant_id in rutils.iterate_per_tenants("},{"line_number":75,"context_line":"                self.context[\"users\"]):"},{"line_number":76,"context_line":"            for package in self.context[\"tenants\"][tenant_id][\"packages\"]:"},{"line_number":77,"context_line":"                clients \u003d osclients.Clients(package[\"endpoint\"])"},{"line_number":78,"context_line":"                clients.packages.delete(package[\"package_id\"])"},{"line_number":79,"context_line":"        resource_manager.cleanup(names\u003d[\"murano.environments\"],"},{"line_number":80,"context_line":"                                 users\u003dself.context.get(\"users\", []))"}],"source_content_type":"text/x-python","patch_set":35,"id":"3a961159_b09bf0c7","line":77,"updated":"2015-01-05 20:45:18.000000000","message":"You are initializing clients (Making authentication to keystone with generating new token, it takes about 0.5-2seconds) to delete every package. \n\nInstead of doing one initialization per user and deleting all it\u0027s packages.","commit_id":"0ab3e99be22122e7c8618c8eb0035bb9c0c55bd9"},{"author":{"_account_id":6172,"name":"Boris Pavlovic","email":"boris@pavlovic.me","username":"boris-42"},"change_message_id":"8534645b3d681903d9f538c9031bf4c53a867293","unresolved":false,"context_lines":[{"line_number":76,"context_line":"            for package in self.context[\"tenants\"][tenant_id][\"packages\"]:"},{"line_number":77,"context_line":"                clients \u003d osclients.Clients(package[\"endpoint\"])"},{"line_number":78,"context_line":"                clients.packages.delete(package[\"package_id\"])"},{"line_number":79,"context_line":"        resource_manager.cleanup(names\u003d[\"murano.environments\"],"},{"line_number":80,"context_line":"                                 users\u003dself.context.get(\"users\", []))"}],"source_content_type":"text/x-python","patch_set":35,"id":"3a961159_30af00e5","line":79,"updated":"2015-01-05 20:45:18.000000000","message":"You have to add here big NOTE that describes wtf this part of code makes here.","commit_id":"0ab3e99be22122e7c8618c8eb0035bb9c0c55bd9"},{"author":{"_account_id":9545,"name":"Andriy Kurilin","email":"andr.kurilin@gmail.com","username":"akurilin"},"change_message_id":"bb43ee61386fb7e1ab646a6ea7086fec17b1cc92","unresolved":false,"context_lines":[{"line_number":50,"context_line":"    @rutils.log_task_wrapper(LOG.info, _(\"Enter context: `Murano packages`\"))"},{"line_number":51,"context_line":"    def setup(self):"},{"line_number":52,"context_line":"        local_file \u003d six.moves.StringIO()"},{"line_number":53,"context_line":"        local_file.write(requests.get(self.config[\"app_archive_url\"]).content)"},{"line_number":54,"context_line":""},{"line_number":55,"context_line":"        for user, tenant_id in rutils.iterate_per_tenants("},{"line_number":56,"context_line":"                self.context[\"users\"]):"}],"source_content_type":"text/x-python","patch_set":43,"id":"3a961159_51014069","line":53,"updated":"2015-01-12 17:40:17.000000000","message":"you can simplify this L52-53:\n\n    local_file \u003d six.moves.StringIO(requests.get(self.config[\"app_archive_url\"]).content)","commit_id":"2645ac5607411d16c5116e59e7c0b7e9f6a3e239"},{"author":{"_account_id":7549,"name":"Ekaterina Chernova","email":"katyafervent@yandex.ru","username":"efedorova"},"change_message_id":"f01d97c54d921686e58414307a9f3fe7f45c700e","unresolved":false,"context_lines":[{"line_number":59,"context_line":"            self.context[\"tenants\"][tenant_id][\"packages\"] \u003d []"},{"line_number":60,"context_line":"            clients \u003d osclients.Clients(user[\"endpoint\"])"},{"line_number":61,"context_line":"            for i in range(self.config.get(\"packages_per_tenant\", 1)):"},{"line_number":62,"context_line":"                # NOTE(rvasilets) murano can\u0027t create packages from archives"},{"line_number":63,"context_line":"                # with the same content. Here we change package description"},{"line_number":64,"context_line":"                # in murano template directory for building package"},{"line_number":65,"context_line":"                temp_path \u003d tempfile.mkdtemp()"}],"source_content_type":"text/x-python","patch_set":49,"id":"da86d52c_a12bc492","line":62,"updated":"2015-02-03 16:40:38.000000000","message":"-\u003e Packages with same parameters are not supported in Murano","commit_id":"961f17f6fa3b3b09c4a403859e5cc4e89fec5e67"},{"author":{"_account_id":7549,"name":"Ekaterina Chernova","email":"katyafervent@yandex.ru","username":"efedorova"},"change_message_id":"f01d97c54d921686e58414307a9f3fe7f45c700e","unresolved":false,"context_lines":[{"line_number":62,"context_line":"                # NOTE(rvasilets) murano can\u0027t create packages from archives"},{"line_number":63,"context_line":"                # with the same content. Here we change package description"},{"line_number":64,"context_line":"                # in murano template directory for building package"},{"line_number":65,"context_line":"                temp_path \u003d tempfile.mkdtemp()"},{"line_number":66,"context_line":"                subprocess.call([\"cp\", \"-r\", os.path.join("},{"line_number":67,"context_line":"                    self.config[\"app_archive_url\"], \".\"), temp_path])"},{"line_number":68,"context_line":"                with open(os.path.join(temp_path, \"manifest.yaml\")) as f:"}],"source_content_type":"text/x-python","patch_set":49,"id":"da86d52c_0114904c","line":65,"updated":"2015-02-03 16:40:38.000000000","message":"where do you delete temp folder?","commit_id":"961f17f6fa3b3b09c4a403859e5cc4e89fec5e67"},{"author":{"_account_id":7549,"name":"Ekaterina Chernova","email":"katyafervent@yandex.ru","username":"efedorova"},"change_message_id":"8309b8371dda6c75a4fa2458e02a7919c435f16d","unresolved":false,"context_lines":[{"line_number":68,"context_line":"                with open(os.path.join(temp_path, \"manifest.yaml\")) as f:"},{"line_number":69,"context_line":"                    new_dict \u003d yaml.safe_load(f)"},{"line_number":70,"context_line":"                with open(os.path.join(temp_path, \"manifest.yaml\"),"},{"line_number":71,"context_line":"                          \"w\") as f:"},{"line_number":72,"context_line":"                    rnd \u003d \u0027\u0027.join(random.sample(string.ascii_lowercase, 20))"},{"line_number":73,"context_line":"                    old_name \u003d new_dict[\"FullName\"]"},{"line_number":74,"context_line":"                    new_dict[\"FullName\"] \u003d rnd + new_dict[\"FullName\"]"}],"source_content_type":"text/x-python","patch_set":49,"id":"da86d52c_c4de0611","line":71,"updated":"2015-02-03 16:52:47.000000000","message":"why are you opening the same file twice?","commit_id":"961f17f6fa3b3b09c4a403859e5cc4e89fec5e67"},{"author":{"_account_id":7549,"name":"Ekaterina Chernova","email":"katyafervent@yandex.ru","username":"efedorova"},"change_message_id":"8309b8371dda6c75a4fa2458e02a7919c435f16d","unresolved":false,"context_lines":[{"line_number":70,"context_line":"                with open(os.path.join(temp_path, \"manifest.yaml\"),"},{"line_number":71,"context_line":"                          \"w\") as f:"},{"line_number":72,"context_line":"                    rnd \u003d \u0027\u0027.join(random.sample(string.ascii_lowercase, 20))"},{"line_number":73,"context_line":"                    old_name \u003d new_dict[\"FullName\"]"},{"line_number":74,"context_line":"                    new_dict[\"FullName\"] \u003d rnd + new_dict[\"FullName\"]"},{"line_number":75,"context_line":"                    new_dict[\"Name\"] \u003d rnd + new_dict[\"Name\"]"},{"line_number":76,"context_line":"                    new_dict[\"Classes\"] \u003d {"}],"source_content_type":"text/x-python","patch_set":49,"id":"da86d52c_c4bd266a","line":73,"updated":"2015-02-03 16:52:47.000000000","message":"those actions can be done outside with statement","commit_id":"961f17f6fa3b3b09c4a403859e5cc4e89fec5e67"},{"author":{"_account_id":10475,"name":"Alexander Maretskiy","email":"amaretskiy@mirantis.com","username":"maretskiy"},"change_message_id":"226a7f1f8d67f78fd94c634874fabbe9ecf1b32a","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright 2014: Mirantis Inc."},{"line_number":2,"context_line":"# All Rights Reserved."},{"line_number":3,"context_line":"#"},{"line_number":4,"context_line":"#    Licensed under the Apache License, Version 2.0 (the \"License\"); you may"}],"source_content_type":"text/x-python","patch_set":58,"id":"da86d52c_8f276cc9","line":1,"updated":"2015-02-12 11:54:51.000000000","message":"2015","commit_id":"0112ebb2dec6a7c9a3280814a89bd1ce60cd405d"},{"author":{"_account_id":10475,"name":"Alexander Maretskiy","email":"amaretskiy@mirantis.com","username":"maretskiy"},"change_message_id":"226a7f1f8d67f78fd94c634874fabbe9ecf1b32a","unresolved":false,"context_lines":[{"line_number":70,"context_line":"                                             temp_path)"},{"line_number":71,"context_line":"                with open(os.path.join(temp_path, \"manifest.yaml\")) as f:"},{"line_number":72,"context_line":"                    new_dict \u003d yaml.safe_load(f)"},{"line_number":73,"context_line":"                rnd \u003d \"\".join(random.sample(string.ascii_lowercase, 20))"},{"line_number":74,"context_line":"                old_name \u003d new_dict[\"FullName\"]"},{"line_number":75,"context_line":"                new_dict[\"FullName\"] \u003d new_dict[\"FullName\"] + rnd"},{"line_number":76,"context_line":"                new_dict[\"Name\"] \u003d new_dict[\"Name\"] + rnd"}],"source_content_type":"text/x-python","patch_set":58,"id":"da86d52c_af235003","line":73,"range":{"start_line":73,"start_character":22,"end_line":73,"end_character":71},"updated":"2015-02-12 11:54:51.000000000","message":"We have great rally.common.utils.generate_random_name() for that","commit_id":"0112ebb2dec6a7c9a3280814a89bd1ce60cd405d"},{"author":{"_account_id":10475,"name":"Alexander Maretskiy","email":"amaretskiy@mirantis.com","username":"maretskiy"},"change_message_id":"226a7f1f8d67f78fd94c634874fabbe9ecf1b32a","unresolved":false,"context_lines":[{"line_number":71,"context_line":"                with open(os.path.join(temp_path, \"manifest.yaml\")) as f:"},{"line_number":72,"context_line":"                    new_dict \u003d yaml.safe_load(f)"},{"line_number":73,"context_line":"                rnd \u003d \"\".join(random.sample(string.ascii_lowercase, 20))"},{"line_number":74,"context_line":"                old_name \u003d new_dict[\"FullName\"]"},{"line_number":75,"context_line":"                new_dict[\"FullName\"] \u003d new_dict[\"FullName\"] + rnd"},{"line_number":76,"context_line":"                new_dict[\"Name\"] \u003d new_dict[\"Name\"] + rnd"},{"line_number":77,"context_line":"                new_dict[\"Classes\"] \u003d {"}],"source_content_type":"text/x-python","patch_set":58,"id":"da86d52c_af86f0b6","line":74,"updated":"2015-02-12 11:54:51.000000000","message":"CamelCase convention is not usual for rally, use keys like \"full_name\", \"name\", \"classes\"","commit_id":"0112ebb2dec6a7c9a3280814a89bd1ce60cd405d"},{"author":{"_account_id":12395,"name":"Roman Vasylets","email":"pomeo92@gmail.com","username":"rvasilets"},"change_message_id":"b2ff84279d1282ecad374068af00e217c6e944a5","unresolved":false,"context_lines":[{"line_number":71,"context_line":"                with open(os.path.join(temp_path, \"manifest.yaml\")) as f:"},{"line_number":72,"context_line":"                    new_dict \u003d yaml.safe_load(f)"},{"line_number":73,"context_line":"                rnd \u003d \"\".join(random.sample(string.ascii_lowercase, 20))"},{"line_number":74,"context_line":"                old_name \u003d new_dict[\"FullName\"]"},{"line_number":75,"context_line":"                new_dict[\"FullName\"] \u003d new_dict[\"FullName\"] + rnd"},{"line_number":76,"context_line":"                new_dict[\"Name\"] \u003d new_dict[\"Name\"] + rnd"},{"line_number":77,"context_line":"                new_dict[\"Classes\"] \u003d {"}],"source_content_type":"text/x-python","patch_set":58,"id":"da86d52c_ac1990d2","line":74,"in_reply_to":"da86d52c_af86f0b6","updated":"2015-02-12 15:57:26.000000000","message":"We need to use such name because this dict will convert in Murano into there language that requires such naming.","commit_id":"0112ebb2dec6a7c9a3280814a89bd1ce60cd405d"},{"author":{"_account_id":10475,"name":"Alexander Maretskiy","email":"amaretskiy@mirantis.com","username":"maretskiy"},"change_message_id":"226a7f1f8d67f78fd94c634874fabbe9ecf1b32a","unresolved":false,"context_lines":[{"line_number":75,"context_line":"                new_dict[\"FullName\"] \u003d new_dict[\"FullName\"] + rnd"},{"line_number":76,"context_line":"                new_dict[\"Name\"] \u003d new_dict[\"Name\"] + rnd"},{"line_number":77,"context_line":"                new_dict[\"Classes\"] \u003d {"},{"line_number":78,"context_line":"                    (old_name + rnd): new_dict[\"Classes\"][old_name]}"},{"line_number":79,"context_line":"                with open(os.path.join(temp_path, \"manifest.yaml\"), \"w\") as f:"},{"line_number":80,"context_line":"                    yaml.dump(new_dict, f)"},{"line_number":81,"context_line":"                temp_zip \u003d tempfile.mkdtemp()"}],"source_content_type":"text/x-python","patch_set":58,"id":"da86d52c_2f504031","line":78,"updated":"2015-02-12 11:54:51.000000000","message":"This line looks too complex, use additional variable to make it simplier","commit_id":"0112ebb2dec6a7c9a3280814a89bd1ce60cd405d"},{"author":{"_account_id":10475,"name":"Alexander Maretskiy","email":"amaretskiy@mirantis.com","username":"maretskiy"},"change_message_id":"226a7f1f8d67f78fd94c634874fabbe9ecf1b32a","unresolved":false,"context_lines":[{"line_number":97,"context_line":"                                        \"murano.packages\"],"},{"line_number":98,"context_line":"                                 users\u003dself.context.get(\"users\", []))"},{"line_number":99,"context_line":"        for temp_dir in self.context[\"temp_dir\"]:"},{"line_number":100,"context_line":"            shutil.rmtree(temp_dir)"}],"source_content_type":"text/x-python","patch_set":58,"id":"da86d52c_cfefa4e7","line":100,"updated":"2015-02-12 11:54:51.000000000","message":"Wrap this with try/except, since any raised exception (e.g. OSError) will break cleanup","commit_id":"0112ebb2dec6a7c9a3280814a89bd1ce60cd405d"},{"author":{"_account_id":10475,"name":"Alexander Maretskiy","email":"amaretskiy@mirantis.com","username":"maretskiy"},"change_message_id":"fd4ffa8193bac06ee9526754ef828af12fbe35a5","unresolved":false,"context_lines":[{"line_number":24,"context_line":"from rally.benchmark.context.cleanup import manager as resource_manager"},{"line_number":25,"context_line":"from rally.common.i18n import _"},{"line_number":26,"context_line":"from rally.common import log as logging"},{"line_number":27,"context_line":"from rally.common import utils as rutils"},{"line_number":28,"context_line":"from rally import consts"},{"line_number":29,"context_line":"from rally import osclients"},{"line_number":30,"context_line":""}],"source_content_type":"text/x-python","patch_set":59,"id":"da86d52c_3866952a","line":27,"updated":"2015-02-13 10:56:31.000000000","message":"There is no another `utils\u0027 imported, so use `utils\u0027 here, not `rutils\u0027","commit_id":"c68588feff2af90cc5f73484b4ffb8648ad82f37"},{"author":{"_account_id":10475,"name":"Alexander Maretskiy","email":"amaretskiy@mirantis.com","username":"maretskiy"},"change_message_id":"fd4ffa8193bac06ee9526754ef828af12fbe35a5","unresolved":false,"context_lines":[{"line_number":98,"context_line":"            try:"},{"line_number":99,"context_line":"                shutil.rmtree(temp_dir)"},{"line_number":100,"context_line":"            except Exception as e:"},{"line_number":101,"context_line":"                LOG.error(_(\"Can\u0027t delete temporary directory %s\""},{"line_number":102,"context_line":"                          \" created in Murano context\") % temp_dir)"},{"line_number":103,"context_line":"                if logging.is_debug():"},{"line_number":104,"context_line":"                    LOG.exception(e)"}],"source_content_type":"text/x-python","patch_set":59,"id":"da86d52c_18ec7192","line":101,"updated":"2015-02-13 10:56:31.000000000","message":"Put `%s\u0027 at the end of message, because that is common practice:\n\n LOG.error(_(\"Can\u0027t delete Murano context \"\n             \"tmp directory: %s\") % temp_dir)","commit_id":"c68588feff2af90cc5f73484b4ffb8648ad82f37"},{"author":{"_account_id":10475,"name":"Alexander Maretskiy","email":"amaretskiy@mirantis.com","username":"maretskiy"},"change_message_id":"93afa901c36385137524f6580334197cbf7cda5c","unresolved":false,"context_lines":[{"line_number":56,"context_line":"        for user, tenant_id in utils.iterate_per_tenants("},{"line_number":57,"context_line":"                self.context[\"users\"]):"},{"line_number":58,"context_line":"            self.context[\"tenants\"][tenant_id][\"packages\"] \u003d []"},{"line_number":59,"context_line":"            self.context[\"temp_dir\"] \u003d []"},{"line_number":60,"context_line":"            clients \u003d osclients.Clients(user[\"endpoint\"])"},{"line_number":61,"context_line":"            for i in range(self.config.get(\"packages_per_tenant\", 1)):"},{"line_number":62,"context_line":"                # NOTE(rvasilets) Packages with same parameters are not"}],"source_content_type":"text/x-python","patch_set":62,"id":"ba7be1f8_23765a3f","line":59,"updated":"2015-02-20 11:55:23.000000000","message":"I recommend to rename s/temp_dir/temp_dirs/ because this is definitely plural","commit_id":"813e5520099d7cfbdc35f8557bd2294450796a87"},{"author":{"_account_id":12395,"name":"Roman Vasylets","email":"pomeo92@gmail.com","username":"rvasilets"},"change_message_id":"1bc3f4aaddc454cde7ad99d6047cd4ebfdb3fc11","unresolved":false,"context_lines":[{"line_number":56,"context_line":"        for user, tenant_id in utils.iterate_per_tenants("},{"line_number":57,"context_line":"                self.context[\"users\"]):"},{"line_number":58,"context_line":"            self.context[\"tenants\"][tenant_id][\"packages\"] \u003d []"},{"line_number":59,"context_line":"            self.context[\"temp_dir\"] \u003d []"},{"line_number":60,"context_line":"            clients \u003d osclients.Clients(user[\"endpoint\"])"},{"line_number":61,"context_line":"            for i in range(self.config.get(\"packages_per_tenant\", 1)):"},{"line_number":62,"context_line":"                # NOTE(rvasilets) Packages with same parameters are not"}],"source_content_type":"text/x-python","patch_set":62,"id":"ba7be1f8_cf12ff57","line":59,"in_reply_to":"ba7be1f8_23765a3f","updated":"2015-02-20 13:35:04.000000000","message":"Done","commit_id":"813e5520099d7cfbdc35f8557bd2294450796a87"},{"author":{"_account_id":10475,"name":"Alexander Maretskiy","email":"amaretskiy@mirantis.com","username":"maretskiy"},"change_message_id":"93afa901c36385137524f6580334197cbf7cda5c","unresolved":false,"context_lines":[{"line_number":58,"context_line":"            self.context[\"tenants\"][tenant_id][\"packages\"] \u003d []"},{"line_number":59,"context_line":"            self.context[\"temp_dir\"] \u003d []"},{"line_number":60,"context_line":"            clients \u003d osclients.Clients(user[\"endpoint\"])"},{"line_number":61,"context_line":"            for i in range(self.config.get(\"packages_per_tenant\", 1)):"},{"line_number":62,"context_line":"                # NOTE(rvasilets) Packages with same parameters are not"},{"line_number":63,"context_line":"                # supported in Murano. Here we change package parameters"},{"line_number":64,"context_line":"                # in Murano template directory for building package"}],"source_content_type":"text/x-python","patch_set":62,"id":"ba7be1f8_a35a4a81","line":61,"range":{"start_line":61,"start_character":44,"end_line":61,"end_character":63},"updated":"2015-02-20 11:55:23.000000000","message":"Add `packages_per_tenant\u0027 to config schema (type: integer)","commit_id":"813e5520099d7cfbdc35f8557bd2294450796a87"},{"author":{"_account_id":12395,"name":"Roman Vasylets","email":"pomeo92@gmail.com","username":"rvasilets"},"change_message_id":"1bc3f4aaddc454cde7ad99d6047cd4ebfdb3fc11","unresolved":false,"context_lines":[{"line_number":58,"context_line":"            self.context[\"tenants\"][tenant_id][\"packages\"] \u003d []"},{"line_number":59,"context_line":"            self.context[\"temp_dir\"] \u003d []"},{"line_number":60,"context_line":"            clients \u003d osclients.Clients(user[\"endpoint\"])"},{"line_number":61,"context_line":"            for i in range(self.config.get(\"packages_per_tenant\", 1)):"},{"line_number":62,"context_line":"                # NOTE(rvasilets) Packages with same parameters are not"},{"line_number":63,"context_line":"                # supported in Murano. Here we change package parameters"},{"line_number":64,"context_line":"                # in Murano template directory for building package"}],"source_content_type":"text/x-python","patch_set":62,"id":"ba7be1f8_6f1753a4","line":61,"in_reply_to":"ba7be1f8_a35a4a81","updated":"2015-02-20 13:35:04.000000000","message":"Done","commit_id":"813e5520099d7cfbdc35f8557bd2294450796a87"},{"author":{"_account_id":10475,"name":"Alexander Maretskiy","email":"amaretskiy@mirantis.com","username":"maretskiy"},"change_message_id":"93afa901c36385137524f6580334197cbf7cda5c","unresolved":false,"context_lines":[{"line_number":64,"context_line":"                # in Murano template directory for building package"},{"line_number":65,"context_line":"                temp_path \u003d tempfile.mkdtemp()"},{"line_number":66,"context_line":"                self.context[\"temp_dir\"].append(temp_path)"},{"line_number":67,"context_line":"                distutils.dir_util.copy_tree(self.config[\"app_archive_url\"],"},{"line_number":68,"context_line":"                                             temp_path)"},{"line_number":69,"context_line":"                with open(os.path.join(temp_path, \"manifest.yaml\")) as f:"},{"line_number":70,"context_line":"                    new_dict \u003d yaml.safe_load(f)"}],"source_content_type":"text/x-python","patch_set":62,"id":"ba7be1f8_831706a3","line":67,"updated":"2015-02-20 11:55:23.000000000","message":"Maybe check if self.config[\"app_archive_url\"] exists somewhere above `for\u0027?","commit_id":"813e5520099d7cfbdc35f8557bd2294450796a87"},{"author":{"_account_id":12395,"name":"Roman Vasylets","email":"pomeo92@gmail.com","username":"rvasilets"},"change_message_id":"1bc3f4aaddc454cde7ad99d6047cd4ebfdb3fc11","unresolved":false,"context_lines":[{"line_number":64,"context_line":"                # in Murano template directory for building package"},{"line_number":65,"context_line":"                temp_path \u003d tempfile.mkdtemp()"},{"line_number":66,"context_line":"                self.context[\"temp_dir\"].append(temp_path)"},{"line_number":67,"context_line":"                distutils.dir_util.copy_tree(self.config[\"app_archive_url\"],"},{"line_number":68,"context_line":"                                             temp_path)"},{"line_number":69,"context_line":"                with open(os.path.join(temp_path, \"manifest.yaml\")) as f:"},{"line_number":70,"context_line":"                    new_dict \u003d yaml.safe_load(f)"}],"source_content_type":"text/x-python","patch_set":62,"id":"ba7be1f8_efcd035f","line":67,"in_reply_to":"ba7be1f8_831706a3","updated":"2015-02-20 13:35:04.000000000","message":"As I understand \"required\": [\"app_archive_url\", \"app_name\"], in schema guarantee it.","commit_id":"813e5520099d7cfbdc35f8557bd2294450796a87"},{"author":{"_account_id":12395,"name":"Roman Vasylets","email":"pomeo92@gmail.com","username":"rvasilets"},"change_message_id":"f14961719cd802554a7b4f7403eb0d14750fb8f0","unresolved":false,"context_lines":[{"line_number":64,"context_line":"                # in Murano template directory for building package"},{"line_number":65,"context_line":"                temp_path \u003d tempfile.mkdtemp()"},{"line_number":66,"context_line":"                self.context[\"temp_dir\"].append(temp_path)"},{"line_number":67,"context_line":"                distutils.dir_util.copy_tree(self.config[\"app_archive_url\"],"},{"line_number":68,"context_line":"                                             temp_path)"},{"line_number":69,"context_line":"                with open(os.path.join(temp_path, \"manifest.yaml\")) as f:"},{"line_number":70,"context_line":"                    new_dict \u003d yaml.safe_load(f)"}],"source_content_type":"text/x-python","patch_set":62,"id":"ba7be1f8_70048b7e","line":67,"in_reply_to":"ba7be1f8_8474699d","updated":"2015-02-20 16:41:40.000000000","message":"Done","commit_id":"813e5520099d7cfbdc35f8557bd2294450796a87"},{"author":{"_account_id":10475,"name":"Alexander Maretskiy","email":"amaretskiy@mirantis.com","username":"maretskiy"},"change_message_id":"a2f1d26530862d762ed27344a34b08b133d95627","unresolved":false,"context_lines":[{"line_number":64,"context_line":"                # in Murano template directory for building package"},{"line_number":65,"context_line":"                temp_path \u003d tempfile.mkdtemp()"},{"line_number":66,"context_line":"                self.context[\"temp_dir\"].append(temp_path)"},{"line_number":67,"context_line":"                distutils.dir_util.copy_tree(self.config[\"app_archive_url\"],"},{"line_number":68,"context_line":"                                             temp_path)"},{"line_number":69,"context_line":"                with open(os.path.join(temp_path, \"manifest.yaml\")) as f:"},{"line_number":70,"context_line":"                    new_dict \u003d yaml.safe_load(f)"}],"source_content_type":"text/x-python","patch_set":62,"id":"ba7be1f8_8474699d","line":67,"in_reply_to":"ba7be1f8_efcd035f","updated":"2015-02-20 13:39:24.000000000","message":"Schema guarantees only string value, but is this string is a path to existing directory?","commit_id":"813e5520099d7cfbdc35f8557bd2294450796a87"},{"author":{"_account_id":10475,"name":"Alexander Maretskiy","email":"amaretskiy@mirantis.com","username":"maretskiy"},"change_message_id":"93afa901c36385137524f6580334197cbf7cda5c","unresolved":false,"context_lines":[{"line_number":67,"context_line":"                distutils.dir_util.copy_tree(self.config[\"app_archive_url\"],"},{"line_number":68,"context_line":"                                             temp_path)"},{"line_number":69,"context_line":"                with open(os.path.join(temp_path, \"manifest.yaml\")) as f:"},{"line_number":70,"context_line":"                    new_dict \u003d yaml.safe_load(f)"},{"line_number":71,"context_line":"                rnd \u003d utils.generate_random_name(length\u003d20)"},{"line_number":72,"context_line":"                new_dict[\"Name\"] \u003d new_dict[\"Name\"] + rnd"},{"line_number":73,"context_line":"                new_classes_name \u003d new_dict[\"Classes\"][new_dict[\"FullName\"]]"}],"source_content_type":"text/x-python","patch_set":62,"id":"ba7be1f8_e388c2c8","line":70,"updated":"2015-02-20 11:55:23.000000000","message":"1) s/new_dict/app/\n\n2) code is hard to read, I recommend to add more variables\n\nExample:\n\n with open(os.path.join(temp_path, \"manifest.yaml\")) as f:\n     app \u003d yaml.safe_load(f)\n     salt \u003d utils.generate_random_name(prefix\u003d\"_\", length\u003d20)\n     name \u003d app[\"Name\"] + salt\n     full_name \u003d app[\"FullName\"]\n     classes \u003d app[\"Classes\"][full_name]\n     full_name +\u003d salt\n     app.update({\"Name\": name,\n                 \"Classes\": {full_name: classes},\n                 \"FullName\": full_name})\n     with open(os.path.join(temp_path, \"manifest.yaml\"), \"w\") as f:\n         yaml.dump(app, f)","commit_id":"813e5520099d7cfbdc35f8557bd2294450796a87"},{"author":{"_account_id":12395,"name":"Roman Vasylets","email":"pomeo92@gmail.com","username":"rvasilets"},"change_message_id":"f14961719cd802554a7b4f7403eb0d14750fb8f0","unresolved":false,"context_lines":[{"line_number":67,"context_line":"                distutils.dir_util.copy_tree(self.config[\"app_archive_url\"],"},{"line_number":68,"context_line":"                                             temp_path)"},{"line_number":69,"context_line":"                with open(os.path.join(temp_path, \"manifest.yaml\")) as f:"},{"line_number":70,"context_line":"                    new_dict \u003d yaml.safe_load(f)"},{"line_number":71,"context_line":"                rnd \u003d utils.generate_random_name(length\u003d20)"},{"line_number":72,"context_line":"                new_dict[\"Name\"] \u003d new_dict[\"Name\"] + rnd"},{"line_number":73,"context_line":"                new_classes_name \u003d new_dict[\"Classes\"][new_dict[\"FullName\"]]"}],"source_content_type":"text/x-python","patch_set":62,"id":"ba7be1f8_c40adad1","line":70,"in_reply_to":"ba7be1f8_e388c2c8","updated":"2015-02-20 16:41:40.000000000","message":"Done","commit_id":"813e5520099d7cfbdc35f8557bd2294450796a87"},{"author":{"_account_id":9545,"name":"Andriy Kurilin","email":"andr.kurilin@gmail.com","username":"akurilin"},"change_message_id":"88988fd5b20cb982e52114715c6021f072d3e379","unresolved":false,"context_lines":[{"line_number":98,"context_line":"            try:"},{"line_number":99,"context_line":"                shutil.rmtree(temp_dir)"},{"line_number":100,"context_line":"            except Exception as e:"},{"line_number":101,"context_line":"                LOG.error(_(\"Can\u0027t delete Murano context temporary \""},{"line_number":102,"context_line":"                            \"directory: %s\") % temp_dir)"},{"line_number":103,"context_line":"                if logging.is_debug():"},{"line_number":104,"context_line":"                    LOG.exception(e)"}],"source_content_type":"text/x-python","patch_set":62,"id":"da86d52c_a909ab96","line":101,"updated":"2015-02-20 12:37:50.000000000","message":"please, use here \u0027_LE\u0027 instead of \u0027_\u0027","commit_id":"813e5520099d7cfbdc35f8557bd2294450796a87"},{"author":{"_account_id":12395,"name":"Roman Vasylets","email":"pomeo92@gmail.com","username":"rvasilets"},"change_message_id":"1bc3f4aaddc454cde7ad99d6047cd4ebfdb3fc11","unresolved":false,"context_lines":[{"line_number":98,"context_line":"            try:"},{"line_number":99,"context_line":"                shutil.rmtree(temp_dir)"},{"line_number":100,"context_line":"            except Exception as e:"},{"line_number":101,"context_line":"                LOG.error(_(\"Can\u0027t delete Murano context temporary \""},{"line_number":102,"context_line":"                            \"directory: %s\") % temp_dir)"},{"line_number":103,"context_line":"                if logging.is_debug():"},{"line_number":104,"context_line":"                    LOG.exception(e)"}],"source_content_type":"text/x-python","patch_set":62,"id":"ba7be1f8_cf6cbf39","line":101,"in_reply_to":"da86d52c_a909ab96","updated":"2015-02-20 13:35:04.000000000","message":"Done","commit_id":"813e5520099d7cfbdc35f8557bd2294450796a87"},{"author":{"_account_id":10475,"name":"Alexander Maretskiy","email":"amaretskiy@mirantis.com","username":"maretskiy"},"change_message_id":"89654166c440b29212446c7621deb28a818d4eca","unresolved":false,"context_lines":[{"line_number":57,"context_line":""},{"line_number":58,"context_line":"    @utils.log_task_wrapper(LOG.info, _(\"Enter context: `Murano packages`\"))"},{"line_number":59,"context_line":"    def setup(self):"},{"line_number":60,"context_line":"        if not os.path.exists(self.config[\"app_archive_url\"]):"},{"line_number":61,"context_line":"            LOG.error(_LE(\"There is no directory by this path: %s\")"},{"line_number":62,"context_line":"                      % self.config[\"app_archive_url\"])"},{"line_number":63,"context_line":"            raise exceptions.NoSuchFolder("}],"source_content_type":"text/x-python","patch_set":64,"id":"ba7be1f8_9c41e33b","line":60,"updated":"2015-02-23 14:49:38.000000000","message":"Use os.path.isdir","commit_id":"c543d5834b4fcb309fd9dd27ac4c951f8092acc8"},{"author":{"_account_id":7369,"name":"Sergey Skripnick","email":"sskripnick@mirantis.com","username":"redixin"},"change_message_id":"ff904542d22ac55d4bb6f2d95167a03ef365c2f7","unresolved":false,"context_lines":[{"line_number":69,"context_line":"                # NOTE(rvasilets) Packages with same parameters are not"},{"line_number":70,"context_line":"                # supported in Murano. Here we change package parameters"},{"line_number":71,"context_line":"                # in Murano template directory for building package"},{"line_number":72,"context_line":"                temp_path \u003d tempfile.mkdtemp()"},{"line_number":73,"context_line":"                self.context[\"temp_dirs\"].append(temp_path)"},{"line_number":74,"context_line":"                distutils.dir_util.copy_tree(self.config[\"app_archive_url\"],"},{"line_number":75,"context_line":"                                             temp_path)"}],"source_content_type":"text/x-python","patch_set":65,"id":"ba7be1f8_4724c8c4","line":72,"updated":"2015-02-24 14:46:06.000000000","message":"Should it be added to self.context[\"temp_dirs\"]?","commit_id":"c769f7140cc699aa418d4da6ed308dec724784e8"},{"author":{"_account_id":7369,"name":"Sergey Skripnick","email":"sskripnick@mirantis.com","username":"redixin"},"change_message_id":"ff904542d22ac55d4bb6f2d95167a03ef365c2f7","unresolved":false,"context_lines":[{"line_number":71,"context_line":"                # in Murano template directory for building package"},{"line_number":72,"context_line":"                temp_path \u003d tempfile.mkdtemp()"},{"line_number":73,"context_line":"                self.context[\"temp_dirs\"].append(temp_path)"},{"line_number":74,"context_line":"                distutils.dir_util.copy_tree(self.config[\"app_archive_url\"],"},{"line_number":75,"context_line":"                                             temp_path)"},{"line_number":76,"context_line":"                with open(os.path.join(temp_path, \"manifest.yaml\")) as f:"},{"line_number":77,"context_line":"                    app \u003d yaml.safe_load(f)"}],"source_content_type":"text/x-python","patch_set":65,"id":"ba7be1f8_874400b8","line":74,"updated":"2015-02-24 14:46:06.000000000","message":"why not shutil.copytree?","commit_id":"c769f7140cc699aa418d4da6ed308dec724784e8"},{"author":{"_account_id":7369,"name":"Sergey Skripnick","email":"sskripnick@mirantis.com","username":"redixin"},"change_message_id":"ff904542d22ac55d4bb6f2d95167a03ef365c2f7","unresolved":false,"context_lines":[{"line_number":90,"context_line":"                temp_zip \u003d tempfile.mkdtemp()"},{"line_number":91,"context_line":"                utils.pack_dir(temp_path, os.path.join(temp_zip,"},{"line_number":92,"context_line":"                                                       \"package.zip\"))"},{"line_number":93,"context_line":"                self.context[\"temp_dirs\"].append(temp_zip)"},{"line_number":94,"context_line":"                package \u003d clients.murano().packages.create("},{"line_number":95,"context_line":"                    {\"categories\": [\"Web\"], \"tags\": [\"tag\"]},"},{"line_number":96,"context_line":"                    {self.config[\"app_name\"]: open("}],"source_content_type":"text/x-python","patch_set":65,"id":"ba7be1f8_87016008","line":93,"updated":"2015-02-24 14:46:06.000000000","message":"this should be done immediately after mkdtemp()","commit_id":"c769f7140cc699aa418d4da6ed308dec724784e8"},{"author":{"_account_id":6172,"name":"Boris Pavlovic","email":"boris@pavlovic.me","username":"boris-42"},"change_message_id":"59cf3b42498e7e7630c997f3999640149a756ed2","unresolved":false,"context_lines":[{"line_number":32,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":33,"context_line":""},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"@base.context(name\u003d\"murano\", order\u003d401)"},{"line_number":36,"context_line":"class Murano(base.Context):"},{"line_number":37,"context_line":"    \"\"\"Context class for uploading applications for murano.\"\"\""},{"line_number":38,"context_line":""}],"source_content_type":"text/x-python","patch_set":68,"id":"ba7be1f8_82cd04ba","line":35,"updated":"2015-02-28 23:52:15.000000000","message":"put here 450","commit_id":"2f3fd3ae05395181a382cbdb088929f94910e2b4"},{"author":{"_account_id":6172,"name":"Boris Pavlovic","email":"boris@pavlovic.me","username":"boris-42"},"change_message_id":"59cf3b42498e7e7630c997f3999640149a756ed2","unresolved":false,"context_lines":[{"line_number":59,"context_line":"        if not os.path.isdir(self.config[\"app_archive_url\"]):"},{"line_number":60,"context_line":"            LOG.error(_LE(\"There is no directory by this path: %s\")"},{"line_number":61,"context_line":"                      % self.config[\"app_archive_url\"])"},{"line_number":62,"context_line":"            raise OSError"},{"line_number":63,"context_line":"        for user, tenant_id in utils.iterate_per_tenants("},{"line_number":64,"context_line":"                self.context[\"users\"]):"},{"line_number":65,"context_line":"            self.context[\"tenants\"][tenant_id][\"packages\"] \u003d []"}],"source_content_type":"text/x-python","patch_set":68,"id":"ba7be1f8_e2bde003","line":62,"updated":"2015-02-28 23:52:15.000000000","message":"This is very very very bad. You should raise exception with message otherwise it won\u0027t be clear for end users what is happening","commit_id":"2f3fd3ae05395181a382cbdb088929f94910e2b4"},{"author":{"_account_id":6172,"name":"Boris Pavlovic","email":"boris@pavlovic.me","username":"boris-42"},"change_message_id":"59cf3b42498e7e7630c997f3999640149a756ed2","unresolved":false,"context_lines":[{"line_number":71,"context_line":"                # in Murano template directory for building package"},{"line_number":72,"context_line":"                temp_path \u003d tempfile.mkdtemp()"},{"line_number":73,"context_line":"                self.context[\"temp_dirs\"].append(temp_path)"},{"line_number":74,"context_line":"                distutils.dir_util.copy_tree(self.config[\"app_archive_url\"],"},{"line_number":75,"context_line":"                                             temp_path)"},{"line_number":76,"context_line":"                with open(os.path.join(temp_path, \"manifest.yaml\")) as f:"},{"line_number":77,"context_line":"                    app \u003d yaml.safe_load(f)"}],"source_content_type":"text/x-python","patch_set":68,"id":"ba7be1f8_c2453c16","line":74,"updated":"2015-02-28 23:52:15.000000000","message":"Actually we don\u0027t need to copy this billions of times. \n\nWorkflow should be next: \n\n  Before starting iterating: \n  --------------------------------\n  1) Copy once (before even starting iterating over users)\n  2) Remove from copy file that you are going to add \n  3) Zip copy \n\n  On every iteration\n  ------------------------\n  1) create a copy of zip (this will be very fast)\n  2) _append_manifest_to_zip() (this will be very fast)\n  3) do package\n  4) remove copy of zip (do this in final section so it will be deleted always)","commit_id":"2f3fd3ae05395181a382cbdb088929f94910e2b4"},{"author":{"_account_id":8507,"name":"Mikhail Dubov","email":"mdubov@mirantis.com","username":"msdubov"},"change_message_id":"49bf539ddbbdd750ae9e274873a9943146647731","unresolved":false,"context_lines":[{"line_number":49,"context_line":"                \"type\": \"string\""},{"line_number":50,"context_line":"            },"},{"line_number":51,"context_line":"            \"packages_per_tenant\": {"},{"line_number":52,"context_line":"                \"type\": \"integer\""},{"line_number":53,"context_line":"            }"},{"line_number":54,"context_line":"        },"},{"line_number":55,"context_line":"        \"required\": [\"app_archive_url\", \"app_name\"],"}],"source_content_type":"text/x-python","patch_set":69,"id":"9a80dd14_dc6c7f39","line":52,"updated":"2015-03-04 14:13:09.000000000","message":"Please add\n    \"type\": \"integer\",\n    \"minimum\": 1","commit_id":"1897d8935d76923e8e4c19253cce6ea08953eb06"},{"author":{"_account_id":8507,"name":"Mikhail Dubov","email":"mdubov@mirantis.com","username":"msdubov"},"change_message_id":"49bf539ddbbdd750ae9e274873a9943146647731","unresolved":false,"context_lines":[{"line_number":57,"context_line":"    }"},{"line_number":58,"context_line":""},{"line_number":59,"context_line":"    def _append_manifest_to_zip(self, path_to_zip):"},{"line_number":60,"context_line":"        # NOTE(rvasilets) Packages with same parameters are not"},{"line_number":61,"context_line":"        # supported in Murano. Here we change manifest parameters"},{"line_number":62,"context_line":"        # in Murano package for building unique package"},{"line_number":63,"context_line":"        temp_manifest_dir \u003d tempfile.mkdtemp()"}],"source_content_type":"text/x-python","patch_set":69,"id":"9a80dd14_9c5a0782","line":60,"updated":"2015-03-04 14:13:09.000000000","message":"\u0027:\u0027 missing:\n\n    # NOTE(rvasilets):","commit_id":"1897d8935d76923e8e4c19253cce6ea08953eb06"},{"author":{"_account_id":7369,"name":"Sergey Skripnick","email":"sskripnick@mirantis.com","username":"redixin"},"change_message_id":"333a0d6686db6e8bf588900d137c9a89add5acfb","unresolved":false,"context_lines":[{"line_number":42,"context_line":"        \"type\": \"object\","},{"line_number":43,"context_line":"        \"$schema\": consts.JSON_SCHEMA,"},{"line_number":44,"context_line":"        \"properties\": {"},{"line_number":45,"context_line":"            \"app_archive_url\": {"},{"line_number":46,"context_line":"                \"type\": \"string\","},{"line_number":47,"context_line":"            },"},{"line_number":48,"context_line":"            \"app_name\": {"}],"source_content_type":"text/x-python","patch_set":82,"id":"9a80dd14_7e057978","line":45,"updated":"2015-03-20 17:51:23.000000000","message":"Why it is called url? It looks more like local file/dir path.","commit_id":"8e3778331047decd21274c0de7a0c7ab6c7b8177"},{"author":{"_account_id":12395,"name":"Roman Vasylets","email":"pomeo92@gmail.com","username":"rvasilets"},"change_message_id":"64d86b8c2de28d51e3919b120fbae4fa8d760089","unresolved":false,"context_lines":[{"line_number":42,"context_line":"        \"type\": \"object\","},{"line_number":43,"context_line":"        \"$schema\": consts.JSON_SCHEMA,"},{"line_number":44,"context_line":"        \"properties\": {"},{"line_number":45,"context_line":"            \"app_archive_url\": {"},{"line_number":46,"context_line":"                \"type\": \"string\","},{"line_number":47,"context_line":"            },"},{"line_number":48,"context_line":"            \"app_name\": {"}],"source_content_type":"text/x-python","patch_set":82,"id":"9a80dd14_dad108fc","line":45,"in_reply_to":"9a80dd14_7e057978","updated":"2015-03-20 21:38:28.000000000","message":"Because this is the name given by murano team. Of cause I can rename it. If its really needed.","commit_id":"8e3778331047decd21274c0de7a0c7ab6c7b8177"},{"author":{"_account_id":7369,"name":"Sergey Skripnick","email":"sskripnick@mirantis.com","username":"redixin"},"change_message_id":"333a0d6686db6e8bf588900d137c9a89add5acfb","unresolved":false,"context_lines":[{"line_number":62,"context_line":"        # supported in Murano. Here we change manifest parameters"},{"line_number":63,"context_line":"        # in Murano package for building unique package"},{"line_number":64,"context_line":"        temp_manifest_dir \u003d tempfile.mkdtemp()"},{"line_number":65,"context_line":"        self.context[\"temp_dirs\"].append(temp_manifest_dir)"},{"line_number":66,"context_line":"        org_manifest_path \u003d os.path.join("},{"line_number":67,"context_line":"            self.config[\"app_archive_url\"], \"manifest.yaml\")"},{"line_number":68,"context_line":""}],"source_content_type":"text/x-python","patch_set":82,"id":"9a80dd14_4100daaa","line":65,"updated":"2015-03-20 17:51:23.000000000","message":"Probably \"murano_temp_dirs\" is better name for this key.","commit_id":"8e3778331047decd21274c0de7a0c7ab6c7b8177"},{"author":{"_account_id":12395,"name":"Roman Vasylets","email":"pomeo92@gmail.com","username":"rvasilets"},"change_message_id":"64d86b8c2de28d51e3919b120fbae4fa8d760089","unresolved":false,"context_lines":[{"line_number":62,"context_line":"        # supported in Murano. Here we change manifest parameters"},{"line_number":63,"context_line":"        # in Murano package for building unique package"},{"line_number":64,"context_line":"        temp_manifest_dir \u003d tempfile.mkdtemp()"},{"line_number":65,"context_line":"        self.context[\"temp_dirs\"].append(temp_manifest_dir)"},{"line_number":66,"context_line":"        org_manifest_path \u003d os.path.join("},{"line_number":67,"context_line":"            self.config[\"app_archive_url\"], \"manifest.yaml\")"},{"line_number":68,"context_line":""}],"source_content_type":"text/x-python","patch_set":82,"id":"9a80dd14_c45a1381","line":65,"in_reply_to":"9a80dd14_4100daaa","updated":"2015-03-20 21:38:28.000000000","message":"In patch 62 Alexander suggested to me this name. I don\u0027t whant to rename it on mo time. Why I need do use this name?","commit_id":"8e3778331047decd21274c0de7a0c7ab6c7b8177"},{"author":{"_account_id":7369,"name":"Sergey Skripnick","email":"sskripnick@mirantis.com","username":"redixin"},"change_message_id":"333a0d6686db6e8bf588900d137c9a89add5acfb","unresolved":false,"context_lines":[{"line_number":91,"context_line":"    def _copy_default_pkg_into_zip(self):"},{"line_number":92,"context_line":"        temp_path \u003d tempfile.mkdtemp()"},{"line_number":93,"context_line":"        self.context[\"temp_dirs\"].append(temp_path)"},{"line_number":94,"context_line":"        distutils.dir_util.copy_tree(self.config[\"app_archive_url\"],"},{"line_number":95,"context_line":"                                     temp_path)"},{"line_number":96,"context_line":"        os.remove(os.path.join(temp_path, \"manifest.yaml\"))"},{"line_number":97,"context_line":""}],"source_content_type":"text/x-python","patch_set":82,"id":"9a80dd14_61431e3f","line":94,"updated":"2015-03-20 17:51:23.000000000","message":"Why not shutil.copy_tree?","commit_id":"8e3778331047decd21274c0de7a0c7ab6c7b8177"},{"author":{"_account_id":12395,"name":"Roman Vasylets","email":"pomeo92@gmail.com","username":"rvasilets"},"change_message_id":"64d86b8c2de28d51e3919b120fbae4fa8d760089","unresolved":false,"context_lines":[{"line_number":91,"context_line":"    def _copy_default_pkg_into_zip(self):"},{"line_number":92,"context_line":"        temp_path \u003d tempfile.mkdtemp()"},{"line_number":93,"context_line":"        self.context[\"temp_dirs\"].append(temp_path)"},{"line_number":94,"context_line":"        distutils.dir_util.copy_tree(self.config[\"app_archive_url\"],"},{"line_number":95,"context_line":"                                     temp_path)"},{"line_number":96,"context_line":"        os.remove(os.path.join(temp_path, \"manifest.yaml\"))"},{"line_number":97,"context_line":""}],"source_content_type":"text/x-python","patch_set":82,"id":"9a80dd14_3a5a241e","line":94,"in_reply_to":"9a80dd14_61431e3f","updated":"2015-03-20 21:38:28.000000000","message":"Because we need to copy without root directory. shutil.copytree copyy with root directory","commit_id":"8e3778331047decd21274c0de7a0c7ab6c7b8177"},{"author":{"_account_id":6172,"name":"Boris Pavlovic","email":"boris@pavlovic.me","username":"boris-42"},"change_message_id":"90f3320dd1e2b89a1c66ca9247f545acc62e4eaf","unresolved":false,"context_lines":[{"line_number":116,"context_line":"        base_pkg_zip \u003d self._copy_default_pkg_into_zip()"},{"line_number":117,"context_line":""},{"line_number":118,"context_line":"        admin_clients \u003d osclients.Clients(self.context[\"admin\"][\"endpoint\"])"},{"line_number":119,"context_line":"        for user, tenant_id in utils.iterate_per_tenants("},{"line_number":120,"context_line":"                self.context[\"users\"]):"},{"line_number":121,"context_line":"            self.context[\"tenants\"][tenant_id][\"packages\"] \u003d []"},{"line_number":122,"context_line":""}],"source_content_type":"text/x-python","patch_set":88,"id":"fa963961_09d54a42","line":119,"updated":"2015-03-26 15:56:23.000000000","message":"Remove this loop. You should do this operation only once","commit_id":"2e452f8bafb81522d33690f19dfe53107f363be8"},{"author":{"_account_id":6172,"name":"Boris Pavlovic","email":"boris@pavlovic.me","username":"boris-42"},"change_message_id":"90f3320dd1e2b89a1c66ca9247f545acc62e4eaf","unresolved":false,"context_lines":[{"line_number":131,"context_line":"                package \u003d admin_clients.murano().packages.create("},{"line_number":132,"context_line":"                    {\"categories\": [\"Web\"], \"tags\": [\"tag\"]},"},{"line_number":133,"context_line":"                    {self.config[\"app_name\"]: open(temp_zip)})"},{"line_number":134,"context_line":"                self.context[\"tenants\"][tenant_id][\"packages\"].append("},{"line_number":135,"context_line":"                    {\"package_id\": package.id})"},{"line_number":136,"context_line":""},{"line_number":137,"context_line":"    @utils.log_task_wrapper(LOG.info, _(\"Exit context: `Murano packages`\"))"}],"source_content_type":"text/x-python","patch_set":88,"id":"fa963961_295ecee9","line":134,"updated":"2015-03-26 15:56:23.000000000","message":"This is wrong. As far as I understand now you are creating from admin applications. SO there is no more user tenants and so on stuff","commit_id":"2e452f8bafb81522d33690f19dfe53107f363be8"},{"author":{"_account_id":6172,"name":"Boris Pavlovic","email":"boris@pavlovic.me","username":"boris-42"},"change_message_id":"e7ec92c18dbeecbf65b576f1bfbac5c9037ed725","unresolved":false,"context_lines":[{"line_number":28,"context_line":""},{"line_number":29,"context_line":""},{"line_number":30,"context_line":"@base.context(name\u003d\"murano\", order\u003d401)"},{"line_number":31,"context_line":"class Murano(base.Context):"},{"line_number":32,"context_line":"    \"\"\"Context class for uploading applications for murano.\"\"\""},{"line_number":33,"context_line":""},{"line_number":34,"context_line":"    CONFIG_SCHEMA \u003d {"}],"source_content_type":"text/x-python","patch_set":98,"id":"7aaa499b_bbb0d58c","line":31,"updated":"2015-04-12 10:02:21.000000000","message":"Murano is too common name for this benchmark context. It should be at least: \n\n MuranoPackage and name should be \"murano_package\"","commit_id":"de3e16d0561416768760ff43aa10e8d64432e457"},{"author":{"_account_id":12395,"name":"Roman Vasylets","email":"pomeo92@gmail.com","username":"rvasilets"},"change_message_id":"6183c8dd1cb993501449934a7c33f376459b46a3","unresolved":false,"context_lines":[{"line_number":28,"context_line":""},{"line_number":29,"context_line":""},{"line_number":30,"context_line":"@base.context(name\u003d\"murano\", order\u003d401)"},{"line_number":31,"context_line":"class Murano(base.Context):"},{"line_number":32,"context_line":"    \"\"\"Context class for uploading applications for murano.\"\"\""},{"line_number":33,"context_line":""},{"line_number":34,"context_line":"    CONFIG_SCHEMA \u003d {"}],"source_content_type":"text/x-python","patch_set":98,"id":"7aaa499b_d350e80c","line":31,"in_reply_to":"7aaa499b_bbb0d58c","updated":"2015-04-14 12:41:37.000000000","message":"I will rename this class to MuranoPackage. I don\u0027t understand where name should to be \"murano_package\". Did you meant in config_schema?","commit_id":"de3e16d0561416768760ff43aa10e8d64432e457"},{"author":{"_account_id":6172,"name":"Boris Pavlovic","email":"boris@pavlovic.me","username":"boris-42"},"change_message_id":"e7ec92c18dbeecbf65b576f1bfbac5c9037ed725","unresolved":false,"context_lines":[{"line_number":51,"context_line":"        if not zipfile.is_zipfile(self.config[\"app_package\"]):"},{"line_number":52,"context_line":"            msg \u003d (_LE(\"There is no zip archive by this path: %s\")"},{"line_number":53,"context_line":"                   % self.config[\"app_package\"])"},{"line_number":54,"context_line":"            LOG.error(msg)"},{"line_number":55,"context_line":"            raise OSError(msg)"},{"line_number":56,"context_line":"        clients \u003d osclients.Clients(self.context[\"users\"][0][\"endpoint\"])"},{"line_number":57,"context_line":""}],"source_content_type":"text/x-python","patch_set":98,"id":"7aaa499b_5ba7914f","line":54,"updated":"2015-04-12 10:02:21.000000000","message":"Don\u0027t log this message, it will be logged in any case by benchmark engine.","commit_id":"de3e16d0561416768760ff43aa10e8d64432e457"},{"author":{"_account_id":12395,"name":"Roman Vasylets","email":"pomeo92@gmail.com","username":"rvasilets"},"change_message_id":"badcd7af118f27b903d6abf2ae1d43b7d6582d27","unresolved":false,"context_lines":[{"line_number":51,"context_line":"        if not zipfile.is_zipfile(self.config[\"app_package\"]):"},{"line_number":52,"context_line":"            msg \u003d (_LE(\"There is no zip archive by this path: %s\")"},{"line_number":53,"context_line":"                   % self.config[\"app_package\"])"},{"line_number":54,"context_line":"            LOG.error(msg)"},{"line_number":55,"context_line":"            raise OSError(msg)"},{"line_number":56,"context_line":"        clients \u003d osclients.Clients(self.context[\"users\"][0][\"endpoint\"])"},{"line_number":57,"context_line":""}],"source_content_type":"text/x-python","patch_set":98,"id":"7aaa499b_b3f31c0a","line":54,"in_reply_to":"7aaa499b_5ba7914f","updated":"2015-04-14 12:43:07.000000000","message":"Did you want me to remove only logging or raising exception too?","commit_id":"de3e16d0561416768760ff43aa10e8d64432e457"},{"author":{"_account_id":12395,"name":"Roman Vasylets","email":"pomeo92@gmail.com","username":"rvasilets"},"change_message_id":"b495128722a2cc0ded5b905dcb6de59774344469","unresolved":false,"context_lines":[{"line_number":51,"context_line":"        if not zipfile.is_zipfile(self.config[\"app_package\"]):"},{"line_number":52,"context_line":"            msg \u003d (_LE(\"There is no zip archive by this path: %s\")"},{"line_number":53,"context_line":"                   % self.config[\"app_package\"])"},{"line_number":54,"context_line":"            LOG.error(msg)"},{"line_number":55,"context_line":"            raise OSError(msg)"},{"line_number":56,"context_line":"        clients \u003d osclients.Clients(self.context[\"users\"][0][\"endpoint\"])"},{"line_number":57,"context_line":""}],"source_content_type":"text/x-python","patch_set":98,"id":"7aaa499b_7940d5a5","line":54,"in_reply_to":"7aaa499b_5ba7914f","updated":"2015-04-14 13:27:58.000000000","message":"Done","commit_id":"de3e16d0561416768760ff43aa10e8d64432e457"},{"author":{"_account_id":9545,"name":"Andriy Kurilin","email":"andr.kurilin@gmail.com","username":"akurilin"},"change_message_id":"6858a9c2f3a64647e8463d6f045b326c60270816","unresolved":false,"context_lines":[{"line_number":51,"context_line":"        if not zipfile.is_zipfile(self.config[\"app_package\"]):"},{"line_number":52,"context_line":"            msg \u003d (_LE(\"There is no zip archive by this path: %s\")"},{"line_number":53,"context_line":"                   % self.config[\"app_package\"])"},{"line_number":54,"context_line":"            LOG.error(msg)"},{"line_number":55,"context_line":"            raise OSError(msg)"},{"line_number":56,"context_line":"        clients \u003d osclients.Clients(self.context[\"users\"][0][\"endpoint\"])"},{"line_number":57,"context_line":""}],"source_content_type":"text/x-python","patch_set":98,"id":"7aaa499b_935b80f6","line":54,"in_reply_to":"7aaa499b_b3f31c0a","updated":"2015-04-14 12:45:47.000000000","message":"only log","commit_id":"de3e16d0561416768760ff43aa10e8d64432e457"},{"author":{"_account_id":6172,"name":"Boris Pavlovic","email":"boris@pavlovic.me","username":"boris-42"},"change_message_id":"e7ec92c18dbeecbf65b576f1bfbac5c9037ed725","unresolved":false,"context_lines":[{"line_number":62,"context_line":"            {self.config[\"app_name\"]: open(self.config[\"app_package\"])})"},{"line_number":63,"context_line":"        clients.murano().packages.toggle_public(package.id)"},{"line_number":64,"context_line":""},{"line_number":65,"context_line":"        self.context[\"tenants\"][tenant_id][\"packages\"].append("},{"line_number":66,"context_line":"            {\"package_id\": package.id})"},{"line_number":67,"context_line":""},{"line_number":68,"context_line":"    @utils.log_task_wrapper(LOG.info, _(\"Exit context: `Murano packages`\"))"}],"source_content_type":"text/x-python","patch_set":98,"id":"7aaa499b_7b580d57","line":65,"updated":"2015-04-12 10:02:21.000000000","message":"There few issues here: \n\n\n  1) application is common/public for all cloud, so it means that it\u0027s not tenant specifc and it should be in global context: \n\n  self.context[\"murano\"]\n\n\n  2) Second thing why it\u0027s in packages and not app \n\n   self.context[\"murano\"][\"package\"]\n\n\n  3) You should append this application when it is create (before toggle_public )\n\n   4) Why you are adding this strange stuff to context {\"package_id\": package.id}. I would prefer to have something like package.to_dict()","commit_id":"de3e16d0561416768760ff43aa10e8d64432e457"},{"author":{"_account_id":12395,"name":"Roman Vasylets","email":"pomeo92@gmail.com","username":"rvasilets"},"change_message_id":"6183c8dd1cb993501449934a7c33f376459b46a3","unresolved":false,"context_lines":[{"line_number":62,"context_line":"            {self.config[\"app_name\"]: open(self.config[\"app_package\"])})"},{"line_number":63,"context_line":"        clients.murano().packages.toggle_public(package.id)"},{"line_number":64,"context_line":""},{"line_number":65,"context_line":"        self.context[\"tenants\"][tenant_id][\"packages\"].append("},{"line_number":66,"context_line":"            {\"package_id\": package.id})"},{"line_number":67,"context_line":""},{"line_number":68,"context_line":"    @utils.log_task_wrapper(LOG.info, _(\"Exit context: `Murano packages`\"))"}],"source_content_type":"text/x-python","patch_set":98,"id":"7aaa499b_98471f77","line":65,"in_reply_to":"7aaa499b_7b580d57","updated":"2015-04-14 12:41:37.000000000","message":"1) Agree.\n2) It\u0027s called package because it becomes Application only after deploy it. If understand the question.\n3) What\u0027s the difference?\n4)Ok.","commit_id":"de3e16d0561416768760ff43aa10e8d64432e457"},{"author":{"_account_id":12395,"name":"Roman Vasylets","email":"pomeo92@gmail.com","username":"rvasilets"},"change_message_id":"961a2201d6bf3cbeefc19b633b573e90aa231c1c","unresolved":false,"context_lines":[{"line_number":62,"context_line":"            {self.config[\"app_name\"]: open(self.config[\"app_package\"])})"},{"line_number":63,"context_line":"        clients.murano().packages.toggle_public(package.id)"},{"line_number":64,"context_line":""},{"line_number":65,"context_line":"        self.context[\"tenants\"][tenant_id][\"packages\"].append("},{"line_number":66,"context_line":"            {\"package_id\": package.id})"},{"line_number":67,"context_line":""},{"line_number":68,"context_line":"    @utils.log_task_wrapper(LOG.info, _(\"Exit context: `Murano packages`\"))"}],"source_content_type":"text/x-python","patch_set":98,"id":"7aaa499b_0b99741f","line":65,"in_reply_to":"7aaa499b_98471f77","updated":"2015-04-14 13:51:06.000000000","message":"I don\u0027t see any posiibility to make package.to_dict() in muranoclient. After reinstall devstack I wiil try to do this.","commit_id":"de3e16d0561416768760ff43aa10e8d64432e457"},{"author":{"_account_id":6172,"name":"Boris Pavlovic","email":"boris@pavlovic.me","username":"boris-42"},"change_message_id":"e7ec92c18dbeecbf65b576f1bfbac5c9037ed725","unresolved":false,"context_lines":[{"line_number":71,"context_line":"        # by resource manager"},{"line_number":72,"context_line":"        resource_manager.cleanup(names\u003d[\"murano.environments\","},{"line_number":73,"context_line":"                                        \"murano.packages\"],"},{"line_number":74,"context_line":"                                 users\u003dself.context.get(\"users\", []))"}],"source_content_type":"text/x-python","patch_set":98,"id":"7aaa499b_3b31650c","line":74,"updated":"2015-04-12 10:02:21.000000000","message":"resource_manager cleanup is not rational to use for this task. \n\nFirst of all why are you deleting environments at all here? You didn\u0027t create them and shouldn\u0027t touch them at all here. \n\nThe second thing you should delete just single application that you create and that is in \n\n  self.context[\"murano\"][\"package\"]","commit_id":"de3e16d0561416768760ff43aa10e8d64432e457"},{"author":{"_account_id":12395,"name":"Roman Vasylets","email":"pomeo92@gmail.com","username":"rvasilets"},"change_message_id":"6183c8dd1cb993501449934a7c33f376459b46a3","unresolved":false,"context_lines":[{"line_number":71,"context_line":"        # by resource manager"},{"line_number":72,"context_line":"        resource_manager.cleanup(names\u003d[\"murano.environments\","},{"line_number":73,"context_line":"                                        \"murano.packages\"],"},{"line_number":74,"context_line":"                                 users\u003dself.context.get(\"users\", []))"}],"source_content_type":"text/x-python","patch_set":98,"id":"7aaa499b_b812db60","line":74,"in_reply_to":"7aaa499b_3b31650c","updated":"2015-04-14 12:41:37.000000000","message":"I can make this. But I think it\u0027s better to call cleanup think about future code change like rewriting setup() method.","commit_id":"de3e16d0561416768760ff43aa10e8d64432e457"}],"rally/benchmark/context/murano_packages.py":[{"author":{"_account_id":7549,"name":"Ekaterina Chernova","email":"katyafervent@yandex.ru","username":"efedorova"},"change_message_id":"930fdd7225c5f1b4289e9f549907d2c033c41b18","unresolved":false,"context_lines":[{"line_number":38,"context_line":"            \"app_package\": {"},{"line_number":39,"context_line":"                \"type\": \"string\","},{"line_number":40,"context_line":"            },"},{"line_number":41,"context_line":"            \"app_name\": {"},{"line_number":42,"context_line":"                \"type\": \"string\""},{"line_number":43,"context_line":"            }"},{"line_number":44,"context_line":"        },"}],"source_content_type":"text/x-python","patch_set":101,"id":"5ad0253b_dcadc589","line":41,"updated":"2015-04-29 10:13:19.000000000","message":"Please, remove app_name","commit_id":"d1e1f0b921629c56cfba950a5a2c3479d96cd134"},{"author":{"_account_id":12395,"name":"Roman Vasylets","email":"pomeo92@gmail.com","username":"rvasilets"},"change_message_id":"e00fce626cead6a224ff73a2b11bb447d2237f9d","unresolved":false,"context_lines":[{"line_number":38,"context_line":"            \"app_package\": {"},{"line_number":39,"context_line":"                \"type\": \"string\","},{"line_number":40,"context_line":"            },"},{"line_number":41,"context_line":"            \"app_name\": {"},{"line_number":42,"context_line":"                \"type\": \"string\""},{"line_number":43,"context_line":"            }"},{"line_number":44,"context_line":"        },"}],"source_content_type":"text/x-python","patch_set":101,"id":"5ad0253b_0dd9c5f3","line":41,"in_reply_to":"5ad0253b_dcadc589","updated":"2015-04-29 12:03:32.000000000","message":"Done","commit_id":"d1e1f0b921629c56cfba950a5a2c3479d96cd134"},{"author":{"_account_id":7549,"name":"Ekaterina Chernova","email":"katyafervent@yandex.ru","username":"efedorova"},"change_message_id":"930fdd7225c5f1b4289e9f549907d2c033c41b18","unresolved":false,"context_lines":[{"line_number":57,"context_line":"                self.context[\"users\"]):"},{"line_number":58,"context_line":"            clients \u003d osclients.Clients(user[\"endpoint\"])"},{"line_number":59,"context_line":"            self.context[\"tenants\"][tenant_id][\"packages\"] \u003d []"},{"line_number":60,"context_line":"            package \u003d clients.murano().packages.create("},{"line_number":61,"context_line":"                {\"categories\": [\"Web\"], \"tags\": [\"tag\"]},"},{"line_number":62,"context_line":"                {self.config[\"app_name\"]: open(self.config[\"app_package\"])})"},{"line_number":63,"context_line":""}],"source_content_type":"text/x-python","patch_set":101,"id":"5ad0253b_5c82d501","line":60,"updated":"2015-04-29 10:13:19.000000000","message":"do you handle possible exceptions somewhere?","commit_id":"d1e1f0b921629c56cfba950a5a2c3479d96cd134"},{"author":{"_account_id":12395,"name":"Roman Vasylets","email":"pomeo92@gmail.com","username":"rvasilets"},"change_message_id":"e00fce626cead6a224ff73a2b11bb447d2237f9d","unresolved":false,"context_lines":[{"line_number":57,"context_line":"                self.context[\"users\"]):"},{"line_number":58,"context_line":"            clients \u003d osclients.Clients(user[\"endpoint\"])"},{"line_number":59,"context_line":"            self.context[\"tenants\"][tenant_id][\"packages\"] \u003d []"},{"line_number":60,"context_line":"            package \u003d clients.murano().packages.create("},{"line_number":61,"context_line":"                {\"categories\": [\"Web\"], \"tags\": [\"tag\"]},"},{"line_number":62,"context_line":"                {self.config[\"app_name\"]: open(self.config[\"app_package\"])})"},{"line_number":63,"context_line":""}],"source_content_type":"text/x-python","patch_set":101,"id":"5ad0253b_4dd69dc6","line":60,"in_reply_to":"5ad0253b_5c82d501","updated":"2015-04-29 12:03:32.000000000","message":"No, we just output error.","commit_id":"d1e1f0b921629c56cfba950a5a2c3479d96cd134"},{"author":{"_account_id":7549,"name":"Ekaterina Chernova","email":"katyafervent@yandex.ru","username":"efedorova"},"change_message_id":"930fdd7225c5f1b4289e9f549907d2c033c41b18","unresolved":false,"context_lines":[{"line_number":59,"context_line":"            self.context[\"tenants\"][tenant_id][\"packages\"] \u003d []"},{"line_number":60,"context_line":"            package \u003d clients.murano().packages.create("},{"line_number":61,"context_line":"                {\"categories\": [\"Web\"], \"tags\": [\"tag\"]},"},{"line_number":62,"context_line":"                {self.config[\"app_name\"]: open(self.config[\"app_package\"])})"},{"line_number":63,"context_line":""},{"line_number":64,"context_line":"            self.context[\"tenants\"][tenant_id][\"packages\"].append(package)"},{"line_number":65,"context_line":""}],"source_content_type":"text/x-python","patch_set":101,"id":"5ad0253b_3c9ef956","line":62,"updated":"2015-04-29 10:13:19.000000000","message":"you can use \u0027file\u0027: instead of self.config[\"app_name\"]","commit_id":"d1e1f0b921629c56cfba950a5a2c3479d96cd134"},{"author":{"_account_id":12395,"name":"Roman Vasylets","email":"pomeo92@gmail.com","username":"rvasilets"},"change_message_id":"e00fce626cead6a224ff73a2b11bb447d2237f9d","unresolved":false,"context_lines":[{"line_number":59,"context_line":"            self.context[\"tenants\"][tenant_id][\"packages\"] \u003d []"},{"line_number":60,"context_line":"            package \u003d clients.murano().packages.create("},{"line_number":61,"context_line":"                {\"categories\": [\"Web\"], \"tags\": [\"tag\"]},"},{"line_number":62,"context_line":"                {self.config[\"app_name\"]: open(self.config[\"app_package\"])})"},{"line_number":63,"context_line":""},{"line_number":64,"context_line":"            self.context[\"tenants\"][tenant_id][\"packages\"].append(package)"},{"line_number":65,"context_line":""}],"source_content_type":"text/x-python","patch_set":101,"id":"5ad0253b_2ddc81e3","line":62,"in_reply_to":"5ad0253b_3c9ef956","updated":"2015-04-29 12:03:32.000000000","message":"Done","commit_id":"d1e1f0b921629c56cfba950a5a2c3479d96cd134"},{"author":{"_account_id":10475,"name":"Alexander Maretskiy","email":"amaretskiy@mirantis.com","username":"maretskiy"},"change_message_id":"f64b8e003b260a908b9f46d77aa2393ae7f26ec5","unresolved":false,"context_lines":[{"line_number":62,"context_line":""},{"line_number":63,"context_line":"    @utils.log_task_wrapper(LOG.info, _(\"Exit context: `Murano packages`\"))"},{"line_number":64,"context_line":"    def cleanup(self):"},{"line_number":65,"context_line":"        # NOTE(rvasilets): Delete all created in murano resources"},{"line_number":66,"context_line":"        # by resource manager"},{"line_number":67,"context_line":"        resource_manager.cleanup(names\u003d[\"murano.packages\"],"},{"line_number":68,"context_line":"                                 users\u003dself.context.get(\"users\", []))"}],"source_content_type":"text/x-python","patch_set":103,"id":"1aca2d91_bf5e8543","line":65,"updated":"2015-05-06 13:08:54.000000000","message":"Delete this comment - it is obvious","commit_id":"b5a343ae2a1faad54fc4cd68bb56c061b374a4cc"},{"author":{"_account_id":6172,"name":"Boris Pavlovic","email":"boris@pavlovic.me","username":"boris-42"},"change_message_id":"dd0cf44be7afab87b904acca578e760de496a00c","unresolved":false,"context_lines":[{"line_number":27,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":28,"context_line":""},{"line_number":29,"context_line":""},{"line_number":30,"context_line":"@base.context(name\u003d\"murano\", order\u003d401)"},{"line_number":31,"context_line":"class PackageGenerator(base.Context):"},{"line_number":32,"context_line":"    \"\"\"Context class for uploading applications for murano.\"\"\""},{"line_number":33,"context_line":""}],"source_content_type":"text/x-python","patch_set":104,"id":"1aca2d91_f3eaac0e","line":30,"updated":"2015-05-08 00:32:43.000000000","message":"murano doens\u0027t mean anything. \n\nThis context should be called better like: \n\n  \"murano_packages\"","commit_id":"24a78d7e49cb36b619ba3393f5daa5a53b347185"},{"author":{"_account_id":12395,"name":"Roman Vasylets","email":"pomeo92@gmail.com","username":"rvasilets"},"change_message_id":"2423eb22b5f027203d21626a1f9069cba0efd757","unresolved":false,"context_lines":[{"line_number":27,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":28,"context_line":""},{"line_number":29,"context_line":""},{"line_number":30,"context_line":"@base.context(name\u003d\"murano\", order\u003d401)"},{"line_number":31,"context_line":"class PackageGenerator(base.Context):"},{"line_number":32,"context_line":"    \"\"\"Context class for uploading applications for murano.\"\"\""},{"line_number":33,"context_line":""}],"source_content_type":"text/x-python","patch_set":104,"id":"1aca2d91_d18f9eca","line":30,"in_reply_to":"1aca2d91_f3eaac0e","updated":"2015-05-08 12:05:06.000000000","message":"Done","commit_id":"24a78d7e49cb36b619ba3393f5daa5a53b347185"}],"rally/benchmark/validation.py":[{"author":{"_account_id":9180,"name":"Olga Kopylova","email":"olkonami@gmail.com","username":"olkonami"},"change_message_id":"a9cd8697d62af743c92681b5978f968ec18520b0","unresolved":false,"context_lines":[{"line_number":166,"context_line":""},{"line_number":167,"context_line":"            return (ValidationResult(), Image)"},{"line_number":168,"context_line":""},{"line_number":169,"context_line":"        msg \u003d _(\"Image names are not the same\")"},{"line_number":170,"context_line":"        return (ValidationResult(False, msg), None)"},{"line_number":171,"context_line":""},{"line_number":172,"context_line":"    if not image_value:"}],"source_content_type":"text/x-python","patch_set":26,"id":"3a961159_7011bdae","line":169,"updated":"2014-12-31 09:23:39.000000000","message":"I think message should be more detailed, add here values of names and explanation that one name is from context and other is from task config","commit_id":"fc9a652f40c3232042d352e1697f3045ad4144a2"},{"author":{"_account_id":9545,"name":"Andriy Kurilin","email":"andr.kurilin@gmail.com","username":"akurilin"},"change_message_id":"87842614976c572b80849127d6b37d8a4c623c56","unresolved":false,"context_lines":[{"line_number":388,"context_line":""},{"line_number":389,"context_line":""},{"line_number":390,"context_line":"@validator"},{"line_number":391,"context_line":"def required_clients(config, clients, task, *required_clients):"},{"line_number":392,"context_line":"    for required_client in required_clients:"},{"line_number":393,"context_line":"        if not importutils.try_import(required_client):"},{"line_number":394,"context_line":"            return ValidationResult("}],"source_content_type":"text/x-python","patch_set":32,"id":"3a961159_222ef6fa","line":391,"updated":"2015-01-03 16:12:30.000000000","message":"you should add unit tests for this validator","commit_id":"e06d60dda8beaab6f9307734923b844b929f9225"},{"author":{"_account_id":9545,"name":"Andriy Kurilin","email":"andr.kurilin@gmail.com","username":"akurilin"},"change_message_id":"87842614976c572b80849127d6b37d8a4c623c56","unresolved":false,"context_lines":[{"line_number":393,"context_line":"        if not importutils.try_import(required_client):"},{"line_number":394,"context_line":"            return ValidationResult("},{"line_number":395,"context_line":"                False, _(\"%s is not installed. To install it run\""},{"line_number":396,"context_line":"                         \"`pip install -r\""},{"line_number":397,"context_line":"                         \"optional-requirements.txt\") % required_client)"},{"line_number":398,"context_line":""},{"line_number":399,"context_line":""}],"source_content_type":"text/x-python","patch_set":32,"id":"3a961159_6238fe3d","line":396,"updated":"2015-01-03 16:12:30.000000000","message":"You should add two spaces: after \"run\" and before \"optional-...\". Also, add character \"`\" after \"...ments.txt\", since you are using this character before command.","commit_id":"e06d60dda8beaab6f9307734923b844b929f9225"},{"author":{"_account_id":6172,"name":"Boris Pavlovic","email":"boris@pavlovic.me","username":"boris-42"},"change_message_id":"8534645b3d681903d9f538c9031bf4c53a867293","unresolved":false,"context_lines":[{"line_number":157,"context_line":"    image_value \u003d config.get(\"args\", {}).get(param_name)"},{"line_number":158,"context_line":""},{"line_number":159,"context_line":"    if image_context and image_context.get(\"image_name\", None):"},{"line_number":160,"context_line":"        if image_context[\"image_name\"] \u003d\u003d image_value[\"name\"]:"},{"line_number":161,"context_line":""},{"line_number":162,"context_line":"            class Image(object):"},{"line_number":163,"context_line":"                name \u003d image_context[\"image_name\"]"}],"source_content_type":"text/x-python","patch_set":35,"id":"3a961159_d0eebc21","line":160,"updated":"2015-01-05 20:45:18.000000000","message":"image generators can generate N images with various names -1, -2, -3 sooo this is not proper check.","commit_id":"0ab3e99be22122e7c8618c8eb0035bb9c0c55bd9"},{"author":{"_account_id":6172,"name":"Boris Pavlovic","email":"boris@pavlovic.me","username":"boris-42"},"change_message_id":"8534645b3d681903d9f538c9031bf4c53a867293","unresolved":false,"context_lines":[{"line_number":159,"context_line":"    if image_context and image_context.get(\"image_name\", None):"},{"line_number":160,"context_line":"        if image_context[\"image_name\"] \u003d\u003d image_value[\"name\"]:"},{"line_number":161,"context_line":""},{"line_number":162,"context_line":"            class Image(object):"},{"line_number":163,"context_line":"                name \u003d image_context[\"image_name\"]"},{"line_number":164,"context_line":"                min_ram \u003d image_context.get(\"min_ram\", 0)"},{"line_number":165,"context_line":"                min_disk \u003d image_context.get(\"min_disk\", 0)"}],"source_content_type":"text/x-python","patch_set":35,"id":"3a961159_10ccc4ba","line":162,"updated":"2015-01-05 20:45:18.000000000","message":"This is wtf. Generating temporary class for storing some values. \n\n\nwhat about using dict?","commit_id":"0ab3e99be22122e7c8618c8eb0035bb9c0c55bd9"},{"author":{"_account_id":6172,"name":"Boris Pavlovic","email":"boris@pavlovic.me","username":"boris-42"},"change_message_id":"8534645b3d681903d9f538c9031bf4c53a867293","unresolved":false,"context_lines":[{"line_number":388,"context_line":""},{"line_number":389,"context_line":""},{"line_number":390,"context_line":"@validator"},{"line_number":391,"context_line":"def required_clients(config, clients, task, *required_clients):"},{"line_number":392,"context_line":"    for required_client in required_clients:"},{"line_number":393,"context_line":"        if not importutils.try_import(required_client):"},{"line_number":394,"context_line":"            return ValidationResult("}],"source_content_type":"text/x-python","patch_set":35,"id":"3a961159_70ba680c","line":391,"updated":"2015-01-05 20:45:18.000000000","message":"This should be add with next patch","commit_id":"0ab3e99be22122e7c8618c8eb0035bb9c0c55bd9"},{"author":{"_account_id":10475,"name":"Alexander Maretskiy","email":"amaretskiy@mirantis.com","username":"maretskiy"},"change_message_id":"226a7f1f8d67f78fd94c634874fabbe9ecf1b32a","unresolved":false,"context_lines":[{"line_number":161,"context_line":"            image \u003d {"},{"line_number":162,"context_line":"                \"name\": image_context[\"image_name\"],"},{"line_number":163,"context_line":"                \"min_ram\": image_context.get(\"min_ram\", 0),"},{"line_number":164,"context_line":"                \"min_disk\": image_context.get(\"min_disk\", 0),"},{"line_number":165,"context_line":"                \"size\": image_context.get(\"min_disk\", 0)"},{"line_number":166,"context_line":"            }"},{"line_number":167,"context_line":"            return (ValidationResult(), image)"}],"source_content_type":"text/x-python","patch_set":58,"id":"da86d52c_cf04041a","line":164,"updated":"2015-02-12 11:54:51.000000000","message":"min_ram and min_disk are not related with images (that are flavor parameters) so remove them","commit_id":"0112ebb2dec6a7c9a3280814a89bd1ce60cd405d"},{"author":{"_account_id":12395,"name":"Roman Vasylets","email":"pomeo92@gmail.com","username":"rvasilets"},"change_message_id":"b2ff84279d1282ecad374068af00e217c6e944a5","unresolved":false,"context_lines":[{"line_number":161,"context_line":"            image \u003d {"},{"line_number":162,"context_line":"                \"name\": image_context[\"image_name\"],"},{"line_number":163,"context_line":"                \"min_ram\": image_context.get(\"min_ram\", 0),"},{"line_number":164,"context_line":"                \"min_disk\": image_context.get(\"min_disk\", 0),"},{"line_number":165,"context_line":"                \"size\": image_context.get(\"min_disk\", 0)"},{"line_number":166,"context_line":"            }"},{"line_number":167,"context_line":"            return (ValidationResult(), image)"}],"source_content_type":"text/x-python","patch_set":58,"id":"da86d52c_7193f5a2","line":164,"in_reply_to":"da86d52c_cf04041a","updated":"2015-02-12 15:57:26.000000000","message":"As we see in this link http://docs.openstack.org/user-guide/content/cli_manage_images.html its image parameters. As I understand flavor context create ram, for example, for all images and then we check is this memory enough to boot image.","commit_id":"0112ebb2dec6a7c9a3280814a89bd1ce60cd405d"},{"author":{"_account_id":10475,"name":"Alexander Maretskiy","email":"amaretskiy@mirantis.com","username":"maretskiy"},"change_message_id":"93afa901c36385137524f6580334197cbf7cda5c","unresolved":false,"context_lines":[{"line_number":155,"context_line":"    image_context \u003d config.get(\"context\", {}).get(\"images\", {})"},{"line_number":156,"context_line":"    image_value \u003d config.get(\"args\", {}).get(param_name)"},{"line_number":157,"context_line":""},{"line_number":158,"context_line":"    if image_context and image_context.get(\"image_name\", None):"},{"line_number":159,"context_line":"        if (image_context[\"image_name\"] \u003d\u003d"},{"line_number":160,"context_line":"                image_value[\"name\"].rstrip(string.digits)):"},{"line_number":161,"context_line":"            image \u003d {"}],"source_content_type":"text/x-python","patch_set":62,"id":"ba7be1f8_6ed59942","line":158,"updated":"2015-02-20 11:55:23.000000000","message":"This can be simplified to:\n\n if image_context.get(\"image_name\"):","commit_id":"813e5520099d7cfbdc35f8557bd2294450796a87"},{"author":{"_account_id":12395,"name":"Roman Vasylets","email":"pomeo92@gmail.com","username":"rvasilets"},"change_message_id":"1bc3f4aaddc454cde7ad99d6047cd4ebfdb3fc11","unresolved":false,"context_lines":[{"line_number":155,"context_line":"    image_context \u003d config.get(\"context\", {}).get(\"images\", {})"},{"line_number":156,"context_line":"    image_value \u003d config.get(\"args\", {}).get(param_name)"},{"line_number":157,"context_line":""},{"line_number":158,"context_line":"    if image_context and image_context.get(\"image_name\", None):"},{"line_number":159,"context_line":"        if (image_context[\"image_name\"] \u003d\u003d"},{"line_number":160,"context_line":"                image_value[\"name\"].rstrip(string.digits)):"},{"line_number":161,"context_line":"            image \u003d {"}],"source_content_type":"text/x-python","patch_set":62,"id":"ba7be1f8_2f90fbeb","line":158,"in_reply_to":"ba7be1f8_6ed59942","updated":"2015-02-20 13:35:04.000000000","message":"Done","commit_id":"813e5520099d7cfbdc35f8557bd2294450796a87"},{"author":{"_account_id":9545,"name":"Andriy Kurilin","email":"andr.kurilin@gmail.com","username":"akurilin"},"change_message_id":"88988fd5b20cb982e52114715c6021f072d3e379","unresolved":false,"context_lines":[{"line_number":175,"context_line":"    try:"},{"line_number":176,"context_line":"        image_id \u003d types.ImageResourceType.transform("},{"line_number":177,"context_line":"            clients\u003dclients, resource_config\u003dimage_value)"},{"line_number":178,"context_line":"        image \u003d clients.glance().images.get(image\u003dimage_id).to_dict()"},{"line_number":179,"context_line":"        return (ValidationResult(True), image)"},{"line_number":180,"context_line":"    except (glance_exc.HTTPNotFound, exceptions.InvalidScenarioArgument):"},{"line_number":181,"context_line":"        message \u003d _(\"Image \u0027%s\u0027 not found\") % image_value"}],"source_content_type":"text/x-python","patch_set":62,"id":"ba7be1f8_74d80654","line":178,"updated":"2015-02-20 12:37:50.000000000","message":"why we need this change?","commit_id":"813e5520099d7cfbdc35f8557bd2294450796a87"},{"author":{"_account_id":12395,"name":"Roman Vasylets","email":"pomeo92@gmail.com","username":"rvasilets"},"change_message_id":"1bc3f4aaddc454cde7ad99d6047cd4ebfdb3fc11","unresolved":false,"context_lines":[{"line_number":175,"context_line":"    try:"},{"line_number":176,"context_line":"        image_id \u003d types.ImageResourceType.transform("},{"line_number":177,"context_line":"            clients\u003dclients, resource_config\u003dimage_value)"},{"line_number":178,"context_line":"        image \u003d clients.glance().images.get(image\u003dimage_id).to_dict()"},{"line_number":179,"context_line":"        return (ValidationResult(True), image)"},{"line_number":180,"context_line":"    except (glance_exc.HTTPNotFound, exceptions.InvalidScenarioArgument):"},{"line_number":181,"context_line":"        message \u003d _(\"Image \u0027%s\u0027 not found\") % image_value"}],"source_content_type":"text/x-python","patch_set":62,"id":"ba7be1f8_2fa71b51","line":178,"in_reply_to":"ba7be1f8_74d80654","updated":"2015-02-20 13:35:04.000000000","message":"Because Boris don\u0027t won\u0027t to use Image object that is return and in the master code we use it as a dict","commit_id":"813e5520099d7cfbdc35f8557bd2294450796a87"},{"author":{"_account_id":7369,"name":"Sergey Skripnick","email":"sskripnick@mirantis.com","username":"redixin"},"change_message_id":"ff904542d22ac55d4bb6f2d95167a03ef365c2f7","unresolved":false,"context_lines":[{"line_number":155,"context_line":"    image_context \u003d config.get(\"context\", {}).get(\"images\", {})"},{"line_number":156,"context_line":"    image_value \u003d config.get(\"args\", {}).get(param_name)"},{"line_number":157,"context_line":""},{"line_number":158,"context_line":"    if image_context.get(\"image_name\"):"},{"line_number":159,"context_line":"        if (image_context[\"image_name\"] \u003d\u003d"},{"line_number":160,"context_line":"                image_value[\"name\"].rstrip(string.digits)):"},{"line_number":161,"context_line":"            image \u003d {"}],"source_content_type":"text/x-python","patch_set":65,"id":"ba7be1f8_92c35c56","line":158,"updated":"2015-02-24 14:46:06.000000000","message":"This would be more clear:\n\n image_name \u003d image_context.get(\"image_name\"):\n if image_name \u003d\u003d image_value[\"name\"].rstrip(string.digits)):\n   ...\n\nor even use image_conetxt.get inline, but this does not fit in one line","commit_id":"c769f7140cc699aa418d4da6ed308dec724784e8"},{"author":{"_account_id":7369,"name":"Sergey Skripnick","email":"sskripnick@mirantis.com","username":"redixin"},"change_message_id":"ff904542d22ac55d4bb6f2d95167a03ef365c2f7","unresolved":false,"context_lines":[{"line_number":162,"context_line":"                \"name\": image_context[\"image_name\"],"},{"line_number":163,"context_line":"                \"size\": image_context.get(\"min_disk\", 0)"},{"line_number":164,"context_line":"            }"},{"line_number":165,"context_line":"            return (ValidationResult(), image)"},{"line_number":166,"context_line":""},{"line_number":167,"context_line":"        msg \u003d (_(\"Image names are not the same. %s \""},{"line_number":168,"context_line":"                 \"is from context and %s is from task config\") %"}],"source_content_type":"text/x-python","patch_set":65,"id":"ba7be1f8_0d5bd12e","line":165,"updated":"2015-02-24 14:46:06.000000000","message":"ValidationResult have required argument is_valid. There is should be something between parentheses (True?)","commit_id":"c769f7140cc699aa418d4da6ed308dec724784e8"}],"rally/common/fileutils.py":[{"author":{"_account_id":7369,"name":"Sergey Skripnick","email":"sskripnick@mirantis.com","username":"redixin"},"change_message_id":"333a0d6686db6e8bf588900d137c9a89add5acfb","unresolved":false,"context_lines":[{"line_number":89,"context_line":"    \"\"\"Zip content of the source folder without root directory"},{"line_number":90,"context_line":""},{"line_number":91,"context_line":"    :param source_directory: Path to the folder that we archive"},{"line_number":92,"context_line":"    :param temp_dir: Temporary path to zip archive"},{"line_number":93,"context_line":"    \"\"\""},{"line_number":94,"context_line":"    zipf \u003d zipfile.ZipFile(temp_dir, mode\u003d\"w\")"},{"line_number":95,"context_line":"    for root, dirs, files in os.walk(source_directory):"}],"source_content_type":"text/x-python","patch_set":82,"id":"9a80dd14_fedde970","line":92,"updated":"2015-03-20 17:51:23.000000000","message":"Why it is called temp_dir? It is not directory, it is destination file.","commit_id":"8e3778331047decd21274c0de7a0c7ab6c7b8177"},{"author":{"_account_id":12395,"name":"Roman Vasylets","email":"pomeo92@gmail.com","username":"rvasilets"},"change_message_id":"7cccd1b2eb84dc6c6274be1e82f9aa17867ee64e","unresolved":false,"context_lines":[{"line_number":89,"context_line":"    \"\"\"Zip content of the source folder without root directory"},{"line_number":90,"context_line":""},{"line_number":91,"context_line":"    :param source_directory: Path to the folder that we archive"},{"line_number":92,"context_line":"    :param temp_dir: Temporary path to zip archive"},{"line_number":93,"context_line":"    \"\"\""},{"line_number":94,"context_line":"    zipf \u003d zipfile.ZipFile(temp_dir, mode\u003d\"w\")"},{"line_number":95,"context_line":"    for root, dirs, files in os.walk(source_directory):"}],"source_content_type":"text/x-python","patch_set":82,"id":"9a80dd14_1a1d60be","line":92,"in_reply_to":"9a80dd14_fedde970","updated":"2015-03-20 21:39:55.000000000","message":"Agree","commit_id":"8e3778331047decd21274c0de7a0c7ab6c7b8177"},{"author":{"_account_id":10475,"name":"Alexander Maretskiy","email":"amaretskiy@mirantis.com","username":"maretskiy"},"change_message_id":"0d10cb1c8e879c5eb50ccf7b4fa3fbf1fe65d4b1","unresolved":false,"context_lines":[{"line_number":89,"context_line":"    \"\"\"Zip content of the source folder without root directory"},{"line_number":90,"context_line":""},{"line_number":91,"context_line":"    :param source_directory: Path to the folder that we archive"},{"line_number":92,"context_line":"    :param zip_file: Temporary path to zip archive"},{"line_number":93,"context_line":"    \"\"\""},{"line_number":94,"context_line":"    zipf \u003d zipfile.ZipFile(zip_file, mode\u003d\"w\")"},{"line_number":95,"context_line":"    for root, dirs, files in os.walk(source_directory):"}],"source_content_type":"text/x-python","patch_set":84,"id":"1a6ced46_0de31006","line":92,"updated":"2015-03-24 11:20:18.000000000","message":"Why `Temporary\u0027? This function don\u0027t know anything about zip_file purposes, its just doing zipping.\n\n :param zip_file: path to zip archive","commit_id":"5db7a6d9814594e3da353e616b1d226b00d893b1"},{"author":{"_account_id":12395,"name":"Roman Vasylets","email":"pomeo92@gmail.com","username":"rvasilets"},"change_message_id":"41e5e1c911559c99a5f22ce773b1d7acf1dfb02b","unresolved":false,"context_lines":[{"line_number":89,"context_line":"    \"\"\"Zip content of the source folder without root directory"},{"line_number":90,"context_line":""},{"line_number":91,"context_line":"    :param source_directory: Path to the folder that we archive"},{"line_number":92,"context_line":"    :param zip_file: Temporary path to zip archive"},{"line_number":93,"context_line":"    \"\"\""},{"line_number":94,"context_line":"    zipf \u003d zipfile.ZipFile(zip_file, mode\u003d\"w\")"},{"line_number":95,"context_line":"    for root, dirs, files in os.walk(source_directory):"}],"source_content_type":"text/x-python","patch_set":84,"id":"1a6ced46_dde521a9","line":92,"in_reply_to":"1a6ced46_0de31006","updated":"2015-03-24 14:52:58.000000000","message":"Agree","commit_id":"5db7a6d9814594e3da353e616b1d226b00d893b1"},{"author":{"_account_id":10475,"name":"Alexander Maretskiy","email":"amaretskiy@mirantis.com","username":"maretskiy"},"change_message_id":"0d10cb1c8e879c5eb50ccf7b4fa3fbf1fe65d4b1","unresolved":false,"context_lines":[{"line_number":91,"context_line":"    :param source_directory: Path to the folder that we archive"},{"line_number":92,"context_line":"    :param zip_file: Temporary path to zip archive"},{"line_number":93,"context_line":"    \"\"\""},{"line_number":94,"context_line":"    zipf \u003d zipfile.ZipFile(zip_file, mode\u003d\"w\")"},{"line_number":95,"context_line":"    for root, dirs, files in os.walk(source_directory):"},{"line_number":96,"context_line":"        for f in files:"},{"line_number":97,"context_line":"            abspath \u003d os.path.join(root, f)"}],"source_content_type":"text/x-python","patch_set":84,"id":"1a6ced46_ed02343d","line":94,"updated":"2015-03-24 11:20:18.000000000","message":"This implementation does not protect from exceptions raised in `for\u0027 statements, so in case of exception there will be broken/incomplete zip file on filesystem.\n\nI recommend using `width\u0027 statement instead, here is a complete function:\n\n def pack_dir(source_dir, zip_file):\n     \"\"\"Make zip archive from directory content\n\n     :param source_dir: path to directory with content for archiving\n     :param zip_file: path to zip archive\n     \"\"\"\n     with zipfile.ZipFile(zip_file, mode\u003d\"w\") as zipf:\n         for root, dirs, files in os.walk(source_dir):\n             for f in files:\n                 abspath \u003d os.path.join(root, f)\n                 relpath \u003d os.path.relpath(abspath, source_dir)\n                 zipf.write(abspath, relpath)","commit_id":"5db7a6d9814594e3da353e616b1d226b00d893b1"},{"author":{"_account_id":12395,"name":"Roman Vasylets","email":"pomeo92@gmail.com","username":"rvasilets"},"change_message_id":"10581f8bde7048eacede0fdb47d5be3acdd156aa","unresolved":false,"context_lines":[{"line_number":91,"context_line":"    :param source_directory: Path to the folder that we archive"},{"line_number":92,"context_line":"    :param zip_file: Temporary path to zip archive"},{"line_number":93,"context_line":"    \"\"\""},{"line_number":94,"context_line":"    zipf \u003d zipfile.ZipFile(zip_file, mode\u003d\"w\")"},{"line_number":95,"context_line":"    for root, dirs, files in os.walk(source_directory):"},{"line_number":96,"context_line":"        for f in files:"},{"line_number":97,"context_line":"            abspath \u003d os.path.join(root, f)"}],"source_content_type":"text/x-python","patch_set":84,"id":"1a6ced46_69670a26","line":94,"in_reply_to":"1a6ced46_69862a67","updated":"2015-03-25 16:02:40.000000000","message":"Done","commit_id":"5db7a6d9814594e3da353e616b1d226b00d893b1"},{"author":{"_account_id":10475,"name":"Alexander Maretskiy","email":"amaretskiy@mirantis.com","username":"maretskiy"},"change_message_id":"9711986109eb24398958d8a1148cc729caa9bbee","unresolved":false,"context_lines":[{"line_number":91,"context_line":"    :param source_directory: Path to the folder that we archive"},{"line_number":92,"context_line":"    :param zip_file: Temporary path to zip archive"},{"line_number":93,"context_line":"    \"\"\""},{"line_number":94,"context_line":"    zipf \u003d zipfile.ZipFile(zip_file, mode\u003d\"w\")"},{"line_number":95,"context_line":"    for root, dirs, files in os.walk(source_directory):"},{"line_number":96,"context_line":"        for f in files:"},{"line_number":97,"context_line":"            abspath \u003d os.path.join(root, f)"}],"source_content_type":"text/x-python","patch_set":84,"id":"1a6ced46_69862a67","line":94,"in_reply_to":"1a6ced46_92cab04d","updated":"2015-03-24 15:19:57.000000000","message":"So use try/finally","commit_id":"5db7a6d9814594e3da353e616b1d226b00d893b1"},{"author":{"_account_id":12395,"name":"Roman Vasylets","email":"pomeo92@gmail.com","username":"rvasilets"},"change_message_id":"41e5e1c911559c99a5f22ce773b1d7acf1dfb02b","unresolved":false,"context_lines":[{"line_number":91,"context_line":"    :param source_directory: Path to the folder that we archive"},{"line_number":92,"context_line":"    :param zip_file: Temporary path to zip archive"},{"line_number":93,"context_line":"    \"\"\""},{"line_number":94,"context_line":"    zipf \u003d zipfile.ZipFile(zip_file, mode\u003d\"w\")"},{"line_number":95,"context_line":"    for root, dirs, files in os.walk(source_directory):"},{"line_number":96,"context_line":"        for f in files:"},{"line_number":97,"context_line":"            abspath \u003d os.path.join(root, f)"}],"source_content_type":"text/x-python","patch_set":84,"id":"1a6ced46_92cab04d","line":94,"in_reply_to":"1a6ced46_ed02343d","updated":"2015-03-24 14:52:58.000000000","message":"Context manager for zipfile is working from python 2.7","commit_id":"5db7a6d9814594e3da353e616b1d226b00d893b1"}],"rally/common/utils.py":[{"author":{"_account_id":10475,"name":"Alexander Maretskiy","email":"amaretskiy@mirantis.com","username":"maretskiy"},"change_message_id":"226a7f1f8d67f78fd94c634874fabbe9ecf1b32a","unresolved":false,"context_lines":[{"line_number":453,"context_line":"    return prefix + rand_part"},{"line_number":454,"context_line":""},{"line_number":455,"context_line":""},{"line_number":456,"context_line":"def _zipdir(path, zipf):"},{"line_number":457,"context_line":"    for root, dirs, files in os.walk(path):"},{"line_number":458,"context_line":"        for f in files:"},{"line_number":459,"context_line":"            abspath \u003d os.path.join(root, f)"}],"source_content_type":"text/x-python","patch_set":58,"id":"da86d52c_cf87a35f","line":456,"updated":"2015-02-12 11:54:51.000000000","message":"Move _zipdir body into pack_dir, because this function is used only by pack_dir and looks to be for private use only","commit_id":"0112ebb2dec6a7c9a3280814a89bd1ce60cd405d"},{"author":{"_account_id":10475,"name":"Alexander Maretskiy","email":"amaretskiy@mirantis.com","username":"maretskiy"},"change_message_id":"93afa901c36385137524f6580334197cbf7cda5c","unresolved":false,"context_lines":[{"line_number":455,"context_line":""},{"line_number":456,"context_line":"def pack_dir(source_directory, temp_dir):"},{"line_number":457,"context_line":""},{"line_number":458,"context_line":"    def _zipdir(path, zipf):"},{"line_number":459,"context_line":"        for root, dirs, files in os.walk(path):"},{"line_number":460,"context_line":"            for f in files:"},{"line_number":461,"context_line":"                abspath \u003d os.path.join(root, f)"}],"source_content_type":"text/x-python","patch_set":62,"id":"ba7be1f8_ce1f6508","line":458,"updated":"2015-02-20 11:55:23.000000000","message":"_zip_dir is 1) simple 2) only in function namespace 3) called only once 4) no plans to extend code to call _zip_dir more times\n\nSo, there is no sense to have this separate _zip_dir function\n\nResult:\n\n def pack_dir(src_dir, temp_dir):\n    \"\"\"TBD docstring here.\"\"\"\n    zipf \u003d zipfile.ZipFile(temp_dir, mode\u003d\"w\")\n    for root, dirs, files in os.walk(src_dir):\n        for f in files:\n            abspath \u003d os.path.join(root, f)\n            relpath \u003d os.path.relpath(abspath, src_dir)\n            zipf.write(abspath, relpath)\n    zipf.close()","commit_id":"813e5520099d7cfbdc35f8557bd2294450796a87"},{"author":{"_account_id":12395,"name":"Roman Vasylets","email":"pomeo92@gmail.com","username":"rvasilets"},"change_message_id":"1bc3f4aaddc454cde7ad99d6047cd4ebfdb3fc11","unresolved":false,"context_lines":[{"line_number":455,"context_line":""},{"line_number":456,"context_line":"def pack_dir(source_directory, temp_dir):"},{"line_number":457,"context_line":""},{"line_number":458,"context_line":"    def _zipdir(path, zipf):"},{"line_number":459,"context_line":"        for root, dirs, files in os.walk(path):"},{"line_number":460,"context_line":"            for f in files:"},{"line_number":461,"context_line":"                abspath \u003d os.path.join(root, f)"}],"source_content_type":"text/x-python","patch_set":62,"id":"ba7be1f8_01f86b7b","line":458,"in_reply_to":"ba7be1f8_ce1f6508","updated":"2015-02-20 13:35:04.000000000","message":"Done","commit_id":"813e5520099d7cfbdc35f8557bd2294450796a87"},{"author":{"_account_id":6172,"name":"Boris Pavlovic","email":"boris@pavlovic.me","username":"boris-42"},"change_message_id":"59cf3b42498e7e7630c997f3999640149a756ed2","unresolved":false,"context_lines":[{"line_number":453,"context_line":"    return prefix + rand_part"},{"line_number":454,"context_line":""},{"line_number":455,"context_line":""},{"line_number":456,"context_line":"def pack_dir(source_directory, temp_dir):"},{"line_number":457,"context_line":"    \"\"\"Zip content of the source folder without root directory"},{"line_number":458,"context_line":""},{"line_number":459,"context_line":"    :param source_directory: Path to the folder that we archive"}],"source_content_type":"text/x-python","patch_set":68,"id":"ba7be1f8_42614ca7","line":456,"updated":"2015-02-28 23:52:15.000000000","message":"Wrong module for such method it should be in\n\n  rally/common/fileutils.py","commit_id":"2f3fd3ae05395181a382cbdb088929f94910e2b4"}],"rally/consts.py":[{"author":{"_account_id":6172,"name":"Boris Pavlovic","email":"boris@pavlovic.me","username":"boris-42"},"change_message_id":"59cf3b42498e7e7630c997f3999640149a756ed2","unresolved":false,"context_lines":[{"line_number":36,"context_line":"    ORCHESTRATION \u003d \"orchestration\""},{"line_number":37,"context_line":"    TELEMETRY \u003d \"telemetry\""},{"line_number":38,"context_line":"    VOLUME \u003d \"volume\""},{"line_number":39,"context_line":"    APPLICATION_CATALOG \u003d \"application_catalog\""},{"line_number":40,"context_line":""},{"line_number":41,"context_line":""},{"line_number":42,"context_line":"class _TempestTestsSets(utils.ImmutableMixin, utils.EnumMixin):"}],"source_content_type":"text/x-python","patch_set":68,"id":"ba7be1f8_625810fb","line":39,"updated":"2015-02-28 23:52:15.000000000","message":"Split adding Murano client in separated patch. So we will simplify reviewers life.","commit_id":"2f3fd3ae05395181a382cbdb088929f94910e2b4"}],"rally/exceptions.py":[{"author":{"_account_id":10475,"name":"Alexander Maretskiy","email":"amaretskiy@mirantis.com","username":"maretskiy"},"change_message_id":"89654166c440b29212446c7621deb28a818d4eca","unresolved":false,"context_lines":[{"line_number":151,"context_line":"    msg_fmt \u003d _(\"There is no role with name `%(role)s`.\")"},{"line_number":152,"context_line":""},{"line_number":153,"context_line":""},{"line_number":154,"context_line":"class NoSuchFolder(NotFoundException):"},{"line_number":155,"context_line":"    msg_fmt \u003d _(\"There is no such folder `%(folder)s`.\")"},{"line_number":156,"context_line":""},{"line_number":157,"context_line":""}],"source_content_type":"text/x-python","patch_set":64,"id":"ba7be1f8_b159705d","line":154,"updated":"2015-02-23 14:49:38.000000000","message":"1) No sense to inherit from NotFoundException - this is useless\n\n2) Use word `Folder\u0027 is confusing - this is a Windows term. I recommend to use `Directory\u0027 instead","commit_id":"c543d5834b4fcb309fd9dd27ac4c951f8092acc8"},{"author":{"_account_id":12395,"name":"Roman Vasylets","email":"pomeo92@gmail.com","username":"rvasilets"},"change_message_id":"0b143dfc368c7c2552b8baad1aba04a5655ffca5","unresolved":false,"context_lines":[{"line_number":151,"context_line":"    msg_fmt \u003d _(\"There is no role with name `%(role)s`.\")"},{"line_number":152,"context_line":""},{"line_number":153,"context_line":""},{"line_number":154,"context_line":"class NoSuchFolder(NotFoundException):"},{"line_number":155,"context_line":"    msg_fmt \u003d _(\"There is no such folder `%(folder)s`.\")"},{"line_number":156,"context_line":""},{"line_number":157,"context_line":""}],"source_content_type":"text/x-python","patch_set":64,"id":"ba7be1f8_885ede10","line":154,"in_reply_to":"ba7be1f8_b159705d","updated":"2015-02-24 09:02:09.000000000","message":"I thing we need to use exception like other for uniformity. If we don\u0027t so we can make a bug report.","commit_id":"c543d5834b4fcb309fd9dd27ac4c951f8092acc8"}],"rally/osclients.py":[{"author":{"_account_id":6172,"name":"Boris Pavlovic","email":"boris@pavlovic.me","username":"boris-42"},"change_message_id":"8534645b3d681903d9f538c9031bf4c53a867293","unresolved":false,"context_lines":[{"line_number":36,"context_line":"from rally import exceptions"},{"line_number":37,"context_line":"from rally import log as logging"},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"murano \u003d importutils.try_import(\"muranoclient.client\")"},{"line_number":40,"context_line":""},{"line_number":41,"context_line":"CONF \u003d cfg.CONF"},{"line_number":42,"context_line":"CONF.register_opts(["}],"source_content_type":"text/x-python","patch_set":35,"id":"3a961159_f00bb8d2","line":39,"updated":"2015-01-05 20:45:18.000000000","message":"remove this code and import murano directly in method that returns client.","commit_id":"0ab3e99be22122e7c8618c8eb0035bb9c0c55bd9"},{"author":{"_account_id":10475,"name":"Alexander Maretskiy","email":"amaretskiy@mirantis.com","username":"maretskiy"},"change_message_id":"226a7f1f8d67f78fd94c634874fabbe9ecf1b32a","unresolved":false,"context_lines":[{"line_number":279,"context_line":"        from muranoclient import client as murano"},{"line_number":280,"context_line":"        kc \u003d self.keystone()"},{"line_number":281,"context_line":"        murano_url \u003d kc.service_catalog.url_for("},{"line_number":282,"context_line":"            service_type\u003d\"application_catalog\","},{"line_number":283,"context_line":"            endpoint_type\u003dself.endpoint.endpoint_type,"},{"line_number":284,"context_line":"            region_name\u003dself.endpoint.region_name"},{"line_number":285,"context_line":"        )"}],"source_content_type":"text/x-python","patch_set":58,"id":"da86d52c_afd26f59","line":282,"updated":"2015-02-12 11:54:51.000000000","message":"use rally.consts here","commit_id":"0112ebb2dec6a7c9a3280814a89bd1ce60cd405d"},{"author":{"_account_id":10475,"name":"Alexander Maretskiy","email":"amaretskiy@mirantis.com","username":"maretskiy"},"change_message_id":"fd4ffa8193bac06ee9526754ef828af12fbe35a5","unresolved":false,"context_lines":[{"line_number":279,"context_line":"        from muranoclient import client as murano"},{"line_number":280,"context_line":"        kc \u003d self.keystone()"},{"line_number":281,"context_line":"        murano_url \u003d kc.service_catalog.url_for("},{"line_number":282,"context_line":"            service_type\u003dconsts._ServiceType.APPLICATION_CATALOG,"},{"line_number":283,"context_line":"            endpoint_type\u003dself.endpoint.endpoint_type,"},{"line_number":284,"context_line":"            region_name\u003dself.endpoint.region_name"},{"line_number":285,"context_line":"        )"}],"source_content_type":"text/x-python","patch_set":59,"id":"da86d52c_b839a541","line":282,"updated":"2015-02-13 10:56:31.000000000","message":"s/_ServiceType/ServiceType/","commit_id":"c68588feff2af90cc5f73484b4ffb8648ad82f37"}],"tests/unit/benchmark/context/test_murano.py":[{"author":{"_account_id":9545,"name":"Andriy Kurilin","email":"andr.kurilin@gmail.com","username":"akurilin"},"change_message_id":"87842614976c572b80849127d6b37d8a4c623c56","unresolved":false,"context_lines":[{"line_number":72,"context_line":"    @mock.patch(\"six.moves.StringIO\")"},{"line_number":73,"context_line":"    def test_setup(self, mock_io, mock_requests, mock_clients):"},{"line_number":74,"context_line":"        mock_requests.get.return_value \u003d mock.Mock(content\u003d\"foo_app_data\")"},{"line_number":75,"context_line":"        mock_app \u003d mock.Mock()"},{"line_number":76,"context_line":"        mock_io.return_value \u003d mock_app"},{"line_number":77,"context_line":"        (mock_clients.Clients().murano()."},{"line_number":78,"context_line":"            packages.create.return_value) \u003d mock.Mock(id\u003d\"foo_app_id\")"}],"source_content_type":"text/x-python","patch_set":32,"id":"3a961159_620f1e89","line":75,"updated":"2015-01-03 16:12:30.000000000","message":"mock object will return same object(new mock object) for every call, so lines 75-76 are redundant. At L92 you can use mock_io() instead of mock_app","commit_id":"e06d60dda8beaab6f9307734923b844b929f9225"},{"author":{"_account_id":9545,"name":"Andriy Kurilin","email":"andr.kurilin@gmail.com","username":"akurilin"},"change_message_id":"87842614976c572b80849127d6b37d8a4c623c56","unresolved":false,"context_lines":[{"line_number":101,"context_line":"        murano.Murano(self.context).cleanup()"},{"line_number":102,"context_line":"        count \u003d (self.context.get(\"packages_per_tenant\", 1) *"},{"line_number":103,"context_line":"                 len(self.context[\"tenants\"]))"},{"line_number":104,"context_line":"        self.assertEqual(count, mock_delete.call_count)"}],"source_content_type":"text/x-python","patch_set":32,"id":"3a961159_c21ff2b5","line":104,"updated":"2015-01-03 16:12:30.000000000","message":"why we need extra variable \"mock_delete\"? why not use mock_clients.Clients().packages.delete.call_count directly?","commit_id":"e06d60dda8beaab6f9307734923b844b929f9225"},{"author":{"_account_id":8507,"name":"Mikhail Dubov","email":"mdubov@mirantis.com","username":"msdubov"},"change_message_id":"49bf539ddbbdd750ae9e274873a9943146647731","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright 2014: Mirantis Inc."},{"line_number":2,"context_line":"# All Rights Reserved."},{"line_number":3,"context_line":"#"},{"line_number":4,"context_line":"# Licensed under the Apache License, Version 2.0 (the \"License\"); you may"}],"source_content_type":"text/x-python","patch_set":69,"id":"9a80dd14_dc539f6a","line":1,"updated":"2015-03-04 14:13:09.000000000","message":"2015 :)","commit_id":"1897d8935d76923e8e4c19253cce6ea08953eb06"},{"author":{"_account_id":6172,"name":"Boris Pavlovic","email":"boris@pavlovic.me","username":"boris-42"},"change_message_id":"0eb8c31cda5fa203935c66414d73272752448f37","unresolved":false,"context_lines":[{"line_number":25,"context_line":""},{"line_number":26,"context_line":"    def setUp(self):"},{"line_number":27,"context_line":"        super(MuranoGeneratorTestCase, self).setUp()"},{"line_number":28,"context_line":"        self.context \u003d {"},{"line_number":29,"context_line":"            \"config\": {"},{"line_number":30,"context_line":"                \"users\": {"},{"line_number":31,"context_line":"                    \"tenants\": 2,"}],"source_content_type":"text/x-python","patch_set":104,"id":"1aca2d91_4822cfba","line":28,"updated":"2015-05-08 00:18:00.000000000","message":"Don\u0027t share this via self.context create method: \n\n\n  def _get_context() and use it","commit_id":"24a78d7e49cb36b619ba3393f5daa5a53b347185"},{"author":{"_account_id":12395,"name":"Roman Vasylets","email":"pomeo92@gmail.com","username":"rvasilets"},"change_message_id":"2423eb22b5f027203d21626a1f9069cba0efd757","unresolved":false,"context_lines":[{"line_number":25,"context_line":""},{"line_number":26,"context_line":"    def setUp(self):"},{"line_number":27,"context_line":"        super(MuranoGeneratorTestCase, self).setUp()"},{"line_number":28,"context_line":"        self.context \u003d {"},{"line_number":29,"context_line":"            \"config\": {"},{"line_number":30,"context_line":"                \"users\": {"},{"line_number":31,"context_line":"                    \"tenants\": 2,"}],"source_content_type":"text/x-python","patch_set":104,"id":"1aca2d91_b45f70e4","line":28,"in_reply_to":"1aca2d91_4822cfba","updated":"2015-05-08 12:05:06.000000000","message":"Done","commit_id":"24a78d7e49cb36b619ba3393f5daa5a53b347185"},{"author":{"_account_id":6172,"name":"Boris Pavlovic","email":"boris@pavlovic.me","username":"boris-42"},"change_message_id":"0eb8c31cda5fa203935c66414d73272752448f37","unresolved":false,"context_lines":[{"line_number":47,"context_line":"            \"tenants\": self._gen_tenants()"},{"line_number":48,"context_line":"        }"},{"line_number":49,"context_line":""},{"line_number":50,"context_line":"    def _gen_packages(self, count\u003d1):"},{"line_number":51,"context_line":"        packages \u003d ["},{"line_number":52,"context_line":"            {\"package_id\": \"uuid%d\" % i, \"endpoint\": \"endpoint\"}"},{"line_number":53,"context_line":"            for i in range(count)]"}],"source_content_type":"text/x-python","patch_set":104,"id":"1aca2d91_c81c9f79","line":50,"updated":"2015-05-08 00:18:00.000000000","message":"yoYou are using only once this method please just get rid of it (move this logic tog get_context","commit_id":"24a78d7e49cb36b619ba3393f5daa5a53b347185"},{"author":{"_account_id":12395,"name":"Roman Vasylets","email":"pomeo92@gmail.com","username":"rvasilets"},"change_message_id":"2423eb22b5f027203d21626a1f9069cba0efd757","unresolved":false,"context_lines":[{"line_number":47,"context_line":"            \"tenants\": self._gen_tenants()"},{"line_number":48,"context_line":"        }"},{"line_number":49,"context_line":""},{"line_number":50,"context_line":"    def _gen_packages(self, count\u003d1):"},{"line_number":51,"context_line":"        packages \u003d ["},{"line_number":52,"context_line":"            {\"package_id\": \"uuid%d\" % i, \"endpoint\": \"endpoint\"}"},{"line_number":53,"context_line":"            for i in range(count)]"}],"source_content_type":"text/x-python","patch_set":104,"id":"1aca2d91_146f4493","line":50,"in_reply_to":"1aca2d91_c81c9f79","updated":"2015-05-08 12:05:06.000000000","message":"Done","commit_id":"24a78d7e49cb36b619ba3393f5daa5a53b347185"},{"author":{"_account_id":6172,"name":"Boris Pavlovic","email":"boris@pavlovic.me","username":"boris-42"},"change_message_id":"0eb8c31cda5fa203935c66414d73272752448f37","unresolved":false,"context_lines":[{"line_number":53,"context_line":"            for i in range(count)]"},{"line_number":54,"context_line":"        return packages"},{"line_number":55,"context_line":""},{"line_number":56,"context_line":"    def _gen_tenants(self, count\u003d2):"},{"line_number":57,"context_line":"        tenants \u003d {}"},{"line_number":58,"context_line":"        for i in range(count):"},{"line_number":59,"context_line":"            tenant_id \u003d \"tenant_%d\" % i"}],"source_content_type":"text/x-python","patch_set":104,"id":"1aca2d91_e8199b89","line":56,"updated":"2015-05-08 00:18:00.000000000","message":"You are using only once this method please just get rid of it (move this logic tog get_context","commit_id":"24a78d7e49cb36b619ba3393f5daa5a53b347185"},{"author":{"_account_id":12395,"name":"Roman Vasylets","email":"pomeo92@gmail.com","username":"rvasilets"},"change_message_id":"2423eb22b5f027203d21626a1f9069cba0efd757","unresolved":false,"context_lines":[{"line_number":53,"context_line":"            for i in range(count)]"},{"line_number":54,"context_line":"        return packages"},{"line_number":55,"context_line":""},{"line_number":56,"context_line":"    def _gen_tenants(self, count\u003d2):"},{"line_number":57,"context_line":"        tenants \u003d {}"},{"line_number":58,"context_line":"        for i in range(count):"},{"line_number":59,"context_line":"            tenant_id \u003d \"tenant_%d\" % i"}],"source_content_type":"text/x-python","patch_set":104,"id":"1aca2d91_946234ac","line":56,"in_reply_to":"1aca2d91_e8199b89","updated":"2015-05-08 12:05:06.000000000","message":"Done","commit_id":"24a78d7e49cb36b619ba3393f5daa5a53b347185"},{"author":{"_account_id":6172,"name":"Boris Pavlovic","email":"boris@pavlovic.me","username":"boris-42"},"change_message_id":"0eb8c31cda5fa203935c66414d73272752448f37","unresolved":false,"context_lines":[{"line_number":60,"context_line":"            tenants[tenant_id] \u003d {\"name\": \"tenant_%d_name\" % i}"},{"line_number":61,"context_line":"        return tenants"},{"line_number":62,"context_line":""},{"line_number":63,"context_line":"    def _gen_users(self, count\u003d2):"},{"line_number":64,"context_line":"        users \u003d [{\"id\": \"user_%d\" % i,"},{"line_number":65,"context_line":"                  \"tenant_id\": \"tenant_%d\" % i,"},{"line_number":66,"context_line":"                  \"endpoint\": \"endpoint\"}"}],"source_content_type":"text/x-python","patch_set":104,"id":"1aca2d91_680eab3c","line":63,"updated":"2015-05-08 00:18:00.000000000","message":"same here","commit_id":"24a78d7e49cb36b619ba3393f5daa5a53b347185"},{"author":{"_account_id":12395,"name":"Roman Vasylets","email":"pomeo92@gmail.com","username":"rvasilets"},"change_message_id":"2423eb22b5f027203d21626a1f9069cba0efd757","unresolved":false,"context_lines":[{"line_number":60,"context_line":"            tenants[tenant_id] \u003d {\"name\": \"tenant_%d_name\" % i}"},{"line_number":61,"context_line":"        return tenants"},{"line_number":62,"context_line":""},{"line_number":63,"context_line":"    def _gen_users(self, count\u003d2):"},{"line_number":64,"context_line":"        users \u003d [{\"id\": \"user_%d\" % i,"},{"line_number":65,"context_line":"                  \"tenant_id\": \"tenant_%d\" % i,"},{"line_number":66,"context_line":"                  \"endpoint\": \"endpoint\"}"}],"source_content_type":"text/x-python","patch_set":104,"id":"1aca2d91_7459d8fd","line":63,"in_reply_to":"1aca2d91_680eab3c","updated":"2015-05-08 12:05:06.000000000","message":"Done","commit_id":"24a78d7e49cb36b619ba3393f5daa5a53b347185"}],"tests/unit/benchmark/test_validation.py":[{"author":{"_account_id":10475,"name":"Alexander Maretskiy","email":"amaretskiy@mirantis.com","username":"maretskiy"},"change_message_id":"93afa901c36385137524f6580334197cbf7cda5c","unresolved":false,"context_lines":[{"line_number":465,"context_line":"        result \u003d validator({}, clients, None)"},{"line_number":466,"context_line":"        self.assertFalse(result.is_valid, result.msg)"},{"line_number":467,"context_line":""},{"line_number":468,"context_line":"    def test_required_contexts(self):"},{"line_number":469,"context_line":"        validator \u003d self._unwrap_validator(validation.required_contexts,"},{"line_number":470,"context_line":"                                           \"c1\", \"c2\", \"c3\")"},{"line_number":471,"context_line":"        result \u003d validator({\"context\": {\"a\": 1}}, None, None)"}],"source_content_type":"text/x-python","patch_set":62,"id":"ba7be1f8_eefee937","side":"PARENT","line":468,"range":{"start_line":468,"start_character":13,"end_line":468,"end_character":30},"updated":"2015-02-20 11:55:23.000000000","message":"Why this test is removed?","commit_id":"7f468d83891cdfb6d2cd8619c6f13b72d0892bb9"},{"author":{"_account_id":12395,"name":"Roman Vasylets","email":"pomeo92@gmail.com","username":"rvasilets"},"change_message_id":"1bc3f4aaddc454cde7ad99d6047cd4ebfdb3fc11","unresolved":false,"context_lines":[{"line_number":465,"context_line":"        result \u003d validator({}, clients, None)"},{"line_number":466,"context_line":"        self.assertFalse(result.is_valid, result.msg)"},{"line_number":467,"context_line":""},{"line_number":468,"context_line":"    def test_required_contexts(self):"},{"line_number":469,"context_line":"        validator \u003d self._unwrap_validator(validation.required_contexts,"},{"line_number":470,"context_line":"                                           \"c1\", \"c2\", \"c3\")"},{"line_number":471,"context_line":"        result \u003d validator({\"context\": {\"a\": 1}}, None, None)"}],"source_content_type":"text/x-python","patch_set":62,"id":"ba7be1f8_21dacf78","side":"PARENT","line":468,"in_reply_to":"ba7be1f8_eefee937","updated":"2015-02-20 13:35:04.000000000","message":"Done","commit_id":"7f468d83891cdfb6d2cd8619c6f13b72d0892bb9"}],"tests/unit/common/test_fileutils.py":[{"author":{"_account_id":7369,"name":"Sergey Skripnick","email":"sskripnick@mirantis.com","username":"redixin"},"change_message_id":"333a0d6686db6e8bf588900d137c9a89add5acfb","unresolved":false,"context_lines":[{"line_number":51,"context_line":"            mock_file.return_value.write.assert_has_calls(calls)"},{"line_number":52,"context_line":""},{"line_number":53,"context_line":""},{"line_number":54,"context_line":"class PackDirTestCase(test.TestCase):"},{"line_number":55,"context_line":""},{"line_number":56,"context_line":"    def is_same(self, dir1, dir2):"},{"line_number":57,"context_line":"        \"\"\"Compare two directory trees content.\"\"\""}],"source_content_type":"text/x-python","patch_set":82,"id":"9a80dd14_beda9148","line":54,"updated":"2015-03-20 17:51:23.000000000","message":"This is not unit test.\n\nIn unittest zipfile and os.walk should be mocked. No real zip compression should be done. Just assert zipf.write was called with proper arguments.","commit_id":"8e3778331047decd21274c0de7a0c7ab6c7b8177"},{"author":{"_account_id":9180,"name":"Olga Kopylova","email":"olkonami@gmail.com","username":"olkonami"},"change_message_id":"86ad49827a601bb8e2c951c7caa2b58b2e97ed19","unresolved":false,"context_lines":[{"line_number":55,"context_line":"    @mock.patch(\"zipfile.ZipFile\")"},{"line_number":56,"context_line":"    def test_pack_dir(self, mock_zip, mock_walk):"},{"line_number":57,"context_line":"        try:"},{"line_number":58,"context_line":"            temp_dir1 \u003d tempfile.mkdtemp()"},{"line_number":59,"context_line":"            fileutils.pack_dir(\"rally-jobs/extra/murano/HelloReporter\","},{"line_number":60,"context_line":"                               os.path.join(temp_dir1, \"package.zip\"))"},{"line_number":61,"context_line":"            mock_zip.assert_called_once_with("}],"source_content_type":"text/x-python","patch_set":84,"id":"1a6ced46_bf8dde33","line":58,"updated":"2015-03-23 17:43:26.000000000","message":"we don\u0027t need to create real directory if we mock zipfile","commit_id":"5db7a6d9814594e3da353e616b1d226b00d893b1"},{"author":{"_account_id":12395,"name":"Roman Vasylets","email":"pomeo92@gmail.com","username":"rvasilets"},"change_message_id":"63015aee2c814a9812b350f7ac769a97063487c7","unresolved":false,"context_lines":[{"line_number":55,"context_line":"    @mock.patch(\"zipfile.ZipFile\")"},{"line_number":56,"context_line":"    def test_pack_dir(self, mock_zip, mock_walk):"},{"line_number":57,"context_line":"        try:"},{"line_number":58,"context_line":"            temp_dir1 \u003d tempfile.mkdtemp()"},{"line_number":59,"context_line":"            fileutils.pack_dir(\"rally-jobs/extra/murano/HelloReporter\","},{"line_number":60,"context_line":"                               os.path.join(temp_dir1, \"package.zip\"))"},{"line_number":61,"context_line":"            mock_zip.assert_called_once_with("}],"source_content_type":"text/x-python","patch_set":84,"id":"1a6ced46_2556e006","line":58,"in_reply_to":"1a6ced46_a8082a92","updated":"2015-03-25 16:42:45.000000000","message":"Done","commit_id":"5db7a6d9814594e3da353e616b1d226b00d893b1"},{"author":{"_account_id":12395,"name":"Roman Vasylets","email":"pomeo92@gmail.com","username":"rvasilets"},"change_message_id":"8b1e72be0072099e9bb5899c7cdae21f246a568d","unresolved":false,"context_lines":[{"line_number":55,"context_line":"    @mock.patch(\"zipfile.ZipFile\")"},{"line_number":56,"context_line":"    def test_pack_dir(self, mock_zip, mock_walk):"},{"line_number":57,"context_line":"        try:"},{"line_number":58,"context_line":"            temp_dir1 \u003d tempfile.mkdtemp()"},{"line_number":59,"context_line":"            fileutils.pack_dir(\"rally-jobs/extra/murano/HelloReporter\","},{"line_number":60,"context_line":"                               os.path.join(temp_dir1, \"package.zip\"))"},{"line_number":61,"context_line":"            mock_zip.assert_called_once_with("}],"source_content_type":"text/x-python","patch_set":84,"id":"1a6ced46_df1a956d","line":58,"in_reply_to":"1a6ced46_bf8dde33","updated":"2015-03-23 19:16:02.000000000","message":"This is really minor nit. Lets esit for another reviews","commit_id":"5db7a6d9814594e3da353e616b1d226b00d893b1"},{"author":{"_account_id":10475,"name":"Alexander Maretskiy","email":"amaretskiy@mirantis.com","username":"maretskiy"},"change_message_id":"0d10cb1c8e879c5eb50ccf7b4fa3fbf1fe65d4b1","unresolved":false,"context_lines":[{"line_number":55,"context_line":"    @mock.patch(\"zipfile.ZipFile\")"},{"line_number":56,"context_line":"    def test_pack_dir(self, mock_zip, mock_walk):"},{"line_number":57,"context_line":"        try:"},{"line_number":58,"context_line":"            temp_dir1 \u003d tempfile.mkdtemp()"},{"line_number":59,"context_line":"            fileutils.pack_dir(\"rally-jobs/extra/murano/HelloReporter\","},{"line_number":60,"context_line":"                               os.path.join(temp_dir1, \"package.zip\"))"},{"line_number":61,"context_line":"            mock_zip.assert_called_once_with("}],"source_content_type":"text/x-python","patch_set":84,"id":"1a6ced46_a8082a92","line":58,"in_reply_to":"1a6ced46_df1a956d","updated":"2015-03-24 11:20:18.000000000","message":"Olga is right, there is no need to create temporary directory\n\n1) use str value for temp_dir (for example \"foo_dir\")\n\n2) configure mock_walk to return iterator, here is an example how to do that:\n\n \u003e\u003e\u003e mock_walk.side_effect\u003d[[(\"foo_root\", [], [\"file1\", \"file2\", \"file3\"]),]]\n \u003e\u003e\u003e \n \u003e\u003e\u003e for root, dirs, files in mock_walk(): print root, dirs, files\n ... \n foo_root [] [\u0027file1\u0027, \u0027file2\u0027, \u0027file3\u0027]\n \u003e\u003e\u003e","commit_id":"5db7a6d9814594e3da353e616b1d226b00d893b1"}],"tests/unit/common/test_utils.py":[{"author":{"_account_id":10475,"name":"Alexander Maretskiy","email":"amaretskiy@mirantis.com","username":"maretskiy"},"change_message_id":"93afa901c36385137524f6580334197cbf7cda5c","unresolved":false,"context_lines":[{"line_number":475,"context_line":"    def is_same(self, dir1, dir2):"},{"line_number":476,"context_line":"        \"\"\"Compare two directory trees content.\"\"\""},{"line_number":477,"context_line":"        compared \u003d filecmp.dircmp(dir1, dir2)"},{"line_number":478,"context_line":"        if (compared.left_only or compared.right_only or compared.diff_files or"},{"line_number":479,"context_line":"                compared.funny_files):"},{"line_number":480,"context_line":"            return False"},{"line_number":481,"context_line":"        for subdir in compared.common_dirs:"}],"source_content_type":"text/x-python","patch_set":62,"id":"ba7be1f8_2e2c81ab","line":478,"updated":"2015-02-20 11:55:23.000000000","message":"Use any()\n\n if any([compared.left_only, compared.right_only,\n         compared.diff_files, compared.funny_files]):\n     return False","commit_id":"813e5520099d7cfbdc35f8557bd2294450796a87"},{"author":{"_account_id":12395,"name":"Roman Vasylets","email":"pomeo92@gmail.com","username":"rvasilets"},"change_message_id":"1bc3f4aaddc454cde7ad99d6047cd4ebfdb3fc11","unresolved":false,"context_lines":[{"line_number":475,"context_line":"    def is_same(self, dir1, dir2):"},{"line_number":476,"context_line":"        \"\"\"Compare two directory trees content.\"\"\""},{"line_number":477,"context_line":"        compared \u003d filecmp.dircmp(dir1, dir2)"},{"line_number":478,"context_line":"        if (compared.left_only or compared.right_only or compared.diff_files or"},{"line_number":479,"context_line":"                compared.funny_files):"},{"line_number":480,"context_line":"            return False"},{"line_number":481,"context_line":"        for subdir in compared.common_dirs:"}],"source_content_type":"text/x-python","patch_set":62,"id":"ba7be1f8_e11197ad","line":478,"in_reply_to":"ba7be1f8_2e2c81ab","updated":"2015-02-20 13:35:04.000000000","message":"Done","commit_id":"813e5520099d7cfbdc35f8557bd2294450796a87"},{"author":{"_account_id":10475,"name":"Alexander Maretskiy","email":"amaretskiy@mirantis.com","username":"maretskiy"},"change_message_id":"93afa901c36385137524f6580334197cbf7cda5c","unresolved":false,"context_lines":[{"line_number":484,"context_line":"                return False"},{"line_number":485,"context_line":"        return True"},{"line_number":486,"context_line":""},{"line_number":487,"context_line":"    def test_zipdir(self):"},{"line_number":488,"context_line":"        clean_temp \u003d []"},{"line_number":489,"context_line":"        temp_dir1 \u003d tempfile.mkdtemp()"},{"line_number":490,"context_line":"        utils.pack_dir(\"rally-jobs/extra/murano/HelloReporter\","}],"source_content_type":"text/x-python","patch_set":62,"id":"ba7be1f8_091df766","line":487,"updated":"2015-02-20 11:55:23.000000000","message":"s/test_zipdir/test_pack_dir/","commit_id":"813e5520099d7cfbdc35f8557bd2294450796a87"},{"author":{"_account_id":12395,"name":"Roman Vasylets","email":"pomeo92@gmail.com","username":"rvasilets"},"change_message_id":"1bc3f4aaddc454cde7ad99d6047cd4ebfdb3fc11","unresolved":false,"context_lines":[{"line_number":484,"context_line":"                return False"},{"line_number":485,"context_line":"        return True"},{"line_number":486,"context_line":""},{"line_number":487,"context_line":"    def test_zipdir(self):"},{"line_number":488,"context_line":"        clean_temp \u003d []"},{"line_number":489,"context_line":"        temp_dir1 \u003d tempfile.mkdtemp()"},{"line_number":490,"context_line":"        utils.pack_dir(\"rally-jobs/extra/murano/HelloReporter\","}],"source_content_type":"text/x-python","patch_set":62,"id":"ba7be1f8_611da7bd","line":487,"in_reply_to":"ba7be1f8_091df766","updated":"2015-02-20 13:35:04.000000000","message":"Done","commit_id":"813e5520099d7cfbdc35f8557bd2294450796a87"},{"author":{"_account_id":10475,"name":"Alexander Maretskiy","email":"amaretskiy@mirantis.com","username":"maretskiy"},"change_message_id":"93afa901c36385137524f6580334197cbf7cda5c","unresolved":false,"context_lines":[{"line_number":496,"context_line":"        zfile.extractall(temp_dir2)"},{"line_number":497,"context_line":"        self.assertTrue(self.is_same("},{"line_number":498,"context_line":"            \"rally-jobs/extra/murano/HelloReporter\", temp_dir2))"},{"line_number":499,"context_line":"        for x in clean_temp:"},{"line_number":500,"context_line":"            shutil.rmtree(x)"}],"source_content_type":"text/x-python","patch_set":62,"id":"ba7be1f8_ce7685d8","line":499,"updated":"2015-02-20 11:55:23.000000000","message":"Move this under `try/finally\u0027 so cleanup will work even if test fails","commit_id":"813e5520099d7cfbdc35f8557bd2294450796a87"},{"author":{"_account_id":12395,"name":"Roman Vasylets","email":"pomeo92@gmail.com","username":"rvasilets"},"change_message_id":"f14961719cd802554a7b4f7403eb0d14750fb8f0","unresolved":false,"context_lines":[{"line_number":496,"context_line":"        zfile.extractall(temp_dir2)"},{"line_number":497,"context_line":"        self.assertTrue(self.is_same("},{"line_number":498,"context_line":"            \"rally-jobs/extra/murano/HelloReporter\", temp_dir2))"},{"line_number":499,"context_line":"        for x in clean_temp:"},{"line_number":500,"context_line":"            shutil.rmtree(x)"}],"source_content_type":"text/x-python","patch_set":62,"id":"ba7be1f8_a74a4881","line":499,"in_reply_to":"ba7be1f8_34468ec0","updated":"2015-02-20 16:41:40.000000000","message":"Done","commit_id":"813e5520099d7cfbdc35f8557bd2294450796a87"},{"author":{"_account_id":9545,"name":"Andriy Kurilin","email":"andr.kurilin@gmail.com","username":"akurilin"},"change_message_id":"88988fd5b20cb982e52114715c6021f072d3e379","unresolved":false,"context_lines":[{"line_number":496,"context_line":"        zfile.extractall(temp_dir2)"},{"line_number":497,"context_line":"        self.assertTrue(self.is_same("},{"line_number":498,"context_line":"            \"rally-jobs/extra/murano/HelloReporter\", temp_dir2))"},{"line_number":499,"context_line":"        for x in clean_temp:"},{"line_number":500,"context_line":"            shutil.rmtree(x)"}],"source_content_type":"text/x-python","patch_set":62,"id":"ba7be1f8_34468ec0","line":499,"in_reply_to":"ba7be1f8_ce7685d8","updated":"2015-02-20 12:37:50.000000000","message":"imo, \u0027try/finally\u0027 stuff in tests is bad idea:) the preferable way for cleanup stuff should looks like:\n\n    self.addCleanup(lambda x: shutil.rmtree(x), clean_temp)\n\nAlso, looks like list `clean_temp` is not used at all.","commit_id":"813e5520099d7cfbdc35f8557bd2294450796a87"}],"tests/unit/fakes.py":[{"author":{"_account_id":10475,"name":"Alexander Maretskiy","email":"amaretskiy@mirantis.com","username":"maretskiy"},"change_message_id":"226a7f1f8d67f78fd94c634874fabbe9ecf1b32a","unresolved":false,"context_lines":[{"line_number":165,"context_line":"        super(FakeFlavor, self).__init__(manager, id\u003did)"},{"line_number":166,"context_line":"        self.ram \u003d ram"},{"line_number":167,"context_line":"        self.disk \u003d disk"},{"line_number":168,"context_line":""},{"line_number":169,"context_line":""},{"line_number":170,"context_line":"class FakeKeypair(FakeResource):"},{"line_number":171,"context_line":"    pass"}],"source_content_type":"text/x-python","patch_set":58,"id":"da86d52c_0f11bb03","line":168,"updated":"2015-02-12 11:54:51.000000000","message":"self.name \u003d name","commit_id":"0112ebb2dec6a7c9a3280814a89bd1ce60cd405d"}],"tests/unit/test_osclients.py":[{"author":{"_account_id":10475,"name":"Alexander Maretskiy","email":"amaretskiy@mirantis.com","username":"maretskiy"},"change_message_id":"93afa901c36385137524f6580334197cbf7cda5c","unresolved":false,"context_lines":[{"line_number":56,"context_line":"        kwargs \u003d self.endpoint.to_dict()"},{"line_number":57,"context_line":"        kwargs.update(endpoint.items())"},{"line_number":58,"context_line":"        self.mock_create_keystone_client.assert_called_once_with(kwargs)"},{"line_number":59,"context_line":"        self.assertEqual(self.fake_keystone, self.clients.cache[\"keystone\"])"},{"line_number":60,"context_line":""},{"line_number":61,"context_line":"    @mock.patch(\"rally.osclients.Clients.keystone\")"},{"line_number":62,"context_line":"    def test_verified_keystone_user_not_admin(self, mock_keystone):"}],"source_content_type":"text/x-python","patch_set":62,"id":"ba7be1f8_693cb394","line":59,"updated":"2015-02-20 11:55:23.000000000","message":"Not sure this change and another below make any sense.\nPlease explain why that is better? Is somewhere a notation for this?","commit_id":"813e5520099d7cfbdc35f8557bd2294450796a87"},{"author":{"_account_id":9545,"name":"Andriy Kurilin","email":"andr.kurilin@gmail.com","username":"akurilin"},"change_message_id":"88988fd5b20cb982e52114715c6021f072d3e379","unresolved":false,"context_lines":[{"line_number":56,"context_line":"        kwargs \u003d self.endpoint.to_dict()"},{"line_number":57,"context_line":"        kwargs.update(endpoint.items())"},{"line_number":58,"context_line":"        self.mock_create_keystone_client.assert_called_once_with(kwargs)"},{"line_number":59,"context_line":"        self.assertEqual(self.fake_keystone, self.clients.cache[\"keystone\"])"},{"line_number":60,"context_line":""},{"line_number":61,"context_line":"    @mock.patch(\"rally.osclients.Clients.keystone\")"},{"line_number":62,"context_line":"    def test_verified_keystone_user_not_admin(self, mock_keystone):"}],"source_content_type":"text/x-python","patch_set":62,"id":"ba7be1f8_9483bacb","line":59,"in_reply_to":"ba7be1f8_693cb394","updated":"2015-02-20 12:37:50.000000000","message":"https://bugs.launchpad.net/rally/+bug/1277104","commit_id":"813e5520099d7cfbdc35f8557bd2294450796a87"}]}
