)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":13609,"name":"Pavel Boldin","email":"pboldin@mirantis.com","username":"pboldin"},"change_message_id":"2996601df1d6e3aa2197a78f75ad90c2beb7f543","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Add ability to specify directory with murano package files"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Currently we can to specify murano package in the Murano context by"},{"line_number":10,"context_line":"specifying murano package address. Now we add ability to specify"},{"line_number":11,"context_line":"not zipped murano package to Murano context."},{"line_number":12,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":16,"id":"9a41bdd9_9c4fe2bd","line":9,"updated":"2015-07-18 13:56:29.000000000","message":"\"we are able to\"","commit_id":"c809cca23d1d4a241b367697fb7dd8afac170da5"},{"author":{"_account_id":12395,"name":"Roman Vasylets","email":"pomeo92@gmail.com","username":"rvasilets"},"change_message_id":"cc38f4cf34d70e171e72c0a6ed37c69f6eda9cba","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Add ability to specify directory with murano package files"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Currently we can to specify murano package in the Murano context by"},{"line_number":10,"context_line":"specifying murano package address. Now we add ability to specify"},{"line_number":11,"context_line":"not zipped murano package to Murano context."},{"line_number":12,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":16,"id":"3a50d1a3_b30f2e38","line":9,"in_reply_to":"9a41bdd9_9c4fe2bd","updated":"2015-07-22 12:28:59.000000000","message":"Done","commit_id":"c809cca23d1d4a241b367697fb7dd8afac170da5"},{"author":{"_account_id":13609,"name":"Pavel Boldin","email":"pboldin@mirantis.com","username":"pboldin"},"change_message_id":"2996601df1d6e3aa2197a78f75ad90c2beb7f543","unresolved":false,"context_lines":[{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Currently we can to specify murano package in the Murano context by"},{"line_number":10,"context_line":"specifying murano package address. Now we add ability to specify"},{"line_number":11,"context_line":"not zipped murano package to Murano context."},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"Add function that helps to pack a directory with murano package files"},{"line_number":14,"context_line":"into zipfile correctly."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":16,"id":"9a41bdd9_1ccaf21a","line":11,"updated":"2015-07-18 13:56:29.000000000","message":"non-zipped","commit_id":"c809cca23d1d4a241b367697fb7dd8afac170da5"},{"author":{"_account_id":12395,"name":"Roman Vasylets","email":"pomeo92@gmail.com","username":"rvasilets"},"change_message_id":"cc38f4cf34d70e171e72c0a6ed37c69f6eda9cba","unresolved":false,"context_lines":[{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Currently we can to specify murano package in the Murano context by"},{"line_number":10,"context_line":"specifying murano package address. Now we add ability to specify"},{"line_number":11,"context_line":"not zipped murano package to Murano context."},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"Add function that helps to pack a directory with murano package files"},{"line_number":14,"context_line":"into zipfile correctly."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":16,"id":"3a50d1a3_730e863c","line":11,"in_reply_to":"9a41bdd9_1ccaf21a","updated":"2015-07-22 12:28:59.000000000","message":"Done","commit_id":"c809cca23d1d4a241b367697fb7dd8afac170da5"}],"rally/common/fileutils.py":[{"author":{"_account_id":6835,"name":"Kun Huang","email":"gareth@openstacker.org","username":"academicgareth"},"change_message_id":"3ffd5795a9d8b2aacf605303309f463be819edfa","unresolved":false,"context_lines":[{"line_number":100,"context_line":"                relpath \u003d os.path.relpath(abspath, source_directory)"},{"line_number":101,"context_line":"                zipf.write(abspath, relpath)"},{"line_number":102,"context_line":"    finally:"},{"line_number":103,"context_line":"        zipf.close()"}],"source_content_type":"text/x-python","patch_set":6,"id":"ba3cc151_e6cf617d","line":103,"updated":"2015-07-01 09:33:39.000000000","message":"why use try...finally without except here? A typical style is:\n    with zipfile.ZipFile(zip_file, mode\u003d\"w\") as zipf:\n        ...\n        ...\n\nIf L96 raises, excuting L103 will raise \"zipf not defined\" error and the original error is ignored.","commit_id":"397945a62c8a8344341b3ac56625d944babc0c7a"},{"author":{"_account_id":12395,"name":"Roman Vasylets","email":"pomeo92@gmail.com","username":"rvasilets"},"change_message_id":"da5b4ef6b599bac10cbd3b55fa8d40fd8a2d80a5","unresolved":false,"context_lines":[{"line_number":100,"context_line":"                relpath \u003d os.path.relpath(abspath, source_directory)"},{"line_number":101,"context_line":"                zipf.write(abspath, relpath)"},{"line_number":102,"context_line":"    finally:"},{"line_number":103,"context_line":"        zipf.close()"}],"source_content_type":"text/x-python","patch_set":6,"id":"ba3cc151_f3e63a14","line":103,"in_reply_to":"ba3cc151_e6cf617d","updated":"2015-07-01 11:21:11.000000000","message":"try finally because we support python2.6 and context manager for zipfile exist starting from python 2.7 And as for exception in line 96. I think its normal to show standart error if it occur during creating zipfile but I think that it would be better to move 96 line out of try without exception catch as in exxamples here http://pymotw.com/2/zipfile/","commit_id":"397945a62c8a8344341b3ac56625d944babc0c7a"},{"author":{"_account_id":11748,"name":"Chris St. Pierre","email":"cstpierr@cisco.com","username":"stpierre"},"change_message_id":"bb2f5a59b34d7b3a2fb38034271b6bc8d6db4f72","unresolved":false,"context_lines":[{"line_number":85,"context_line":"    update_env_file(expanded_path, key, \"%s\\n\" % value)"},{"line_number":86,"context_line":""},{"line_number":87,"context_line":""},{"line_number":88,"context_line":"def pack_dir(source_directory, zip_name):"},{"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"}],"source_content_type":"text/x-python","patch_set":13,"id":"ba3cc151_d42a4ee7","line":88,"updated":"2015-07-06 16:27:52.000000000","message":"\"pack\" is ambiguous here; there are lots of ways to \"pack\" a directory. I\u0027d suggest \"zip_dir\" or \"zip_directory\" instead.","commit_id":"74be50ba89cf84ac2f2a07643355f0282d11b842"},{"author":{"_account_id":12395,"name":"Roman Vasylets","email":"pomeo92@gmail.com","username":"rvasilets"},"change_message_id":"0abd6f41458b9560280397ddc4f488698ea164dc","unresolved":false,"context_lines":[{"line_number":85,"context_line":"    update_env_file(expanded_path, key, \"%s\\n\" % value)"},{"line_number":86,"context_line":""},{"line_number":87,"context_line":""},{"line_number":88,"context_line":"def pack_dir(source_directory, zip_name):"},{"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"}],"source_content_type":"text/x-python","patch_set":13,"id":"ba3cc151_11b661dc","line":88,"in_reply_to":"ba3cc151_d42a4ee7","updated":"2015-07-07 17:12:15.000000000","message":"It will zip without root directory. So its not usual zip. To avoid ambiguous the is description of the function. And I thought that zip dir is different action from what is going inside. \"pack_dir\" is the name that prompt people to think \"hm, pack is a wide meaning word. So how this function pack the dir\". Instead of \"Oh, this is just making zip archive from directory. Nothing unusual\" Second case would be lead to unneeded misunderstanding.","commit_id":"74be50ba89cf84ac2f2a07643355f0282d11b842"},{"author":{"_account_id":13609,"name":"Pavel Boldin","email":"pboldin@mirantis.com","username":"pboldin"},"change_message_id":"a4e07b8bb069e833ab810fa53ca80a36007c50e5","unresolved":false,"context_lines":[{"line_number":88,"context_line":"def pack_dir(source_directory, zip_name):"},{"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_name: specified path by which archive would be created"},{"line_number":93,"context_line":"    \"\"\""},{"line_number":94,"context_line":""}],"source_content_type":"text/x-python","patch_set":13,"id":"ba3cc151_14775603","line":91,"updated":"2015-07-06 16:10:54.000000000","message":"\u0027root of the newly created archive. Directory is added recursively\u0027","commit_id":"74be50ba89cf84ac2f2a07643355f0282d11b842"},{"author":{"_account_id":12395,"name":"Roman Vasylets","email":"pomeo92@gmail.com","username":"rvasilets"},"change_message_id":"0abd6f41458b9560280397ddc4f488698ea164dc","unresolved":false,"context_lines":[{"line_number":88,"context_line":"def pack_dir(source_directory, zip_name):"},{"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_name: specified path by which archive would be created"},{"line_number":93,"context_line":"    \"\"\""},{"line_number":94,"context_line":""}],"source_content_type":"text/x-python","patch_set":13,"id":"ba3cc151_f1373d4b","line":91,"in_reply_to":"ba3cc151_14775603","updated":"2015-07-07 17:12:15.000000000","message":"Done","commit_id":"74be50ba89cf84ac2f2a07643355f0282d11b842"},{"author":{"_account_id":13609,"name":"Pavel Boldin","email":"pboldin@mirantis.com","username":"pboldin"},"change_message_id":"a4e07b8bb069e833ab810fa53ca80a36007c50e5","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_name: specified path by which archive would be created"},{"line_number":93,"context_line":"    \"\"\""},{"line_number":94,"context_line":""},{"line_number":95,"context_line":"    zipf \u003d zipfile.ZipFile(zip_name, mode\u003d\"w\")"}],"source_content_type":"text/x-python","patch_set":13,"id":"ba3cc151_f464324a","line":92,"updated":"2015-07-06 16:10:54.000000000","message":"Destination zip file name.","commit_id":"74be50ba89cf84ac2f2a07643355f0282d11b842"},{"author":{"_account_id":12395,"name":"Roman Vasylets","email":"pomeo92@gmail.com","username":"rvasilets"},"change_message_id":"0abd6f41458b9560280397ddc4f488698ea164dc","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_name: specified path by which archive would be created"},{"line_number":93,"context_line":"    \"\"\""},{"line_number":94,"context_line":""},{"line_number":95,"context_line":"    zipf \u003d zipfile.ZipFile(zip_name, mode\u003d\"w\")"}],"source_content_type":"text/x-python","patch_set":13,"id":"ba3cc151_71d6cdf2","line":92,"in_reply_to":"ba3cc151_f464324a","updated":"2015-07-07 17:12:15.000000000","message":"Done","commit_id":"74be50ba89cf84ac2f2a07643355f0282d11b842"},{"author":{"_account_id":11748,"name":"Chris St. Pierre","email":"cstpierr@cisco.com","username":"stpierre"},"change_message_id":"bb2f5a59b34d7b3a2fb38034271b6bc8d6db4f72","unresolved":false,"context_lines":[{"line_number":92,"context_line":"    :param zip_name: specified path by which archive would be created"},{"line_number":93,"context_line":"    \"\"\""},{"line_number":94,"context_line":""},{"line_number":95,"context_line":"    zipf \u003d zipfile.ZipFile(zip_name, mode\u003d\"w\")"},{"line_number":96,"context_line":"    try:"},{"line_number":97,"context_line":"        for root, dirs, files in os.walk(source_directory):"},{"line_number":98,"context_line":"            for f in files:"}],"source_content_type":"text/x-python","patch_set":13,"id":"ba3cc151_34c13a2f","line":95,"updated":"2015-07-06 16:27:52.000000000","message":"zipfile.ZipFile can be used as a context manager, and would make this function a little cleaner.","commit_id":"74be50ba89cf84ac2f2a07643355f0282d11b842"},{"author":{"_account_id":13609,"name":"Pavel Boldin","email":"pboldin@mirantis.com","username":"pboldin"},"change_message_id":"ecf5519ace8f60e4e0ec855f97050bd4f3a72773","unresolved":false,"context_lines":[{"line_number":92,"context_line":"    :param zip_name: specified path by which archive would be created"},{"line_number":93,"context_line":"    \"\"\""},{"line_number":94,"context_line":""},{"line_number":95,"context_line":"    zipf \u003d zipfile.ZipFile(zip_name, mode\u003d\"w\")"},{"line_number":96,"context_line":"    try:"},{"line_number":97,"context_line":"        for root, dirs, files in os.walk(source_directory):"},{"line_number":98,"context_line":"            for f in files:"}],"source_content_type":"text/x-python","patch_set":13,"id":"ba3cc151_a2a3cc4e","line":95,"in_reply_to":"ba3cc151_34c13a2f","updated":"2015-07-06 16:31:08.000000000","message":"No, it cannot be used as a context manager. This is not supported in Py2.6\n\nhttps://docs.python.org/2/library/zipfile.html#zipfile.ZipFile","commit_id":"74be50ba89cf84ac2f2a07643355f0282d11b842"},{"author":{"_account_id":9545,"name":"Andriy Kurilin","email":"andr.kurilin@gmail.com","username":"akurilin"},"change_message_id":"5557cae5c799d4faf36deaca16e8449074355f1f","unresolved":false,"context_lines":[{"line_number":94,"context_line":"    be created else zip archive would be created based on temporary file"},{"line_number":95,"context_line":""},{"line_number":96,"context_line":"    :param source_directory: root of the newly created archive."},{"line_number":97,"context_line":"     Directory is added recursively"},{"line_number":98,"context_line":"    :param zip_name: destination zip file name"},{"line_number":99,"context_line":"    :return: name of the temprorary created file."},{"line_number":100,"context_line":"    If zip_name not specified or destination zip file name"}],"source_content_type":"text/x-python","patch_set":15,"id":"9a41bdd9_6619dad6","line":97,"updated":"2015-07-15 09:57:48.000000000","message":"\"Directory is added recursively\" statement relates to source_directory param?","commit_id":"dababec6be9bda1c00bd0898f02e349a4b7f2d2c"},{"author":{"_account_id":12395,"name":"Roman Vasylets","email":"pomeo92@gmail.com","username":"rvasilets"},"change_message_id":"c32cfc39dc595758829f7b1406fdc2a12cc5bd94","unresolved":false,"context_lines":[{"line_number":94,"context_line":"    be created else zip archive would be created based on temporary file"},{"line_number":95,"context_line":""},{"line_number":96,"context_line":"    :param source_directory: root of the newly created archive."},{"line_number":97,"context_line":"     Directory is added recursively"},{"line_number":98,"context_line":"    :param zip_name: destination zip file name"},{"line_number":99,"context_line":"    :return: name of the temprorary created file."},{"line_number":100,"context_line":"    If zip_name not specified or destination zip file name"}],"source_content_type":"text/x-python","patch_set":15,"id":"9a41bdd9_494a9027","line":97,"in_reply_to":"9a41bdd9_6619dad6","updated":"2015-07-15 16:37:43.000000000","message":"Yes. It was wrote under proper param section","commit_id":"dababec6be9bda1c00bd0898f02e349a4b7f2d2c"},{"author":{"_account_id":10475,"name":"Alexander Maretskiy","email":"amaretskiy@mirantis.com","username":"maretskiy"},"change_message_id":"da523d5212013635a15ec160fb366e2d111eecf3","unresolved":false,"context_lines":[{"line_number":96,"context_line":"    :param source_directory: root of the newly created archive."},{"line_number":97,"context_line":"     Directory is added recursively"},{"line_number":98,"context_line":"    :param zip_name: destination zip file name"},{"line_number":99,"context_line":"    :return: name of the temprorary created file."},{"line_number":100,"context_line":"    If zip_name not specified or destination zip file name"},{"line_number":101,"context_line":"    \"\"\""},{"line_number":102,"context_line":""}],"source_content_type":"text/x-python","patch_set":15,"id":"9a41bdd9_1f9da8bb","line":99,"updated":"2015-07-15 13:17:20.000000000","message":"s/:return:/:returns:/","commit_id":"dababec6be9bda1c00bd0898f02e349a4b7f2d2c"},{"author":{"_account_id":12395,"name":"Roman Vasylets","email":"pomeo92@gmail.com","username":"rvasilets"},"change_message_id":"b45a9e150822c7aba093dcda9557eff87645798a","unresolved":false,"context_lines":[{"line_number":96,"context_line":"    :param source_directory: root of the newly created archive."},{"line_number":97,"context_line":"     Directory is added recursively"},{"line_number":98,"context_line":"    :param zip_name: destination zip file name"},{"line_number":99,"context_line":"    :return: name of the temprorary created file."},{"line_number":100,"context_line":"    If zip_name not specified or destination zip file name"},{"line_number":101,"context_line":"    \"\"\""},{"line_number":102,"context_line":""}],"source_content_type":"text/x-python","patch_set":15,"id":"9a41bdd9_db139d63","line":99,"in_reply_to":"9a41bdd9_1f9da8bb","updated":"2015-07-16 10:45:00.000000000","message":"Do we have some rules for that? My IDE suggested to me this value also.","commit_id":"dababec6be9bda1c00bd0898f02e349a4b7f2d2c"},{"author":{"_account_id":12395,"name":"Roman Vasylets","email":"pomeo92@gmail.com","username":"rvasilets"},"change_message_id":"c32cfc39dc595758829f7b1406fdc2a12cc5bd94","unresolved":false,"context_lines":[{"line_number":96,"context_line":"    :param source_directory: root of the newly created archive."},{"line_number":97,"context_line":"     Directory is added recursively"},{"line_number":98,"context_line":"    :param zip_name: destination zip file name"},{"line_number":99,"context_line":"    :return: name of the temprorary created file."},{"line_number":100,"context_line":"    If zip_name not specified or destination zip file name"},{"line_number":101,"context_line":"    \"\"\""},{"line_number":102,"context_line":""}],"source_content_type":"text/x-python","patch_set":15,"id":"9a41bdd9_e9192423","line":99,"in_reply_to":"9a41bdd9_1f9da8bb","updated":"2015-07-15 16:37:43.000000000","message":"Done","commit_id":"dababec6be9bda1c00bd0898f02e349a4b7f2d2c"},{"author":{"_account_id":9545,"name":"Andriy Kurilin","email":"andr.kurilin@gmail.com","username":"akurilin"},"change_message_id":"5557cae5c799d4faf36deaca16e8449074355f1f","unresolved":false,"context_lines":[{"line_number":97,"context_line":"     Directory is added recursively"},{"line_number":98,"context_line":"    :param zip_name: destination zip file name"},{"line_number":99,"context_line":"    :return: name of the temprorary created file."},{"line_number":100,"context_line":"    If zip_name not specified or destination zip file name"},{"line_number":101,"context_line":"    \"\"\""},{"line_number":102,"context_line":""},{"line_number":103,"context_line":"    if not zip_name:"}],"source_content_type":"text/x-python","patch_set":15,"id":"9a41bdd9_06332e63","line":100,"updated":"2015-07-15 09:57:48.000000000","message":"The function always returns zip_name.","commit_id":"dababec6be9bda1c00bd0898f02e349a4b7f2d2c"},{"author":{"_account_id":10475,"name":"Alexander Maretskiy","email":"amaretskiy@mirantis.com","username":"maretskiy"},"change_message_id":"da523d5212013635a15ec160fb366e2d111eecf3","unresolved":false,"context_lines":[{"line_number":97,"context_line":"     Directory is added recursively"},{"line_number":98,"context_line":"    :param zip_name: destination zip file name"},{"line_number":99,"context_line":"    :return: name of the temprorary created file."},{"line_number":100,"context_line":"    If zip_name not specified or destination zip file name"},{"line_number":101,"context_line":"    \"\"\""},{"line_number":102,"context_line":""},{"line_number":103,"context_line":"    if not zip_name:"}],"source_content_type":"text/x-python","patch_set":15,"id":"9a41bdd9_dfb3c098","line":100,"in_reply_to":"9a41bdd9_06332e63","updated":"2015-07-15 13:17:20.000000000","message":":raises: IOError - in case if file specified by zip_name is not found","commit_id":"dababec6be9bda1c00bd0898f02e349a4b7f2d2c"},{"author":{"_account_id":12395,"name":"Roman Vasylets","email":"pomeo92@gmail.com","username":"rvasilets"},"change_message_id":"b45a9e150822c7aba093dcda9557eff87645798a","unresolved":false,"context_lines":[{"line_number":97,"context_line":"     Directory is added recursively"},{"line_number":98,"context_line":"    :param zip_name: destination zip file name"},{"line_number":99,"context_line":"    :return: name of the temprorary created file."},{"line_number":100,"context_line":"    If zip_name not specified or destination zip file name"},{"line_number":101,"context_line":"    \"\"\""},{"line_number":102,"context_line":""},{"line_number":103,"context_line":"    if not zip_name:"}],"source_content_type":"text/x-python","patch_set":15,"id":"9a41bdd9_bb425966","line":100,"in_reply_to":"9a41bdd9_06332e63","updated":"2015-07-16 10:45:00.000000000","message":"IF we talking about name of variable - yes. But the string that is stored in this variable can have different senses. And the sense of this string was described depend from thesituation.","commit_id":"dababec6be9bda1c00bd0898f02e349a4b7f2d2c"},{"author":{"_account_id":12395,"name":"Roman Vasylets","email":"pomeo92@gmail.com","username":"rvasilets"},"change_message_id":"c32cfc39dc595758829f7b1406fdc2a12cc5bd94","unresolved":false,"context_lines":[{"line_number":97,"context_line":"     Directory is added recursively"},{"line_number":98,"context_line":"    :param zip_name: destination zip file name"},{"line_number":99,"context_line":"    :return: name of the temprorary created file."},{"line_number":100,"context_line":"    If zip_name not specified or destination zip file name"},{"line_number":101,"context_line":"    \"\"\""},{"line_number":102,"context_line":""},{"line_number":103,"context_line":"    if not zip_name:"}],"source_content_type":"text/x-python","patch_set":15,"id":"9a41bdd9_a92f9c3d","line":100,"in_reply_to":"9a41bdd9_7ca15545","updated":"2015-07-15 16:37:43.000000000","message":"I will fix this.","commit_id":"dababec6be9bda1c00bd0898f02e349a4b7f2d2c"},{"author":{"_account_id":10475,"name":"Alexander Maretskiy","email":"amaretskiy@mirantis.com","username":"maretskiy"},"change_message_id":"4e86686e5f196666ca26452fd6fd535d8cff5705","unresolved":false,"context_lines":[{"line_number":97,"context_line":"     Directory is added recursively"},{"line_number":98,"context_line":"    :param zip_name: destination zip file name"},{"line_number":99,"context_line":"    :return: name of the temprorary created file."},{"line_number":100,"context_line":"    If zip_name not specified or destination zip file name"},{"line_number":101,"context_line":"    \"\"\""},{"line_number":102,"context_line":""},{"line_number":103,"context_line":"    if not zip_name:"}],"source_content_type":"text/x-python","patch_set":15,"id":"9a41bdd9_7ca15545","line":100,"in_reply_to":"9a41bdd9_8763ae41","updated":"2015-07-15 15:37:41.000000000","message":"@Andrey, agreed","commit_id":"dababec6be9bda1c00bd0898f02e349a4b7f2d2c"},{"author":{"_account_id":9545,"name":"Andriy Kurilin","email":"andr.kurilin@gmail.com","username":"akurilin"},"change_message_id":"1fef4fba2eae9b857259dc3b94916dcfd7ccd0bf","unresolved":false,"context_lines":[{"line_number":97,"context_line":"     Directory is added recursively"},{"line_number":98,"context_line":"    :param zip_name: destination zip file name"},{"line_number":99,"context_line":"    :return: name of the temprorary created file."},{"line_number":100,"context_line":"    If zip_name not specified or destination zip file name"},{"line_number":101,"context_line":"    \"\"\""},{"line_number":102,"context_line":""},{"line_number":103,"context_line":"    if not zip_name:"}],"source_content_type":"text/x-python","patch_set":15,"id":"9a41bdd9_8763ae41","line":100,"in_reply_to":"9a41bdd9_dfb3c098","updated":"2015-07-15 13:43:22.000000000","message":"\u003e:raises: IOError - in case if file specified by zip_name is not found\n\nhttps://bugs.launchpad.net/rally/+bug/1470901","commit_id":"dababec6be9bda1c00bd0898f02e349a4b7f2d2c"},{"author":{"_account_id":10475,"name":"Alexander Maretskiy","email":"amaretskiy@mirantis.com","username":"maretskiy"},"change_message_id":"da523d5212013635a15ec160fb366e2d111eecf3","unresolved":false,"context_lines":[{"line_number":104,"context_line":"        fp \u003d tempfile.NamedTemporaryFile(delete\u003dFalse)"},{"line_number":105,"context_line":"        zip_name \u003d fp.name"},{"line_number":106,"context_line":"    zipf \u003d zipfile.ZipFile(zip_name, mode\u003d\"w\")"},{"line_number":107,"context_line":"    try:"},{"line_number":108,"context_line":"        for root, dirs, files in os.walk(source_directory):"},{"line_number":109,"context_line":"            for f in files:"},{"line_number":110,"context_line":"                abspath \u003d os.path.join(root, f)"}],"source_content_type":"text/x-python","patch_set":15,"id":"9a41bdd9_9fb21893","line":107,"updated":"2015-07-15 13:17:20.000000000","message":"I recommend using `with\u0027 instead of try/finally - this is more compact and automatically cares about closing zipf:\n\n with zipfile.ZipFile(zip_name, mode\u003d\"w\") as zipf:\n     for ...\n         ...\n         zipf.write(abspath, relpath)\n     return zip_name","commit_id":"dababec6be9bda1c00bd0898f02e349a4b7f2d2c"},{"author":{"_account_id":12395,"name":"Roman Vasylets","email":"pomeo92@gmail.com","username":"rvasilets"},"change_message_id":"c32cfc39dc595758829f7b1406fdc2a12cc5bd94","unresolved":false,"context_lines":[{"line_number":104,"context_line":"        fp \u003d tempfile.NamedTemporaryFile(delete\u003dFalse)"},{"line_number":105,"context_line":"        zip_name \u003d fp.name"},{"line_number":106,"context_line":"    zipf \u003d zipfile.ZipFile(zip_name, mode\u003d\"w\")"},{"line_number":107,"context_line":"    try:"},{"line_number":108,"context_line":"        for root, dirs, files in os.walk(source_directory):"},{"line_number":109,"context_line":"            for f in files:"},{"line_number":110,"context_line":"                abspath \u003d os.path.join(root, f)"}],"source_content_type":"text/x-python","patch_set":15,"id":"9a41bdd9_491ff007","line":107,"in_reply_to":"9a41bdd9_9fb21893","updated":"2015-07-15 16:37:43.000000000","message":"We can\u0027t. We have discussed this previously.","commit_id":"dababec6be9bda1c00bd0898f02e349a4b7f2d2c"},{"author":{"_account_id":13609,"name":"Pavel Boldin","email":"pboldin@mirantis.com","username":"pboldin"},"change_message_id":"2996601df1d6e3aa2197a78f75ad90c2beb7f543","unresolved":false,"context_lines":[{"line_number":87,"context_line":""},{"line_number":88,"context_line":""},{"line_number":89,"context_line":"def pack_dir(source_directory, zip_name\u003dNone):"},{"line_number":90,"context_line":"    \"\"\"Zip content of directory into zip archive."},{"line_number":91,"context_line":""},{"line_number":92,"context_line":"    Zip content of the source folder without root directory"},{"line_number":93,"context_line":"    into zip archive. If zip_name specified zip archive with such name would"}],"source_content_type":"text/x-python","patch_set":16,"id":"9a41bdd9_1cf1926a","line":90,"updated":"2015-07-18 13:56:29.000000000","message":"\"zip\" means different thing.\n\nPlease write \"Archive content of the directory into .zip\"","commit_id":"c809cca23d1d4a241b367697fb7dd8afac170da5"},{"author":{"_account_id":12395,"name":"Roman Vasylets","email":"pomeo92@gmail.com","username":"rvasilets"},"change_message_id":"3c38b489b150d64db6f5ae44a937bb5a291b7a3f","unresolved":false,"context_lines":[{"line_number":87,"context_line":""},{"line_number":88,"context_line":""},{"line_number":89,"context_line":"def pack_dir(source_directory, zip_name\u003dNone):"},{"line_number":90,"context_line":"    \"\"\"Zip content of directory into zip archive."},{"line_number":91,"context_line":""},{"line_number":92,"context_line":"    Zip content of the source folder without root directory"},{"line_number":93,"context_line":"    into zip archive. If zip_name specified zip archive with such name would"}],"source_content_type":"text/x-python","patch_set":16,"id":"3a50d1a3_f5edd3ef","line":90,"in_reply_to":"9a41bdd9_1cf1926a","updated":"2015-07-21 16:16:17.000000000","message":"Done","commit_id":"c809cca23d1d4a241b367697fb7dd8afac170da5"},{"author":{"_account_id":13609,"name":"Pavel Boldin","email":"pboldin@mirantis.com","username":"pboldin"},"change_message_id":"2996601df1d6e3aa2197a78f75ad90c2beb7f543","unresolved":false,"context_lines":[{"line_number":89,"context_line":"def pack_dir(source_directory, zip_name\u003dNone):"},{"line_number":90,"context_line":"    \"\"\"Zip content of directory into zip archive."},{"line_number":91,"context_line":""},{"line_number":92,"context_line":"    Zip content of the source folder without root directory"},{"line_number":93,"context_line":"    into zip archive. If zip_name specified zip archive with such name would"},{"line_number":94,"context_line":"    be created else zip archive would be created based on temporary file"},{"line_number":95,"context_line":""}],"source_content_type":"text/x-python","patch_set":16,"id":"9a41bdd9_7c021e40","line":92,"updated":"2015-07-18 13:56:29.000000000","message":"replace \u0027without\u0027 with \u0027excluding\u0027","commit_id":"c809cca23d1d4a241b367697fb7dd8afac170da5"},{"author":{"_account_id":12395,"name":"Roman Vasylets","email":"pomeo92@gmail.com","username":"rvasilets"},"change_message_id":"3c38b489b150d64db6f5ae44a937bb5a291b7a3f","unresolved":false,"context_lines":[{"line_number":89,"context_line":"def pack_dir(source_directory, zip_name\u003dNone):"},{"line_number":90,"context_line":"    \"\"\"Zip content of directory into zip archive."},{"line_number":91,"context_line":""},{"line_number":92,"context_line":"    Zip content of the source folder without root directory"},{"line_number":93,"context_line":"    into zip archive. If zip_name specified zip archive with such name would"},{"line_number":94,"context_line":"    be created else zip archive would be created based on temporary file"},{"line_number":95,"context_line":""}],"source_content_type":"text/x-python","patch_set":16,"id":"3a50d1a3_d5f217d2","line":92,"in_reply_to":"9a41bdd9_7c021e40","updated":"2015-07-21 16:16:17.000000000","message":"Done","commit_id":"c809cca23d1d4a241b367697fb7dd8afac170da5"},{"author":{"_account_id":13609,"name":"Pavel Boldin","email":"pboldin@mirantis.com","username":"pboldin"},"change_message_id":"2996601df1d6e3aa2197a78f75ad90c2beb7f543","unresolved":false,"context_lines":[{"line_number":90,"context_line":"    \"\"\"Zip content of directory into zip archive."},{"line_number":91,"context_line":""},{"line_number":92,"context_line":"    Zip content of the source folder without root directory"},{"line_number":93,"context_line":"    into zip archive. If zip_name specified zip archive with such name would"},{"line_number":94,"context_line":"    be created else zip archive would be created based on temporary file"},{"line_number":95,"context_line":""},{"line_number":96,"context_line":"    :param source_directory: root of the newly created archive."}],"source_content_type":"text/x-python","patch_set":16,"id":"9a41bdd9_bc9e6605","line":93,"updated":"2015-07-18 13:56:29.000000000","message":"When zip_name is specified it would be used as a destination for the archive.\n\nPlease don\u0027t use `created\u0027 because, if the file already exists, you will get `EPERM\u0027. Don\u0027t write down a contract you are physically unable to perform in the docstrings.","commit_id":"c809cca23d1d4a241b367697fb7dd8afac170da5"},{"author":{"_account_id":12395,"name":"Roman Vasylets","email":"pomeo92@gmail.com","username":"rvasilets"},"change_message_id":"3c38b489b150d64db6f5ae44a937bb5a291b7a3f","unresolved":false,"context_lines":[{"line_number":90,"context_line":"    \"\"\"Zip content of directory into zip archive."},{"line_number":91,"context_line":""},{"line_number":92,"context_line":"    Zip content of the source folder without root directory"},{"line_number":93,"context_line":"    into zip archive. If zip_name specified zip archive with such name would"},{"line_number":94,"context_line":"    be created else zip archive would be created based on temporary file"},{"line_number":95,"context_line":""},{"line_number":96,"context_line":"    :param source_directory: root of the newly created archive."}],"source_content_type":"text/x-python","patch_set":16,"id":"3a50d1a3_eedc2414","line":93,"in_reply_to":"9a41bdd9_bc9e6605","updated":"2015-07-21 16:16:17.000000000","message":"Done","commit_id":"c809cca23d1d4a241b367697fb7dd8afac170da5"},{"author":{"_account_id":13609,"name":"Pavel Boldin","email":"pboldin@mirantis.com","username":"pboldin"},"change_message_id":"2996601df1d6e3aa2197a78f75ad90c2beb7f543","unresolved":false,"context_lines":[{"line_number":91,"context_line":""},{"line_number":92,"context_line":"    Zip content of the source folder without root directory"},{"line_number":93,"context_line":"    into zip archive. If zip_name specified zip archive with such name would"},{"line_number":94,"context_line":"    be created else zip archive would be created based on temporary file"},{"line_number":95,"context_line":""},{"line_number":96,"context_line":"    :param source_directory: root of the newly created archive."},{"line_number":97,"context_line":"     Directory is added recursively"}],"source_content_type":"text/x-python","patch_set":16,"id":"9a41bdd9_9cfda23d","line":94,"updated":"2015-07-18 13:56:29.000000000","message":"New sentence before \u0027else\u0027.\n\nChange \u0027else\u0027 to \u0027otherwise\u0027.\n\nin a temporary file","commit_id":"c809cca23d1d4a241b367697fb7dd8afac170da5"},{"author":{"_account_id":12395,"name":"Roman Vasylets","email":"pomeo92@gmail.com","username":"rvasilets"},"change_message_id":"3c38b489b150d64db6f5ae44a937bb5a291b7a3f","unresolved":false,"context_lines":[{"line_number":91,"context_line":""},{"line_number":92,"context_line":"    Zip content of the source folder without root directory"},{"line_number":93,"context_line":"    into zip archive. If zip_name specified zip archive with such name would"},{"line_number":94,"context_line":"    be created else zip archive would be created based on temporary file"},{"line_number":95,"context_line":""},{"line_number":96,"context_line":"    :param source_directory: root of the newly created archive."},{"line_number":97,"context_line":"     Directory is added recursively"}],"source_content_type":"text/x-python","patch_set":16,"id":"3a50d1a3_35925b58","line":94,"in_reply_to":"9a41bdd9_9cfda23d","updated":"2015-07-21 16:16:17.000000000","message":"Done","commit_id":"c809cca23d1d4a241b367697fb7dd8afac170da5"},{"author":{"_account_id":13609,"name":"Pavel Boldin","email":"pboldin@mirantis.com","username":"pboldin"},"change_message_id":"2996601df1d6e3aa2197a78f75ad90c2beb7f543","unresolved":false,"context_lines":[{"line_number":94,"context_line":"    be created else zip archive would be created based on temporary file"},{"line_number":95,"context_line":""},{"line_number":96,"context_line":"    :param source_directory: root of the newly created archive."},{"line_number":97,"context_line":"     Directory is added recursively"},{"line_number":98,"context_line":"    :param zip_name: destination zip file name"},{"line_number":99,"context_line":"    :raises IOError: if file specified by zip_name is not found"},{"line_number":100,"context_line":"    :returns: zip_file given in function parameters or if zip_name not"}],"source_content_type":"text/x-python","patch_set":16,"id":"9a41bdd9_5ca5da44","line":97,"updated":"2015-07-18 13:56:29.000000000","message":"Please add more indentation.","commit_id":"c809cca23d1d4a241b367697fb7dd8afac170da5"},{"author":{"_account_id":12395,"name":"Roman Vasylets","email":"pomeo92@gmail.com","username":"rvasilets"},"change_message_id":"3c38b489b150d64db6f5ae44a937bb5a291b7a3f","unresolved":false,"context_lines":[{"line_number":94,"context_line":"    be created else zip archive would be created based on temporary file"},{"line_number":95,"context_line":""},{"line_number":96,"context_line":"    :param source_directory: root of the newly created archive."},{"line_number":97,"context_line":"     Directory is added recursively"},{"line_number":98,"context_line":"    :param zip_name: destination zip file name"},{"line_number":99,"context_line":"    :raises IOError: if file specified by zip_name is not found"},{"line_number":100,"context_line":"    :returns: zip_file given in function parameters or if zip_name not"}],"source_content_type":"text/x-python","patch_set":16,"id":"3a50d1a3_1f43c043","line":97,"in_reply_to":"9a41bdd9_5ca5da44","updated":"2015-07-21 16:16:17.000000000","message":"Done","commit_id":"c809cca23d1d4a241b367697fb7dd8afac170da5"},{"author":{"_account_id":13609,"name":"Pavel Boldin","email":"pboldin@mirantis.com","username":"pboldin"},"change_message_id":"2996601df1d6e3aa2197a78f75ad90c2beb7f543","unresolved":false,"context_lines":[{"line_number":96,"context_line":"    :param source_directory: root of the newly created archive."},{"line_number":97,"context_line":"     Directory is added recursively"},{"line_number":98,"context_line":"    :param zip_name: destination zip file name"},{"line_number":99,"context_line":"    :raises IOError: if file specified by zip_name is not found"},{"line_number":100,"context_line":"    :returns: zip_file given in function parameters or if zip_name not"},{"line_number":101,"context_line":"    specified than zip_file will store path to the temporary created file."},{"line_number":102,"context_line":"    \"\"\""}],"source_content_type":"text/x-python","patch_set":16,"id":"9a41bdd9_5c539a39","line":99,"updated":"2015-07-18 13:56:29.000000000","message":"This is wrong. IOError will be raised with e.g. `EPERM\u0027 and so on and the description is too restrictive.\n\nPlease just write\n\n:raises IOError: whenever there is IO issues","commit_id":"c809cca23d1d4a241b367697fb7dd8afac170da5"},{"author":{"_account_id":12395,"name":"Roman Vasylets","email":"pomeo92@gmail.com","username":"rvasilets"},"change_message_id":"3c38b489b150d64db6f5ae44a937bb5a291b7a3f","unresolved":false,"context_lines":[{"line_number":96,"context_line":"    :param source_directory: root of the newly created archive."},{"line_number":97,"context_line":"     Directory is added recursively"},{"line_number":98,"context_line":"    :param zip_name: destination zip file name"},{"line_number":99,"context_line":"    :raises IOError: if file specified by zip_name is not found"},{"line_number":100,"context_line":"    :returns: zip_file given in function parameters or if zip_name not"},{"line_number":101,"context_line":"    specified than zip_file will store path to the temporary created file."},{"line_number":102,"context_line":"    \"\"\""}],"source_content_type":"text/x-python","patch_set":16,"id":"3a50d1a3_5f586832","line":99,"in_reply_to":"9a41bdd9_5c539a39","updated":"2015-07-21 16:16:17.000000000","message":"Done","commit_id":"c809cca23d1d4a241b367697fb7dd8afac170da5"},{"author":{"_account_id":13609,"name":"Pavel Boldin","email":"pboldin@mirantis.com","username":"pboldin"},"change_message_id":"2996601df1d6e3aa2197a78f75ad90c2beb7f543","unresolved":false,"context_lines":[{"line_number":97,"context_line":"     Directory is added recursively"},{"line_number":98,"context_line":"    :param zip_name: destination zip file name"},{"line_number":99,"context_line":"    :raises IOError: if file specified by zip_name is not found"},{"line_number":100,"context_line":"    :returns: zip_file given in function parameters or if zip_name not"},{"line_number":101,"context_line":"    specified than zip_file will store path to the temporary created file."},{"line_number":102,"context_line":"    \"\"\""},{"line_number":103,"context_line":""}],"source_content_type":"text/x-python","patch_set":16,"id":"9a41bdd9_9c2042b2","line":100,"updated":"2015-07-18 13:56:29.000000000","message":":returns: path to the newly created zip archive either specified via zip_name or a temporary one.","commit_id":"c809cca23d1d4a241b367697fb7dd8afac170da5"},{"author":{"_account_id":12395,"name":"Roman Vasylets","email":"pomeo92@gmail.com","username":"rvasilets"},"change_message_id":"3c38b489b150d64db6f5ae44a937bb5a291b7a3f","unresolved":false,"context_lines":[{"line_number":97,"context_line":"     Directory is added recursively"},{"line_number":98,"context_line":"    :param zip_name: destination zip file name"},{"line_number":99,"context_line":"    :raises IOError: if file specified by zip_name is not found"},{"line_number":100,"context_line":"    :returns: zip_file given in function parameters or if zip_name not"},{"line_number":101,"context_line":"    specified than zip_file will store path to the temporary created file."},{"line_number":102,"context_line":"    \"\"\""},{"line_number":103,"context_line":""}],"source_content_type":"text/x-python","patch_set":16,"id":"3a50d1a3_7f0d2436","line":100,"in_reply_to":"9a41bdd9_9c2042b2","updated":"2015-07-21 16:16:17.000000000","message":"Done","commit_id":"c809cca23d1d4a241b367697fb7dd8afac170da5"},{"author":{"_account_id":13609,"name":"Pavel Boldin","email":"pboldin@mirantis.com","username":"pboldin"},"change_message_id":"2996601df1d6e3aa2197a78f75ad90c2beb7f543","unresolved":false,"context_lines":[{"line_number":98,"context_line":"    :param zip_name: destination zip file name"},{"line_number":99,"context_line":"    :raises IOError: if file specified by zip_name is not found"},{"line_number":100,"context_line":"    :returns: zip_file given in function parameters or if zip_name not"},{"line_number":101,"context_line":"    specified than zip_file will store path to the temporary created file."},{"line_number":102,"context_line":"    \"\"\""},{"line_number":103,"context_line":""},{"line_number":104,"context_line":"    if not zip_name:"}],"source_content_type":"text/x-python","patch_set":16,"id":"9a41bdd9_fc306e09","line":101,"updated":"2015-07-18 13:56:29.000000000","message":"Please indent.","commit_id":"c809cca23d1d4a241b367697fb7dd8afac170da5"},{"author":{"_account_id":12395,"name":"Roman Vasylets","email":"pomeo92@gmail.com","username":"rvasilets"},"change_message_id":"3c38b489b150d64db6f5ae44a937bb5a291b7a3f","unresolved":false,"context_lines":[{"line_number":98,"context_line":"    :param zip_name: destination zip file name"},{"line_number":99,"context_line":"    :raises IOError: if file specified by zip_name is not found"},{"line_number":100,"context_line":"    :returns: zip_file given in function parameters or if zip_name not"},{"line_number":101,"context_line":"    specified than zip_file will store path to the temporary created file."},{"line_number":102,"context_line":"    \"\"\""},{"line_number":103,"context_line":""},{"line_number":104,"context_line":"    if not zip_name:"}],"source_content_type":"text/x-python","patch_set":16,"id":"3a50d1a3_1f15003f","line":101,"in_reply_to":"9a41bdd9_fc306e09","updated":"2015-07-21 16:16:17.000000000","message":"Done","commit_id":"c809cca23d1d4a241b367697fb7dd8afac170da5"},{"author":{"_account_id":13609,"name":"Pavel Boldin","email":"pboldin@mirantis.com","username":"pboldin"},"change_message_id":"d666fa0710b0b5ad33b30a17c3985b005f40abaf","unresolved":false,"context_lines":[{"line_number":91,"context_line":""},{"line_number":92,"context_line":"    Zip content of the source folder excluding root directory"},{"line_number":93,"context_line":"    into zip archive. When zip_name is specified it would be used"},{"line_number":94,"context_line":"    as a destination for the archive otherwise zip archive would"},{"line_number":95,"context_line":"    try to use temporary file as a destination for the archive."},{"line_number":96,"context_line":""},{"line_number":97,"context_line":"    :param source_directory: root of the newly created archive."}],"source_content_type":"text/x-python","patch_set":17,"id":"3a50d1a3_1fc383ee","line":94,"updated":"2015-07-22 13:37:51.000000000","message":"\"otherwise method\" instead of \"otherwise zip archive\"","commit_id":"1da386c3198ac2bfb89fec1b6eee44b02e8bf032"},{"author":{"_account_id":12395,"name":"Roman Vasylets","email":"pomeo92@gmail.com","username":"rvasilets"},"change_message_id":"792db329c8547b0e502bb279843c303c777d2f8f","unresolved":false,"context_lines":[{"line_number":91,"context_line":""},{"line_number":92,"context_line":"    Zip content of the source folder excluding root directory"},{"line_number":93,"context_line":"    into zip archive. When zip_name is specified it would be used"},{"line_number":94,"context_line":"    as a destination for the archive otherwise zip archive would"},{"line_number":95,"context_line":"    try to use temporary file as a destination for the archive."},{"line_number":96,"context_line":""},{"line_number":97,"context_line":"    :param source_directory: root of the newly created archive."}],"source_content_type":"text/x-python","patch_set":17,"id":"3a50d1a3_6e473fbc","line":94,"in_reply_to":"3a50d1a3_1fc383ee","updated":"2015-07-29 13:24:41.000000000","message":"Done","commit_id":"1da386c3198ac2bfb89fec1b6eee44b02e8bf032"}],"rally/plugins/openstack/context/murano_packages.py":[{"author":{"_account_id":13609,"name":"Pavel Boldin","email":"pboldin@mirantis.com","username":"pboldin"},"change_message_id":"a4e07b8bb069e833ab810fa53ca80a36007c50e5","unresolved":false,"context_lines":[{"line_number":49,"context_line":""},{"line_number":50,"context_line":"    @utils.log_task_wrapper(LOG.info, _(\"Enter context: `Murano packages`\"))"},{"line_number":51,"context_line":"    def setup(self):"},{"line_number":52,"context_line":"        if (not zipfile.is_zipfile(self.config[\"app_package\"]) and"},{"line_number":53,"context_line":"                not os.path.isdir(self.config[\"app_package\"])):"},{"line_number":54,"context_line":"            msg \u003d (_LE(\"There is no zip archive or directory by this path:\""},{"line_number":55,"context_line":"                       \" %s\") % self.config[\"app_package\"])"}],"source_content_type":"text/x-python","patch_set":13,"id":"ba3cc151_977b687b","line":52,"updated":"2015-07-06 16:10:54.000000000","message":"Please invert the logic:\n\n if zipfile.is_zipfile(...)...:\n  zip_name \u003d self.config[\"app_package\"]\nelsif os.path.isdir(...):\n  ...\nelse:\n  raise OSError(...)","commit_id":"74be50ba89cf84ac2f2a07643355f0282d11b842"},{"author":{"_account_id":12395,"name":"Roman Vasylets","email":"pomeo92@gmail.com","username":"rvasilets"},"change_message_id":"0abd6f41458b9560280397ddc4f488698ea164dc","unresolved":false,"context_lines":[{"line_number":49,"context_line":""},{"line_number":50,"context_line":"    @utils.log_task_wrapper(LOG.info, _(\"Enter context: `Murano packages`\"))"},{"line_number":51,"context_line":"    def setup(self):"},{"line_number":52,"context_line":"        if (not zipfile.is_zipfile(self.config[\"app_package\"]) and"},{"line_number":53,"context_line":"                not os.path.isdir(self.config[\"app_package\"])):"},{"line_number":54,"context_line":"            msg \u003d (_LE(\"There is no zip archive or directory by this path:\""},{"line_number":55,"context_line":"                       \" %s\") % self.config[\"app_package\"])"}],"source_content_type":"text/x-python","patch_set":13,"id":"ba3cc151_e7d3ffd3","line":52,"in_reply_to":"ba3cc151_977b687b","updated":"2015-07-07 17:12:15.000000000","message":"Done","commit_id":"74be50ba89cf84ac2f2a07643355f0282d11b842"},{"author":{"_account_id":11748,"name":"Chris St. Pierre","email":"cstpierr@cisco.com","username":"stpierre"},"change_message_id":"bb2f5a59b34d7b3a2fb38034271b6bc8d6db4f72","unresolved":false,"context_lines":[{"line_number":55,"context_line":"                       \" %s\") % self.config[\"app_package\"])"},{"line_number":56,"context_line":"            raise OSError(msg)"},{"line_number":57,"context_line":"        elif os.path.isdir(self.config[\"app_package\"]):"},{"line_number":58,"context_line":"            zip_name \u003d self.config[\"app_package\"].split(\"/\")[-2]"},{"line_number":59,"context_line":"            fileutils.pack_dir(self.config[\"app_package\"], zip_name)"},{"line_number":60,"context_line":""},{"line_number":61,"context_line":"        if zipfile.is_zipfile(self.config[\"app_package\"]):"}],"source_content_type":"text/x-python","patch_set":13,"id":"ba3cc151_c2b930ee","line":58,"updated":"2015-07-06 16:27:52.000000000","message":"This logic requires the app_package config option to have a trailing slash. That\u0027s a pretty touchy requirement -- it\u0027d be better to strip trailing slashes and then use the last element, e.g.:\n\n    zip_name \u003d self.config[\"app_package\"].rstrip(\"/\").split(\"/\")[-1]\n\nBut instead of writing to a deterministic filename in (presumably) the current directory, this should use a real tempfile instead of potentially overwriting existing data.","commit_id":"74be50ba89cf84ac2f2a07643355f0282d11b842"},{"author":{"_account_id":12395,"name":"Roman Vasylets","email":"pomeo92@gmail.com","username":"rvasilets"},"change_message_id":"0abd6f41458b9560280397ddc4f488698ea164dc","unresolved":false,"context_lines":[{"line_number":55,"context_line":"                       \" %s\") % self.config[\"app_package\"])"},{"line_number":56,"context_line":"            raise OSError(msg)"},{"line_number":57,"context_line":"        elif os.path.isdir(self.config[\"app_package\"]):"},{"line_number":58,"context_line":"            zip_name \u003d self.config[\"app_package\"].split(\"/\")[-2]"},{"line_number":59,"context_line":"            fileutils.pack_dir(self.config[\"app_package\"], zip_name)"},{"line_number":60,"context_line":""},{"line_number":61,"context_line":"        if zipfile.is_zipfile(self.config[\"app_package\"]):"}],"source_content_type":"text/x-python","patch_set":13,"id":"ba3cc151_3dd24f01","line":58,"in_reply_to":"ba3cc151_c2b930ee","updated":"2015-07-07 17:12:15.000000000","message":"Done","commit_id":"74be50ba89cf84ac2f2a07643355f0282d11b842"},{"author":{"_account_id":13609,"name":"Pavel Boldin","email":"pboldin@mirantis.com","username":"pboldin"},"change_message_id":"ecf5519ace8f60e4e0ec855f97050bd4f3a72773","unresolved":false,"context_lines":[{"line_number":55,"context_line":"                       \" %s\") % self.config[\"app_package\"])"},{"line_number":56,"context_line":"            raise OSError(msg)"},{"line_number":57,"context_line":"        elif os.path.isdir(self.config[\"app_package\"]):"},{"line_number":58,"context_line":"            zip_name \u003d self.config[\"app_package\"].split(\"/\")[-2]"},{"line_number":59,"context_line":"            fileutils.pack_dir(self.config[\"app_package\"], zip_name)"},{"line_number":60,"context_line":""},{"line_number":61,"context_line":"        if zipfile.is_zipfile(self.config[\"app_package\"]):"}],"source_content_type":"text/x-python","patch_set":13,"id":"ba3cc151_62adc430","line":58,"in_reply_to":"ba3cc151_c2b930ee","updated":"2015-07-06 16:31:08.000000000","message":"I second this.","commit_id":"74be50ba89cf84ac2f2a07643355f0282d11b842"},{"author":{"_account_id":13609,"name":"Pavel Boldin","email":"pboldin@mirantis.com","username":"pboldin"},"change_message_id":"a4e07b8bb069e833ab810fa53ca80a36007c50e5","unresolved":false,"context_lines":[{"line_number":65,"context_line":"                self.context[\"users\"]):"},{"line_number":66,"context_line":"            clients \u003d osclients.Clients(user[\"endpoint\"])"},{"line_number":67,"context_line":"            self.context[\"tenants\"][tenant_id][\"packages\"] \u003d []"},{"line_number":68,"context_line":"            if os.path.isdir(self.config[\"app_package\"]):"},{"line_number":69,"context_line":"                self.context[\"tenants\"][tenant_id][\"murano_ctx\"] \u003d zip_name"},{"line_number":70,"context_line":"            package \u003d clients.murano().packages.create("},{"line_number":71,"context_line":"                {\"categories\": [\"Web\"], \"tags\": [\"tag\"]},"}],"source_content_type":"text/x-python","patch_set":13,"id":"ba3cc151_57dde06e","line":68,"updated":"2015-07-06 16:10:54.000000000","message":"Please save the `isdir\u0027 check result to some variable.","commit_id":"74be50ba89cf84ac2f2a07643355f0282d11b842"},{"author":{"_account_id":11748,"name":"Chris St. Pierre","email":"cstpierr@cisco.com","username":"stpierre"},"change_message_id":"67495c0993fdc6641dea92a8c67d1f4d5179eb76","unresolved":false,"context_lines":[{"line_number":66,"context_line":"            clients \u003d osclients.Clients(user[\"endpoint\"])"},{"line_number":67,"context_line":"            self.context[\"tenants\"][tenant_id][\"packages\"] \u003d []"},{"line_number":68,"context_line":"            if os.path.isdir(self.config[\"app_package\"]):"},{"line_number":69,"context_line":"                self.context[\"tenants\"][tenant_id][\"murano_ctx\"] \u003d zip_name"},{"line_number":70,"context_line":"            package \u003d clients.murano().packages.create("},{"line_number":71,"context_line":"                {\"categories\": [\"Web\"], \"tags\": [\"tag\"]},"},{"line_number":72,"context_line":"                {\"file\": open(zip_name)})"}],"source_content_type":"text/x-python","patch_set":13,"id":"ba3cc151_aaf37e9e","line":69,"updated":"2015-07-07 12:58:46.000000000","message":"\"murano_ctx\" isn\u0027t a very clear name for this.","commit_id":"74be50ba89cf84ac2f2a07643355f0282d11b842"},{"author":{"_account_id":13609,"name":"Pavel Boldin","email":"pboldin@mirantis.com","username":"pboldin"},"change_message_id":"a4e07b8bb069e833ab810fa53ca80a36007c50e5","unresolved":false,"context_lines":[{"line_number":69,"context_line":"                self.context[\"tenants\"][tenant_id][\"murano_ctx\"] \u003d zip_name"},{"line_number":70,"context_line":"            package \u003d clients.murano().packages.create("},{"line_number":71,"context_line":"                {\"categories\": [\"Web\"], \"tags\": [\"tag\"]},"},{"line_number":72,"context_line":"                {\"file\": open(zip_name)})"},{"line_number":73,"context_line":""},{"line_number":74,"context_line":"            self.context[\"tenants\"][tenant_id][\"packages\"].append(package)"},{"line_number":75,"context_line":""}],"source_content_type":"text/x-python","patch_set":13,"id":"ba3cc151_7748242e","line":72,"updated":"2015-07-06 16:10:54.000000000","message":"This looks like it leaks the filedescriptors.","commit_id":"74be50ba89cf84ac2f2a07643355f0282d11b842"},{"author":{"_account_id":6835,"name":"Kun Huang","email":"gareth@openstacker.org","username":"academicgareth"},"change_message_id":"b29f930fa07a3ed7f09152513073d908bd192330","unresolved":false,"context_lines":[{"line_number":69,"context_line":"                self.context[\"tenants\"][tenant_id][\"murano_ctx\"] \u003d zip_name"},{"line_number":70,"context_line":"            package \u003d clients.murano().packages.create("},{"line_number":71,"context_line":"                {\"categories\": [\"Web\"], \"tags\": [\"tag\"]},"},{"line_number":72,"context_line":"                {\"file\": open(zip_name)})"},{"line_number":73,"context_line":""},{"line_number":74,"context_line":"            self.context[\"tenants\"][tenant_id][\"packages\"].append(package)"},{"line_number":75,"context_line":""}],"source_content_type":"text/x-python","patch_set":13,"id":"ba3cc151_2dfc733d","line":72,"in_reply_to":"ba3cc151_7748242e","updated":"2015-07-07 07:39:54.000000000","message":"I worried about it too. But I find the reference:\n\nhttp://docs.python-requests.org/en/latest/user/quickstart/#post-a-multipart-encoded-file","commit_id":"74be50ba89cf84ac2f2a07643355f0282d11b842"},{"author":{"_account_id":11748,"name":"Chris St. Pierre","email":"cstpierr@cisco.com","username":"stpierre"},"change_message_id":"bb2f5a59b34d7b3a2fb38034271b6bc8d6db4f72","unresolved":false,"context_lines":[{"line_number":74,"context_line":"            self.context[\"tenants\"][tenant_id][\"packages\"].append(package)"},{"line_number":75,"context_line":""},{"line_number":76,"context_line":"    @utils.log_task_wrapper(LOG.info, _(\"Exit context: `Murano packages`\"))"},{"line_number":77,"context_line":"    def cleanup(self):"},{"line_number":78,"context_line":"        for user, tenant_id in utils.iterate_per_tenants("},{"line_number":79,"context_line":"                self.context[\"users\"]):"},{"line_number":80,"context_line":"            if \"murano_ctx\" in self.context[\"tenants\"][tenant_id].keys():"}],"source_content_type":"text/x-python","patch_set":13,"id":"ba3cc151_42268017","line":77,"updated":"2015-07-06 16:27:52.000000000","message":"We should remove the temporary zip file created in setup() (if one was created).","commit_id":"74be50ba89cf84ac2f2a07643355f0282d11b842"},{"author":{"_account_id":6835,"name":"Kun Huang","email":"gareth@openstacker.org","username":"academicgareth"},"change_message_id":"b29f930fa07a3ed7f09152513073d908bd192330","unresolved":false,"context_lines":[{"line_number":74,"context_line":"            self.context[\"tenants\"][tenant_id][\"packages\"].append(package)"},{"line_number":75,"context_line":""},{"line_number":76,"context_line":"    @utils.log_task_wrapper(LOG.info, _(\"Exit context: `Murano packages`\"))"},{"line_number":77,"context_line":"    def cleanup(self):"},{"line_number":78,"context_line":"        for user, tenant_id in utils.iterate_per_tenants("},{"line_number":79,"context_line":"                self.context[\"users\"]):"},{"line_number":80,"context_line":"            if \"murano_ctx\" in self.context[\"tenants\"][tenant_id].keys():"}],"source_content_type":"text/x-python","patch_set":13,"id":"ba3cc151_ed944be9","line":77,"in_reply_to":"ba3cc151_42268017","updated":"2015-07-07 07:39:54.000000000","message":"L82\u0027s job","commit_id":"74be50ba89cf84ac2f2a07643355f0282d11b842"},{"author":{"_account_id":11748,"name":"Chris St. Pierre","email":"cstpierr@cisco.com","username":"stpierre"},"change_message_id":"67495c0993fdc6641dea92a8c67d1f4d5179eb76","unresolved":false,"context_lines":[{"line_number":74,"context_line":"            self.context[\"tenants\"][tenant_id][\"packages\"].append(package)"},{"line_number":75,"context_line":""},{"line_number":76,"context_line":"    @utils.log_task_wrapper(LOG.info, _(\"Exit context: `Murano packages`\"))"},{"line_number":77,"context_line":"    def cleanup(self):"},{"line_number":78,"context_line":"        for user, tenant_id in utils.iterate_per_tenants("},{"line_number":79,"context_line":"                self.context[\"users\"]):"},{"line_number":80,"context_line":"            if \"murano_ctx\" in self.context[\"tenants\"][tenant_id].keys():"}],"source_content_type":"text/x-python","patch_set":13,"id":"ba3cc151_0a2b8aec","line":77,"in_reply_to":"ba3cc151_ed944be9","updated":"2015-07-07 12:58:46.000000000","message":"Thanks, I missed that due to the unclear name.","commit_id":"74be50ba89cf84ac2f2a07643355f0282d11b842"},{"author":{"_account_id":13609,"name":"Pavel Boldin","email":"pboldin@mirantis.com","username":"pboldin"},"change_message_id":"a4e07b8bb069e833ab810fa53ca80a36007c50e5","unresolved":false,"context_lines":[{"line_number":77,"context_line":"    def cleanup(self):"},{"line_number":78,"context_line":"        for user, tenant_id in utils.iterate_per_tenants("},{"line_number":79,"context_line":"                self.context[\"users\"]):"},{"line_number":80,"context_line":"            if \"murano_ctx\" in self.context[\"tenants\"][tenant_id].keys():"},{"line_number":81,"context_line":"                subprocess.call(["},{"line_number":82,"context_line":"                    \"rm\", self.context[\"tenants\"][tenant_id][\"murano_ctx\"]])"},{"line_number":83,"context_line":"        resource_manager.cleanup(names\u003d[\"murano.packages\"],"}],"source_content_type":"text/x-python","patch_set":13,"id":"ba3cc151_3717fcee","line":80,"updated":"2015-07-06 16:10:54.000000000","message":"Just:\n tenant \u003d self.context[\"tenants\"][tenant_id]\n if \"murano_ctx\" in tenant:\n   os.unlink(tenant[\"murano_ctx\"])","commit_id":"74be50ba89cf84ac2f2a07643355f0282d11b842"},{"author":{"_account_id":12395,"name":"Roman Vasylets","email":"pomeo92@gmail.com","username":"rvasilets"},"change_message_id":"0abd6f41458b9560280397ddc4f488698ea164dc","unresolved":false,"context_lines":[{"line_number":77,"context_line":"    def cleanup(self):"},{"line_number":78,"context_line":"        for user, tenant_id in utils.iterate_per_tenants("},{"line_number":79,"context_line":"                self.context[\"users\"]):"},{"line_number":80,"context_line":"            if \"murano_ctx\" in self.context[\"tenants\"][tenant_id].keys():"},{"line_number":81,"context_line":"                subprocess.call(["},{"line_number":82,"context_line":"                    \"rm\", self.context[\"tenants\"][tenant_id][\"murano_ctx\"]])"},{"line_number":83,"context_line":"        resource_manager.cleanup(names\u003d[\"murano.packages\"],"}],"source_content_type":"text/x-python","patch_set":13,"id":"ba3cc151_da3489fc","line":80,"in_reply_to":"ba3cc151_3717fcee","updated":"2015-07-07 17:12:15.000000000","message":"Done","commit_id":"74be50ba89cf84ac2f2a07643355f0282d11b842"},{"author":{"_account_id":13609,"name":"Pavel Boldin","email":"pboldin@mirantis.com","username":"pboldin"},"change_message_id":"2996601df1d6e3aa2197a78f75ad90c2beb7f543","unresolved":false,"context_lines":[{"line_number":48,"context_line":""},{"line_number":49,"context_line":"    @utils.log_task_wrapper(LOG.info, _(\"Enter context: `Murano packages`\"))"},{"line_number":50,"context_line":"    def setup(self):"},{"line_number":51,"context_line":"        is_config_app_dir \u003d os.path.isdir(self.config[\"app_package\"])"},{"line_number":52,"context_line":"        if zipfile.is_zipfile(self.config[\"app_package\"]):"},{"line_number":53,"context_line":"            zip_name \u003d self.config[\"app_package\"]"},{"line_number":54,"context_line":"        elif is_config_app_dir:"}],"source_content_type":"text/x-python","patch_set":16,"id":"9a41bdd9_b708c129","line":51,"updated":"2015-07-18 13:56:29.000000000","message":"Please rather write:\n\n is_config_app_dir \u003d False\n if zipfile...:\n   ..\n elif os.path.isdir(self.config...):\n   is_config_app_dir \u003d True\n   zip_name \u003d ....","commit_id":"c809cca23d1d4a241b367697fb7dd8afac170da5"},{"author":{"_account_id":12395,"name":"Roman Vasylets","email":"pomeo92@gmail.com","username":"rvasilets"},"change_message_id":"3c38b489b150d64db6f5ae44a937bb5a291b7a3f","unresolved":false,"context_lines":[{"line_number":48,"context_line":""},{"line_number":49,"context_line":"    @utils.log_task_wrapper(LOG.info, _(\"Enter context: `Murano packages`\"))"},{"line_number":50,"context_line":"    def setup(self):"},{"line_number":51,"context_line":"        is_config_app_dir \u003d os.path.isdir(self.config[\"app_package\"])"},{"line_number":52,"context_line":"        if zipfile.is_zipfile(self.config[\"app_package\"]):"},{"line_number":53,"context_line":"            zip_name \u003d self.config[\"app_package\"]"},{"line_number":54,"context_line":"        elif is_config_app_dir:"}],"source_content_type":"text/x-python","patch_set":16,"id":"3a50d1a3_ae137cb7","line":51,"in_reply_to":"9a41bdd9_b708c129","updated":"2015-07-21 16:16:17.000000000","message":"Done","commit_id":"c809cca23d1d4a241b367697fb7dd8afac170da5"},{"author":{"_account_id":13609,"name":"Pavel Boldin","email":"pboldin@mirantis.com","username":"pboldin"},"change_message_id":"2996601df1d6e3aa2197a78f75ad90c2beb7f543","unresolved":false,"context_lines":[{"line_number":56,"context_line":"        else:"},{"line_number":57,"context_line":"            msg \u003d (_LE(\"There is no zip archive or directory by this path:\""},{"line_number":58,"context_line":"                       \" %s\") % self.config[\"app_package\"])"},{"line_number":59,"context_line":"            raise OSError(msg)"},{"line_number":60,"context_line":""},{"line_number":61,"context_line":"        for user, tenant_id in utils.iterate_per_tenants("},{"line_number":62,"context_line":"                self.context[\"users\"]):"}],"source_content_type":"text/x-python","patch_set":16,"id":"9a41bdd9_1c1bd281","line":59,"updated":"2015-07-18 13:56:29.000000000","message":"This is wrong to raise OSErorr here:\nclass OSError(EnvironmentError)\n |  OS system call failed.\n |","commit_id":"c809cca23d1d4a241b367697fb7dd8afac170da5"},{"author":{"_account_id":12395,"name":"Roman Vasylets","email":"pomeo92@gmail.com","username":"rvasilets"},"change_message_id":"3c38b489b150d64db6f5ae44a937bb5a291b7a3f","unresolved":false,"context_lines":[{"line_number":56,"context_line":"        else:"},{"line_number":57,"context_line":"            msg \u003d (_LE(\"There is no zip archive or directory by this path:\""},{"line_number":58,"context_line":"                       \" %s\") % self.config[\"app_package\"])"},{"line_number":59,"context_line":"            raise OSError(msg)"},{"line_number":60,"context_line":""},{"line_number":61,"context_line":"        for user, tenant_id in utils.iterate_per_tenants("},{"line_number":62,"context_line":"                self.context[\"users\"]):"}],"source_content_type":"text/x-python","patch_set":16,"id":"3a50d1a3_2e41aca9","line":59,"in_reply_to":"3a50d1a3_8b4e04c0","updated":"2015-07-21 16:16:17.000000000","message":"Ok. Let it be ContextSetupFailure.","commit_id":"c809cca23d1d4a241b367697fb7dd8afac170da5"},{"author":{"_account_id":13609,"name":"Pavel Boldin","email":"pboldin@mirantis.com","username":"pboldin"},"change_message_id":"a3726449d645a6c5d2a3d911226859071a9c7112","unresolved":false,"context_lines":[{"line_number":56,"context_line":"        else:"},{"line_number":57,"context_line":"            msg \u003d (_LE(\"There is no zip archive or directory by this path:\""},{"line_number":58,"context_line":"                       \" %s\") % self.config[\"app_package\"])"},{"line_number":59,"context_line":"            raise OSError(msg)"},{"line_number":60,"context_line":""},{"line_number":61,"context_line":"        for user, tenant_id in utils.iterate_per_tenants("},{"line_number":62,"context_line":"                self.context[\"users\"]):"}],"source_content_type":"text/x-python","patch_set":16,"id":"3a50d1a3_03318d0b","line":59,"in_reply_to":"9a41bdd9_1c1bd281","updated":"2015-07-19 12:34:53.000000000","message":"class ContextSetupFailure(RallyException):\n    msg_fmt \u003d _(\"Unable to setup context \u0027%(ctx_name)s\u0027: \u0027%(msg)s\u0027\")","commit_id":"c809cca23d1d4a241b367697fb7dd8afac170da5"},{"author":{"_account_id":9545,"name":"Andriy Kurilin","email":"andr.kurilin@gmail.com","username":"akurilin"},"change_message_id":"a8c088d02c53c0ebab47c8b7a1852f798b769c1b","unresolved":false,"context_lines":[{"line_number":56,"context_line":"        else:"},{"line_number":57,"context_line":"            msg \u003d (_LE(\"There is no zip archive or directory by this path:\""},{"line_number":58,"context_line":"                       \" %s\") % self.config[\"app_package\"])"},{"line_number":59,"context_line":"            raise OSError(msg)"},{"line_number":60,"context_line":""},{"line_number":61,"context_line":"        for user, tenant_id in utils.iterate_per_tenants("},{"line_number":62,"context_line":"                self.context[\"users\"]):"}],"source_content_type":"text/x-python","patch_set":16,"id":"3a50d1a3_8b4e04c0","line":59,"in_reply_to":"9a41bdd9_1c1bd281","updated":"2015-07-20 09:50:47.000000000","message":"we can use here IOError or ContextSetupFailure","commit_id":"c809cca23d1d4a241b367697fb7dd8afac170da5"}],"samples/tasks/scenarios/murano/create_and_deploy_environment.json":[{"author":{"_account_id":10475,"name":"Alexander Maretskiy","email":"amaretskiy@mirantis.com","username":"maretskiy"},"change_message_id":"da523d5212013635a15ec160fb366e2d111eecf3","unresolved":false,"context_lines":[{"line_number":32,"context_line":"            \"context\": {"},{"line_number":33,"context_line":"                \"users\": {"},{"line_number":34,"context_line":"                    \"tenants\": 2,"},{"line_number":35,"context_line":"                    \"users_per_tenant\": 2"},{"line_number":36,"context_line":"                },"},{"line_number":37,"context_line":"                \"murano_packages\": {"},{"line_number":38,"context_line":"                    \"app_package\": \"rally-jobs/extra/murano/applications/HelloReporter/io.murano.apps.HelloReporter/\""}],"source_content_type":"application/json","patch_set":15,"id":"9a41bdd9_30c1bb54","line":35,"updated":"2015-07-15 13:17:20.000000000","message":"there is no sense of 2 users_per_tenant since you have 2 iterations and 2 tenants - value of 1 is enough","commit_id":"dababec6be9bda1c00bd0898f02e349a4b7f2d2c"},{"author":{"_account_id":12395,"name":"Roman Vasylets","email":"pomeo92@gmail.com","username":"rvasilets"},"change_message_id":"c32cfc39dc595758829f7b1406fdc2a12cc5bd94","unresolved":false,"context_lines":[{"line_number":32,"context_line":"            \"context\": {"},{"line_number":33,"context_line":"                \"users\": {"},{"line_number":34,"context_line":"                    \"tenants\": 2,"},{"line_number":35,"context_line":"                    \"users_per_tenant\": 2"},{"line_number":36,"context_line":"                },"},{"line_number":37,"context_line":"                \"murano_packages\": {"},{"line_number":38,"context_line":"                    \"app_package\": \"rally-jobs/extra/murano/applications/HelloReporter/io.murano.apps.HelloReporter/\""}],"source_content_type":"application/json","patch_set":15,"id":"9a41bdd9_29ce2c63","line":35,"in_reply_to":"9a41bdd9_30c1bb54","updated":"2015-07-15 16:37:43.000000000","message":"In samples there is no difference. But when I run locally I want to check that murano works correct also with multiple users per tenant. The was a bug previously. And its a good check for this. So I think better to stay this const.","commit_id":"dababec6be9bda1c00bd0898f02e349a4b7f2d2c"}],"samples/tasks/scenarios/murano/create_and_deploy_environment.yaml":[{"author":{"_account_id":10475,"name":"Alexander Maretskiy","email":"amaretskiy@mirantis.com","username":"maretskiy"},"change_message_id":"da523d5212013635a15ec160fb366e2d111eecf3","unresolved":false,"context_lines":[{"line_number":25,"context_line":"      context:"},{"line_number":26,"context_line":"        users:"},{"line_number":27,"context_line":"          tenants: 2"},{"line_number":28,"context_line":"          users_per_tenant: 2"},{"line_number":29,"context_line":"        murano_packages:"},{"line_number":30,"context_line":"          app_package: \"rally-jobs/extra/murano/applications/HelloReporter/io.murano.apps.HelloReporter/\""},{"line_number":31,"context_line":"        roles:"}],"source_content_type":"text/x-yaml","patch_set":15,"id":"9a41bdd9_70c3c357","line":28,"updated":"2015-07-15 13:17:20.000000000","message":"ditto","commit_id":"dababec6be9bda1c00bd0898f02e349a4b7f2d2c"}],"tests/unit/common/test_fileutils.py":[{"author":{"_account_id":13609,"name":"Pavel Boldin","email":"pboldin@mirantis.com","username":"pboldin"},"change_message_id":"a4e07b8bb069e833ab810fa53ca80a36007c50e5","unresolved":false,"context_lines":[{"line_number":47,"context_line":"            mock_file.return_value.write.assert_has_calls(calls)"},{"line_number":48,"context_line":""},{"line_number":49,"context_line":""},{"line_number":50,"context_line":"class PackDirTestCase(test.TestCase):"},{"line_number":51,"context_line":""},{"line_number":52,"context_line":"    @mock.patch(\"os.walk\")"},{"line_number":53,"context_line":"    @mock.patch(\"zipfile.ZipFile\")"}],"source_content_type":"text/x-python","patch_set":13,"id":"ba3cc151_d7b9f0ed","line":50,"updated":"2015-07-06 16:10:54.000000000","message":"This class is not required, please use the FileUtilsTestCase.","commit_id":"74be50ba89cf84ac2f2a07643355f0282d11b842"},{"author":{"_account_id":13609,"name":"Pavel Boldin","email":"pboldin@mirantis.com","username":"pboldin"},"change_message_id":"a4e07b8bb069e833ab810fa53ca80a36007c50e5","unresolved":false,"context_lines":[{"line_number":52,"context_line":"    @mock.patch(\"os.walk\")"},{"line_number":53,"context_line":"    @mock.patch(\"zipfile.ZipFile\")"},{"line_number":54,"context_line":"    def test_pack_dir(self, mock_zip_file, mock_walk):"},{"line_number":55,"context_line":"        zip_file \u003d mock.Mock()"},{"line_number":56,"context_line":"        mock_zip_file.return_value \u003d zip_file"},{"line_number":57,"context_line":"        mock_walk.side_effect \u003d ["},{"line_number":58,"context_line":"            [(\"foo_root\", [], [\"file1\", \"file2\", \"file3\"])]]"}],"source_content_type":"text/x-python","patch_set":13,"id":"ba3cc151_77926459","line":55,"updated":"2015-07-06 16:10:54.000000000","message":"`zip_file\u0027 is not needed.","commit_id":"74be50ba89cf84ac2f2a07643355f0282d11b842"},{"author":{"_account_id":11748,"name":"Chris St. Pierre","email":"cstpierr@cisco.com","username":"stpierre"},"change_message_id":"bb2f5a59b34d7b3a2fb38034271b6bc8d6db4f72","unresolved":false,"context_lines":[{"line_number":57,"context_line":"        mock_walk.side_effect \u003d ["},{"line_number":58,"context_line":"            [(\"foo_root\", [], [\"file1\", \"file2\", \"file3\"])]]"},{"line_number":59,"context_line":"        fileutils.pack_dir(\"rally-jobs/extra/murano/HelloReporter\","},{"line_number":60,"context_line":"                           os.path.join(\"fake_dir\", \"package.zip\"))"},{"line_number":61,"context_line":"        mock_zip_file.assert_called_once_with("},{"line_number":62,"context_line":"            os.path.join(\"fake_dir\", \"package.zip\"), mode\u003d\"w\")"},{"line_number":63,"context_line":"        mock_walk.assert_called_once_with("}],"source_content_type":"text/x-python","patch_set":13,"id":"ba3cc151_c2dcd01a","line":60,"updated":"2015-07-06 16:27:52.000000000","message":"Why do you use os.path.join() on two static strings here, instead of just doing \"fake_dir/package.zip\"?","commit_id":"74be50ba89cf84ac2f2a07643355f0282d11b842"},{"author":{"_account_id":13609,"name":"Pavel Boldin","email":"pboldin@mirantis.com","username":"pboldin"},"change_message_id":"a4e07b8bb069e833ab810fa53ca80a36007c50e5","unresolved":false,"context_lines":[{"line_number":62,"context_line":"            os.path.join(\"fake_dir\", \"package.zip\"), mode\u003d\"w\")"},{"line_number":63,"context_line":"        mock_walk.assert_called_once_with("},{"line_number":64,"context_line":"            \"rally-jobs/extra/murano/HelloReporter\")"},{"line_number":65,"context_line":"        zip_file.assert_has_calls("},{"line_number":66,"context_line":"            [mock.call.write(\"foo_root/file1\", \"../../../../foo_root/file1\"),"},{"line_number":67,"context_line":"             mock.call.write(\"foo_root/file2\", \"../../../../foo_root/file2\"),"},{"line_number":68,"context_line":"             mock.call.write(\"foo_root/file3\", \"../../../../foo_root/file3\"),"}],"source_content_type":"text/x-python","patch_set":13,"id":"ba3cc151_f78c3437","line":65,"updated":"2015-07-06 16:10:54.000000000","message":"Just use `mock_zip_file.return_value.assert_has_calls\u0027 here instead.","commit_id":"74be50ba89cf84ac2f2a07643355f0282d11b842"},{"author":{"_account_id":11748,"name":"Chris St. Pierre","email":"cstpierr@cisco.com","username":"stpierre"},"change_message_id":"bb2f5a59b34d7b3a2fb38034271b6bc8d6db4f72","unresolved":false,"context_lines":[{"line_number":62,"context_line":"            os.path.join(\"fake_dir\", \"package.zip\"), mode\u003d\"w\")"},{"line_number":63,"context_line":"        mock_walk.assert_called_once_with("},{"line_number":64,"context_line":"            \"rally-jobs/extra/murano/HelloReporter\")"},{"line_number":65,"context_line":"        zip_file.assert_has_calls("},{"line_number":66,"context_line":"            [mock.call.write(\"foo_root/file1\", \"../../../../foo_root/file1\"),"},{"line_number":67,"context_line":"             mock.call.write(\"foo_root/file2\", \"../../../../foo_root/file2\"),"},{"line_number":68,"context_line":"             mock.call.write(\"foo_root/file3\", \"../../../../foo_root/file3\"),"}],"source_content_type":"text/x-python","patch_set":13,"id":"ba3cc151_c2037075","line":65,"in_reply_to":"ba3cc151_f78c3437","updated":"2015-07-06 16:27:52.000000000","message":"I\u0027d even be tempted to do:\n\n    mock_zip_file.return_value.write.assert_has_calls([...])\n    mock_zip_file.return_value.close.assert_called_once_with()\n\nBut that\u0027s a very tiny nit indeed.","commit_id":"74be50ba89cf84ac2f2a07643355f0282d11b842"},{"author":{"_account_id":10475,"name":"Alexander Maretskiy","email":"amaretskiy@mirantis.com","username":"maretskiy"},"change_message_id":"da523d5212013635a15ec160fb366e2d111eecf3","unresolved":false,"context_lines":[{"line_number":57,"context_line":"        mock_walk.side_effect \u003d ["},{"line_number":58,"context_line":"            [(\"foo_root\", [], [\"file1\", \"file2\", \"file3\"])]]"},{"line_number":59,"context_line":"        fileutils.pack_dir(\"rally-jobs/extra/murano/HelloReporter\","},{"line_number":60,"context_line":"                           os.path.join(\"fake_dir\", \"package.zip\"))"},{"line_number":61,"context_line":"        mock_zip_file.assert_called_once_with("},{"line_number":62,"context_line":"            os.path.join(\"fake_dir\", \"package.zip\"), mode\u003d\"w\")"},{"line_number":63,"context_line":"        mock_walk.assert_called_once_with("}],"source_content_type":"text/x-python","patch_set":15,"id":"9a41bdd9_50fa3f44","line":60,"updated":"2015-07-15 13:17:20.000000000","message":"Why call os.path.join here? We already know the result path, so use str:\n\n fileutils.pack_dir(\"rally-jobs/extra/murano/HelloReporter\",\n                    \"fake_dir/package.zip\")","commit_id":"dababec6be9bda1c00bd0898f02e349a4b7f2d2c"},{"author":{"_account_id":12395,"name":"Roman Vasylets","email":"pomeo92@gmail.com","username":"rvasilets"},"change_message_id":"c32cfc39dc595758829f7b1406fdc2a12cc5bd94","unresolved":false,"context_lines":[{"line_number":57,"context_line":"        mock_walk.side_effect \u003d ["},{"line_number":58,"context_line":"            [(\"foo_root\", [], [\"file1\", \"file2\", \"file3\"])]]"},{"line_number":59,"context_line":"        fileutils.pack_dir(\"rally-jobs/extra/murano/HelloReporter\","},{"line_number":60,"context_line":"                           os.path.join(\"fake_dir\", \"package.zip\"))"},{"line_number":61,"context_line":"        mock_zip_file.assert_called_once_with("},{"line_number":62,"context_line":"            os.path.join(\"fake_dir\", \"package.zip\"), mode\u003d\"w\")"},{"line_number":63,"context_line":"        mock_walk.assert_called_once_with("}],"source_content_type":"text/x-python","patch_set":15,"id":"9a41bdd9_c9e300d8","line":60,"in_reply_to":"9a41bdd9_50fa3f44","updated":"2015-07-15 16:37:43.000000000","message":"Ok","commit_id":"dababec6be9bda1c00bd0898f02e349a4b7f2d2c"},{"author":{"_account_id":10475,"name":"Alexander Maretskiy","email":"amaretskiy@mirantis.com","username":"maretskiy"},"change_message_id":"da523d5212013635a15ec160fb366e2d111eecf3","unresolved":false,"context_lines":[{"line_number":59,"context_line":"        fileutils.pack_dir(\"rally-jobs/extra/murano/HelloReporter\","},{"line_number":60,"context_line":"                           os.path.join(\"fake_dir\", \"package.zip\"))"},{"line_number":61,"context_line":"        mock_zip_file.assert_called_once_with("},{"line_number":62,"context_line":"            os.path.join(\"fake_dir\", \"package.zip\"), mode\u003d\"w\")"},{"line_number":63,"context_line":"        mock_walk.assert_called_once_with("},{"line_number":64,"context_line":"            \"rally-jobs/extra/murano/HelloReporter\")"},{"line_number":65,"context_line":"        zip_file.assert_has_calls("}],"source_content_type":"text/x-python","patch_set":15,"id":"9a41bdd9_1097d7ec","line":62,"updated":"2015-07-15 13:17:20.000000000","message":"ditto","commit_id":"dababec6be9bda1c00bd0898f02e349a4b7f2d2c"},{"author":{"_account_id":12395,"name":"Roman Vasylets","email":"pomeo92@gmail.com","username":"rvasilets"},"change_message_id":"c32cfc39dc595758829f7b1406fdc2a12cc5bd94","unresolved":false,"context_lines":[{"line_number":59,"context_line":"        fileutils.pack_dir(\"rally-jobs/extra/murano/HelloReporter\","},{"line_number":60,"context_line":"                           os.path.join(\"fake_dir\", \"package.zip\"))"},{"line_number":61,"context_line":"        mock_zip_file.assert_called_once_with("},{"line_number":62,"context_line":"            os.path.join(\"fake_dir\", \"package.zip\"), mode\u003d\"w\")"},{"line_number":63,"context_line":"        mock_walk.assert_called_once_with("},{"line_number":64,"context_line":"            \"rally-jobs/extra/murano/HelloReporter\")"},{"line_number":65,"context_line":"        zip_file.assert_has_calls("}],"source_content_type":"text/x-python","patch_set":15,"id":"9a41bdd9_89e978b9","line":62,"in_reply_to":"9a41bdd9_1097d7ec","updated":"2015-07-15 16:37:43.000000000","message":"Done","commit_id":"dababec6be9bda1c00bd0898f02e349a4b7f2d2c"},{"author":{"_account_id":13609,"name":"Pavel Boldin","email":"pboldin@mirantis.com","username":"pboldin"},"change_message_id":"2996601df1d6e3aa2197a78f75ad90c2beb7f543","unresolved":false,"context_lines":[{"line_number":52,"context_line":"    @mock.patch(\"os.walk\")"},{"line_number":53,"context_line":"    @mock.patch(\"zipfile.ZipFile\")"},{"line_number":54,"context_line":"    def test_pack_dir(self, mock_zip_file, mock_walk):"},{"line_number":55,"context_line":"        zip_file \u003d mock.Mock()"},{"line_number":56,"context_line":"        mock_zip_file.return_value \u003d zip_file"},{"line_number":57,"context_line":"        mock_walk.side_effect \u003d ["},{"line_number":58,"context_line":"            [(\"foo_root\", [], [\"file1\", \"file2\", \"file3\"])]]"}],"source_content_type":"text/x-python","patch_set":16,"id":"9a41bdd9_973c9dc0","line":55,"updated":"2015-07-18 13:56:29.000000000","message":"Boris usually unlikes introducing duplicate variables.\n\nYou really can use `mock_zip_file.return_value\u0027 instead of a `zip_file\u0027 everywhere below. This will decrease readability though.","commit_id":"c809cca23d1d4a241b367697fb7dd8afac170da5"},{"author":{"_account_id":13609,"name":"Pavel Boldin","email":"pboldin@mirantis.com","username":"pboldin"},"change_message_id":"d666fa0710b0b5ad33b30a17c3985b005f40abaf","unresolved":false,"context_lines":[{"line_number":52,"context_line":"    @mock.patch(\"os.walk\")"},{"line_number":53,"context_line":"    @mock.patch(\"zipfile.ZipFile\")"},{"line_number":54,"context_line":"    def test_pack_dir(self, mock_zip_file, mock_walk):"},{"line_number":55,"context_line":"        mock_zip_file.return_value \u003d mock.Mock()"},{"line_number":56,"context_line":"        mock_walk.side_effect \u003d ["},{"line_number":57,"context_line":"            [(\"foo_root\", [], [\"file1\", \"file2\", \"file3\"])]]"},{"line_number":58,"context_line":"        fileutils.pack_dir(\"rally-jobs/extra/murano/HelloReporter\","}],"source_content_type":"text/x-python","patch_set":17,"id":"3a50d1a3_9f5d5349","line":55,"updated":"2015-07-22 13:37:51.000000000","message":"This line is not required.","commit_id":"1da386c3198ac2bfb89fec1b6eee44b02e8bf032"},{"author":{"_account_id":12395,"name":"Roman Vasylets","email":"pomeo92@gmail.com","username":"rvasilets"},"change_message_id":"792db329c8547b0e502bb279843c303c777d2f8f","unresolved":false,"context_lines":[{"line_number":52,"context_line":"    @mock.patch(\"os.walk\")"},{"line_number":53,"context_line":"    @mock.patch(\"zipfile.ZipFile\")"},{"line_number":54,"context_line":"    def test_pack_dir(self, mock_zip_file, mock_walk):"},{"line_number":55,"context_line":"        mock_zip_file.return_value \u003d mock.Mock()"},{"line_number":56,"context_line":"        mock_walk.side_effect \u003d ["},{"line_number":57,"context_line":"            [(\"foo_root\", [], [\"file1\", \"file2\", \"file3\"])]]"},{"line_number":58,"context_line":"        fileutils.pack_dir(\"rally-jobs/extra/murano/HelloReporter\","}],"source_content_type":"text/x-python","patch_set":17,"id":"3a50d1a3_ce23f303","line":55,"in_reply_to":"3a50d1a3_9f5d5349","updated":"2015-07-29 13:24:41.000000000","message":"Done","commit_id":"1da386c3198ac2bfb89fec1b6eee44b02e8bf032"}],"tests/unit/plugins/openstack/context/test_murano_packages.py":[{"author":{"_account_id":13609,"name":"Pavel Boldin","email":"pboldin@mirantis.com","username":"pboldin"},"change_message_id":"a4e07b8bb069e833ab810fa53ca80a36007c50e5","unresolved":false,"context_lines":[{"line_number":80,"context_line":""},{"line_number":81,"context_line":"    @mock.patch(\"rally.plugins.openstack.context.murano_packages.osclients\")"},{"line_number":82,"context_line":"    @mock.patch(\"%s.images.resource_manager.cleanup\" % CTX)"},{"line_number":83,"context_line":"    def test_cleanup_with_zip(self, mock_cleanup, mock_osclients):"},{"line_number":84,"context_line":"        mock_app \u003d mock.Mock(id\u003d\"fake_app_id\")"},{"line_number":85,"context_line":"        (mock_osclients.Clients().murano()."},{"line_number":86,"context_line":"            packages.create.return_value) \u003d mock_app"}],"source_content_type":"text/x-python","patch_set":13,"id":"ba3cc151_17c4383e","line":83,"updated":"2015-07-06 16:10:54.000000000","message":"Please convert all the tests to use ClientsTestCase instead.","commit_id":"74be50ba89cf84ac2f2a07643355f0282d11b842"},{"author":{"_account_id":11748,"name":"Chris St. Pierre","email":"cstpierr@cisco.com","username":"stpierre"},"change_message_id":"bb2f5a59b34d7b3a2fb38034271b6bc8d6db4f72","unresolved":false,"context_lines":[{"line_number":80,"context_line":""},{"line_number":81,"context_line":"    @mock.patch(\"rally.plugins.openstack.context.murano_packages.osclients\")"},{"line_number":82,"context_line":"    @mock.patch(\"%s.images.resource_manager.cleanup\" % CTX)"},{"line_number":83,"context_line":"    def test_cleanup_with_zip(self, mock_cleanup, mock_osclients):"},{"line_number":84,"context_line":"        mock_app \u003d mock.Mock(id\u003d\"fake_app_id\")"},{"line_number":85,"context_line":"        (mock_osclients.Clients().murano()."},{"line_number":86,"context_line":"            packages.create.return_value) \u003d mock_app"}],"source_content_type":"text/x-python","patch_set":13,"id":"ba3cc151_626aa41c","line":83,"in_reply_to":"ba3cc151_17c4383e","updated":"2015-07-06 16:27:52.000000000","message":"ClientsTestCase works with scenarios, not contexts; context classes use Clients objects differently. (TODO(stpierre): Create a test case class that works with contexts and other objects that use osclients.Clients)","commit_id":"74be50ba89cf84ac2f2a07643355f0282d11b842"},{"author":{"_account_id":13609,"name":"Pavel Boldin","email":"pboldin@mirantis.com","username":"pboldin"},"change_message_id":"a4e07b8bb069e833ab810fa53ca80a36007c50e5","unresolved":false,"context_lines":[{"line_number":110,"context_line":"        murano_ctx.cleanup()"},{"line_number":111,"context_line":""},{"line_number":112,"context_line":"        mock_subprocess.call.assert_called_with(["},{"line_number":113,"context_line":"            \"rm\", \"io.murano.apps.HelloReporter\"])"},{"line_number":114,"context_line":"        mock_cleanup.assert_called_once_with(names\u003d[\"murano.packages\"],"},{"line_number":115,"context_line":"                                             users\u003dmurano_ctx.context[\"users\"])"}],"source_content_type":"text/x-python","patch_set":13,"id":"ba3cc151_77f58481","line":113,"updated":"2015-07-06 16:10:54.000000000","message":"Should it remove the directory? If yes, then use shutil.rmtree instead.","commit_id":"74be50ba89cf84ac2f2a07643355f0282d11b842"},{"author":{"_account_id":13609,"name":"Pavel Boldin","email":"pboldin@mirantis.com","username":"pboldin"},"change_message_id":"2996601df1d6e3aa2197a78f75ad90c2beb7f543","unresolved":false,"context_lines":[{"line_number":86,"context_line":"            packages.create.return_value) \u003d mock_app"},{"line_number":87,"context_line":""},{"line_number":88,"context_line":"        murano_ctx \u003d murano_packages.PackageGenerator(self._get_context())"},{"line_number":89,"context_line":"        murano_ctx.setup()"},{"line_number":90,"context_line":"        murano_ctx.cleanup()"},{"line_number":91,"context_line":""},{"line_number":92,"context_line":"        mock_cleanup.assert_called_once_with(names\u003d[\"murano.packages\"],"}],"source_content_type":"text/x-python","patch_set":16,"id":"9a41bdd9_7741d938","line":89,"updated":"2015-07-18 13:56:29.000000000","message":"Generally speaking, calling the .setup() in test_cleanup is a wrong thing.\n\nOne should fake the setup\u0027ed context and call a cleanup on it.","commit_id":"c809cca23d1d4a241b367697fb7dd8afac170da5"}]}
