)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":26968,"name":"Amit O","email":"oamit.work@gmail.com","username":"amito"},"change_message_id":"c59915fb07e08835584c263bd1486d01da4a5bcd","unresolved":false,"context_lines":[{"line_number":10,"context_line":"this patch set:"},{"line_number":11,"context_line":"- replace dict.iteritems() with six.iteritems(dict)"},{"line_number":12,"context_line":"- replace print msg with print(msg)"},{"line_number":13,"context_line":"- replace string.xxx(str, ...) with str.xxx(...) where .xxx is a string method"},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"Change-Id: I30582184904dc19e9cb4ca171b1fd2d161e09c48"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"df7087c5_e831e40c","line":13,"updated":"2018-03-12 21:12:01.000000000","message":"This patch doesn\u0027t cover this, since the methods for which you changed this (count and split) do work on strings that get a substring as an argument.","commit_id":"2bcda1c8c4daea87918ce7d5782428993490ae07"},{"author":{"_account_id":26968,"name":"Amit O","email":"oamit.work@gmail.com","username":"amito"},"change_message_id":"2a1917a373cc215f354b9d26959d1d7368d5e861","unresolved":false,"context_lines":[{"line_number":20,"context_line":"  returns an iterator instead of a list."},{"line_number":21,"context_line":"  Another way is to use list to force a copy of the keys"},{"line_number":22,"context_line":"  to be made."},{"line_number":23,"context_line":"- use getattr instead of relying on overriden __get_attr__"},{"line_number":24,"context_line":"  in the client to get params that not neccesarily need to"},{"line_number":25,"context_line":"  be available (share_group_id and supports_share_migration)"},{"line_number":26,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":6,"id":"bf659307_24977093","line":23,"range":{"start_line":23,"start_character":46,"end_line":23,"end_character":58},"updated":"2018-03-25 11:01:46.000000000","message":"__getattr__\n(not so important :) ).","commit_id":"1a625a4ca80bf2a00585859ccf6faae66c63382f"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"a9880dff07120f3342691353e1999c3cf2ac3d6c","unresolved":false,"context_lines":[{"line_number":27,"context_line":""},{"line_number":28,"context_line":"Plus, enable py35 and py35dj20 jobs in tox and drop"},{"line_number":29,"context_line":"old oslo-incubator files (install_venv.py)"},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"Change-Id: I30582184904dc19e9cb4ca171b1fd2d161e09c48"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":9,"id":"5f7c97a3_3f59ab59","line":30,"range":{"start_line":30,"start_character":0,"end_line":30,"end_character":0},"updated":"2018-05-04 16:00:40.000000000","message":"Worth referring to the community-wide blueprint/spec here?\nhttps://governance.openstack.org/tc/goals/pike/python35.html","commit_id":"ee47d3645dff72abfc062180015dda72ceea81fc"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"c6f1f01b7a8776706f559400e58574dd977b8812","unresolved":false,"context_lines":[{"line_number":27,"context_line":""},{"line_number":28,"context_line":"Plus, enable py35 and py35dj20 jobs in tox and drop"},{"line_number":29,"context_line":"old oslo-incubator files (install_venv.py)"},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"Change-Id: I30582184904dc19e9cb4ca171b1fd2d161e09c48"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":9,"id":"5f7c97a3_ade35105","line":30,"range":{"start_line":30,"start_character":0,"end_line":30,"end_character":0},"in_reply_to":"5f7c97a3_3f59ab59","updated":"2018-05-04 17:13:17.000000000","message":"py35dj20 job does not belong to project-config, so it is better to add it in this patch.","commit_id":"ee47d3645dff72abfc062180015dda72ceea81fc"}],"manila_ui/dashboards/admin/share_group_types/forms.py":[{"author":{"_account_id":26968,"name":"Amit O","email":"oamit.work@gmail.com","username":"amito"},"change_message_id":"2a1917a373cc215f354b9d26959d1d7368d5e861","unresolved":false,"context_lines":[{"line_number":102,"context_line":"        super(self.__class__, self).__init__(*args, **kwargs)"},{"line_number":103,"context_line":"        # NOTE(vponomaryov): parse existing group specs"},{"line_number":104,"context_line":"        #                    to str view for textarea html element"},{"line_number":105,"context_line":"        # es_str \u003d \"\""},{"line_number":106,"context_line":"        # import pdb; pdb.set_trace()"},{"line_number":107,"context_line":"        # for k, v in self.initial[\"group_specs\"].items():"},{"line_number":108,"context_line":"        #    es_str +\u003d \"%s\u003d%s\\r\\n\" % (k, v)"},{"line_number":109,"context_line":"        # self.initial[\"group_specs\"] \u003d es_str"},{"line_number":110,"context_line":""},{"line_number":111,"context_line":"    group_specs \u003d forms.CharField("},{"line_number":112,"context_line":"        required\u003dFalse, label\u003d_(\"Group specs\"),"}],"source_content_type":"text/x-python","patch_set":6,"id":"bf659307_84743c9b","line":109,"range":{"start_line":105,"start_character":8,"end_line":109,"end_character":46},"updated":"2018-03-25 11:01:46.000000000","message":"if this code is not needed, remove instead of leaving commented code.","commit_id":"1a625a4ca80bf2a00585859ccf6faae66c63382f"},{"author":{"_account_id":6413,"name":"Victoria Martinez de la Cruz","email":"victoria@redhat.com","username":"vkmc"},"change_message_id":"ab42744b41b9be95fc9436a97a96b9c8e9249605","unresolved":false,"context_lines":[{"line_number":102,"context_line":"        super(self.__class__, self).__init__(*args, **kwargs)"},{"line_number":103,"context_line":"        # NOTE(vponomaryov): parse existing group specs"},{"line_number":104,"context_line":"        #                    to str view for textarea html element"},{"line_number":105,"context_line":"        # es_str \u003d \"\""},{"line_number":106,"context_line":"        # import pdb; pdb.set_trace()"},{"line_number":107,"context_line":"        # for k, v in self.initial[\"group_specs\"].items():"},{"line_number":108,"context_line":"        #    es_str +\u003d \"%s\u003d%s\\r\\n\" % (k, v)"},{"line_number":109,"context_line":"        # self.initial[\"group_specs\"] \u003d es_str"},{"line_number":110,"context_line":""},{"line_number":111,"context_line":"    group_specs \u003d forms.CharField("},{"line_number":112,"context_line":"        required\u003dFalse, label\u003d_(\"Group specs\"),"}],"source_content_type":"text/x-python","patch_set":6,"id":"9f6a8fd7_965a7080","line":109,"range":{"start_line":105,"start_character":8,"end_line":109,"end_character":46},"in_reply_to":"bf659307_84743c9b","updated":"2018-04-24 20:09:06.000000000","message":"Done","commit_id":"1a625a4ca80bf2a00585859ccf6faae66c63382f"}],"manila_ui/dashboards/admin/share_group_types/views.py":[{"author":{"_account_id":26968,"name":"Amit O","email":"oamit.work@gmail.com","username":"amito"},"change_message_id":"2a1917a373cc215f354b9d26959d1d7368d5e861","unresolved":false,"context_lines":[{"line_number":56,"context_line":"        for sgt in share_group_types:"},{"line_number":57,"context_line":"            sgt.group_specs \u003d common_utils.metadata_to_str("},{"line_number":58,"context_line":"                sgt.group_specs, 8, 45)"},{"line_number":59,"context_line":"            import pdb; pdb.set_trace()"},{"line_number":60,"context_line":"            sgt.share_types \u003d \", \".join("},{"line_number":61,"context_line":"                [st_mapping[st] for st in sgt.share_types])"},{"line_number":62,"context_line":"        return share_group_types"}],"source_content_type":"text/x-python","patch_set":6,"id":"bf659307_e43418e1","line":59,"updated":"2018-03-25 11:01:46.000000000","message":"remove","commit_id":"1a625a4ca80bf2a00585859ccf6faae66c63382f"},{"author":{"_account_id":6413,"name":"Victoria Martinez de la Cruz","email":"victoria@redhat.com","username":"vkmc"},"change_message_id":"ab42744b41b9be95fc9436a97a96b9c8e9249605","unresolved":false,"context_lines":[{"line_number":56,"context_line":"        for sgt in share_group_types:"},{"line_number":57,"context_line":"            sgt.group_specs \u003d common_utils.metadata_to_str("},{"line_number":58,"context_line":"                sgt.group_specs, 8, 45)"},{"line_number":59,"context_line":"            import pdb; pdb.set_trace()"},{"line_number":60,"context_line":"            sgt.share_types \u003d \", \".join("},{"line_number":61,"context_line":"                [st_mapping[st] for st in sgt.share_types])"},{"line_number":62,"context_line":"        return share_group_types"}],"source_content_type":"text/x-python","patch_set":6,"id":"9f6a8fd7_167500fa","line":59,"in_reply_to":"bf659307_e43418e1","updated":"2018-04-24 20:09:06.000000000","message":"Done","commit_id":"1a625a4ca80bf2a00585859ccf6faae66c63382f"}],"manila_ui/dashboards/admin/share_types/forms.py":[{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"7564e098d64e336115e4e782ccdb76ce16fe4b83","unresolved":false,"context_lines":[{"line_number":97,"context_line":"        # NOTE(vponomaryov): parse existing extra specs"},{"line_number":98,"context_line":"        #                    to str view for textarea html element"},{"line_number":99,"context_line":"        es_str \u003d \"\""},{"line_number":100,"context_line":"        for k, v in six.iteritems(self.initial[\"extra_specs\"]):"},{"line_number":101,"context_line":"            es_str +\u003d \"%s\u003d%s\\r\\n\" % (k, v)"},{"line_number":102,"context_line":"        self.initial[\"extra_specs\"] \u003d es_str"},{"line_number":103,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"9f6a8fd7_d71b38c7","line":100,"range":{"start_line":100,"start_character":20,"end_line":100,"end_character":62},"updated":"2018-04-22 12:22:41.000000000","message":"Consider using just .items().\n\n  self.initial[\u0027extra_specs\u0027].items()","commit_id":"1a625a4ca80bf2a00585859ccf6faae66c63382f"}],"manila_ui/dashboards/project/share_groups/forms.py":[{"author":{"_account_id":26968,"name":"Amit O","email":"oamit.work@gmail.com","username":"amito"},"change_message_id":"03cd63c5351ec72fe135d8bd454f867e545e1cab","unresolved":false,"context_lines":[{"line_number":180,"context_line":""},{"line_number":181,"context_line":"    def clean(self):"},{"line_number":182,"context_line":"        cleaned_data \u003d super(CreateShareGroupForm, self).clean()"},{"line_number":183,"context_line":"        errors \u003d [k for k in six.viewkeys(self.errors)]"},{"line_number":184,"context_line":""},{"line_number":185,"context_line":"        for k in errors:"},{"line_number":186,"context_line":"            sgt_name \u003d k.split(self.st_field_name_prefix)[-1]"}],"source_content_type":"text/x-python","patch_set":4,"id":"df7087c5_fde56ddd","line":183,"updated":"2018-03-20 07:18:34.000000000","message":"this is the same as doing:\nerrors \u003d self.errors.keys()\nIn Python 2 it will return a list, in Python 3 a dict_keys object.\nThe difference shouldn\u0027t matter as it\u0027s an iterable (so the \"for k in errors\" will work).\nAlso, the name \"errors\" is confusing, since you already have \"self.errors\"... errors_keys or something of the sort will be more explicit and clear.","commit_id":"19eb7187e8b690c0ec5b0e50bdc842e2ce704d34"},{"author":{"_account_id":26968,"name":"Amit O","email":"oamit.work@gmail.com","username":"amito"},"change_message_id":"2a1917a373cc215f354b9d26959d1d7368d5e861","unresolved":false,"context_lines":[{"line_number":180,"context_line":""},{"line_number":181,"context_line":"    def clean(self):"},{"line_number":182,"context_line":"        cleaned_data \u003d super(CreateShareGroupForm, self).clean()"},{"line_number":183,"context_line":"        errors \u003d list(self.errors)"},{"line_number":184,"context_line":""},{"line_number":185,"context_line":"        for k in errors:"},{"line_number":186,"context_line":"            sgt_name \u003d k.split(self.st_field_name_prefix)[-1]"},{"line_number":187,"context_line":"            chosen_sgt \u003d cleaned_data.get(\"sgt\")"},{"line_number":188,"context_line":"            if (k.startswith(self.st_field_name_prefix) and"}],"source_content_type":"text/x-python","patch_set":6,"id":"bf659307_647d686d","line":185,"range":{"start_line":183,"start_character":0,"end_line":185,"end_character":24},"updated":"2018-03-25 11:01:46.000000000","message":"Please change the name from \"errors\" to \"errors_keys\" or something more explicit, same for \"k\".\nAlso, list(self.errors) is somewhat implicit; although we know list() on a dict lists its keys, it\u0027s still not that clear in brief reading, i\u0027d still change it to the previous version:\nlist(self.errors.keys())\nAs list() takes any iterable (generators included), so it should work.","commit_id":"1a625a4ca80bf2a00585859ccf6faae66c63382f"},{"author":{"_account_id":6413,"name":"Victoria Martinez de la Cruz","email":"victoria@redhat.com","username":"vkmc"},"change_message_id":"ab42744b41b9be95fc9436a97a96b9c8e9249605","unresolved":false,"context_lines":[{"line_number":180,"context_line":""},{"line_number":181,"context_line":"    def clean(self):"},{"line_number":182,"context_line":"        cleaned_data \u003d super(CreateShareGroupForm, self).clean()"},{"line_number":183,"context_line":"        errors \u003d list(self.errors)"},{"line_number":184,"context_line":""},{"line_number":185,"context_line":"        for k in errors:"},{"line_number":186,"context_line":"            sgt_name \u003d k.split(self.st_field_name_prefix)[-1]"},{"line_number":187,"context_line":"            chosen_sgt \u003d cleaned_data.get(\"sgt\")"},{"line_number":188,"context_line":"            if (k.startswith(self.st_field_name_prefix) and"}],"source_content_type":"text/x-python","patch_set":6,"id":"9f6a8fd7_d67b08f2","line":185,"range":{"start_line":183,"start_character":0,"end_line":185,"end_character":24},"in_reply_to":"9f6a8fd7_f728bce2","updated":"2018-04-24 20:09:06.000000000","message":"Done","commit_id":"1a625a4ca80bf2a00585859ccf6faae66c63382f"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"7564e098d64e336115e4e782ccdb76ce16fe4b83","unresolved":false,"context_lines":[{"line_number":180,"context_line":""},{"line_number":181,"context_line":"    def clean(self):"},{"line_number":182,"context_line":"        cleaned_data \u003d super(CreateShareGroupForm, self).clean()"},{"line_number":183,"context_line":"        errors \u003d list(self.errors)"},{"line_number":184,"context_line":""},{"line_number":185,"context_line":"        for k in errors:"},{"line_number":186,"context_line":"            sgt_name \u003d k.split(self.st_field_name_prefix)[-1]"},{"line_number":187,"context_line":"            chosen_sgt \u003d cleaned_data.get(\"sgt\")"},{"line_number":188,"context_line":"            if (k.startswith(self.st_field_name_prefix) and"}],"source_content_type":"text/x-python","patch_set":6,"id":"9f6a8fd7_f728bce2","line":185,"range":{"start_line":183,"start_character":0,"end_line":185,"end_character":24},"in_reply_to":"bf659307_647d686d","updated":"2018-04-22 12:22:41.000000000","message":"Ah,... i made a same comment in manila_ui/dashboards/project/shares/forms.py (which I looked first).","commit_id":"1a625a4ca80bf2a00585859ccf6faae66c63382f"}],"manila_ui/dashboards/project/shares/forms.py":[{"author":{"_account_id":26968,"name":"Amit O","email":"oamit.work@gmail.com","username":"amito"},"change_message_id":"03cd63c5351ec72fe135d8bd454f867e545e1cab","unresolved":false,"context_lines":[{"line_number":176,"context_line":""},{"line_number":177,"context_line":"    def clean(self):"},{"line_number":178,"context_line":"        cleaned_data \u003d super(CreateForm, self).clean()"},{"line_number":179,"context_line":"        errors \u003d [k for k in six.viewkeys(self.errors)]"},{"line_number":180,"context_line":""},{"line_number":181,"context_line":"        # NOTE(vponomaryov): skip errors for share-network fields that are not"},{"line_number":182,"context_line":"        # related to chosen share type."}],"source_content_type":"text/x-python","patch_set":4,"id":"df7087c5_9dd6b1f1","line":179,"updated":"2018-03-20 07:18:34.000000000","message":"same comment as in share_groups/forms.py","commit_id":"19eb7187e8b690c0ec5b0e50bdc842e2ce704d34"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"7564e098d64e336115e4e782ccdb76ce16fe4b83","unresolved":false,"context_lines":[{"line_number":180,"context_line":""},{"line_number":181,"context_line":"        # NOTE(vponomaryov): skip errors for share-network fields that are not"},{"line_number":182,"context_line":"        # related to chosen share type."},{"line_number":183,"context_line":"        for k in errors:"},{"line_number":184,"context_line":"            st_name \u003d k.split(self.sn_field_name_prefix)[-1]"},{"line_number":185,"context_line":"            chosen_st \u003d cleaned_data.get(\u0027share_type\u0027)"},{"line_number":186,"context_line":"            if (k.startswith(self.sn_field_name_prefix) and"}],"source_content_type":"text/x-python","patch_set":6,"id":"9f6a8fd7_370b947d","line":183,"range":{"start_line":183,"start_character":17,"end_line":183,"end_character":23},"updated":"2018-04-22 12:22:41.000000000","message":"In Python3, keys() returns a generator. L.189 triggers a size change of dict during iteration. It will lead to an exception.\n\nI think you need to change L.179 to:\n\n errors \u003d list(self.errors.keys())","commit_id":"1a625a4ca80bf2a00585859ccf6faae66c63382f"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"7564e098d64e336115e4e782ccdb76ce16fe4b83","unresolved":false,"context_lines":[{"line_number":299,"context_line":"    def __init__(self, *args, **kwargs):"},{"line_number":300,"context_line":"        super(UpdateMetadataForm, self).__init__(*args, **kwargs)"},{"line_number":301,"context_line":"        meta_str \u003d \"\""},{"line_number":302,"context_line":"        for k, v in six.iteritems(self.initial[\"metadata\"]):"},{"line_number":303,"context_line":"            meta_str +\u003d \"%s\u003d%s\\r\\n\" % (k, v)"},{"line_number":304,"context_line":"        self.initial[\"metadata\"] \u003d meta_str"},{"line_number":305,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"9f6a8fd7_971aa0c9","line":302,"range":{"start_line":302,"start_character":20,"end_line":302,"end_character":33},"updated":"2018-04-22 12:22:41.000000000","message":"There is no need to use six.iteritems(). self.initial[\u0027metadata\u0027].items() is suggested.","commit_id":"1a625a4ca80bf2a00585859ccf6faae66c63382f"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"e30c6ee5c3dec2e12bfd88588c2495520df8acd8","unresolved":false,"context_lines":[{"line_number":176,"context_line":""},{"line_number":177,"context_line":"    def clean(self):"},{"line_number":178,"context_line":"        cleaned_data \u003d super(CreateForm, self).clean()"},{"line_number":179,"context_line":"        form_errors \u003d self.errors.keys()"},{"line_number":180,"context_line":""},{"line_number":181,"context_line":"        # NOTE(vponomaryov): skip errors for share-network fields that are not"},{"line_number":182,"context_line":"        # related to chosen share type."}],"source_content_type":"text/x-python","patch_set":8,"id":"9f6a8fd7_edf583ee","line":179,"updated":"2018-05-02 16:14:41.000000000","message":"You need to do similar things as for manila_ui/dashboards/project/share_groups/forms.py\nbecause the dict could be changed by .pop().","commit_id":"e1fcb2c07c608fbbefa141f7fdb372f232adcd9e"}],"manila_ui/dashboards/utils.py":[{"author":{"_account_id":26968,"name":"Amit O","email":"oamit.work@gmail.com","username":"amito"},"change_message_id":"c59915fb07e08835584c263bd1486d01da4a5bcd","unresolved":false,"context_lines":[{"line_number":42,"context_line":"    unset_list \u003d []"},{"line_number":43,"context_line":"    msg \u003d \"\""},{"line_number":44,"context_line":"    for string in strings:"},{"line_number":45,"context_line":"        if \"\u003d\".count() \u003d\u003d 0:"},{"line_number":46,"context_line":"            # Key for unsetting"},{"line_number":47,"context_line":"            key \u003d string.strip(\u0027\\\"\\\u0027\\ \u0027)"},{"line_number":48,"context_line":"            if len(key) not in range(1, 256):"}],"source_content_type":"text/x-python","patch_set":1,"id":"df7087c5_688954c8","line":45,"updated":"2018-03-12 21:12:01.000000000","message":"You\u0027re still counting the occurrences of \"\u003d\" inside the variable string, so this shouldn\u0027t change.","commit_id":"2bcda1c8c4daea87918ce7d5782428993490ae07"},{"author":{"_account_id":26968,"name":"Amit O","email":"oamit.work@gmail.com","username":"amito"},"change_message_id":"c59915fb07e08835584c263bd1486d01da4a5bcd","unresolved":false,"context_lines":[{"line_number":53,"context_line":"                unset_list.append(key)"},{"line_number":54,"context_line":"        else:"},{"line_number":55,"context_line":"            # Key-value pair for setting"},{"line_number":56,"context_line":"            pair \u003d [p.strip(\u0027\\\"\\\u0027\\ \u0027) for p in \"\u003d\".split(1)]"},{"line_number":57,"context_line":"            if not all(len(p) in range(1, 256) for p in pair):"},{"line_number":58,"context_line":"                msg \u003d _(\"All keys and values must be in range from 1 to 255.\")"},{"line_number":59,"context_line":"            elif pair[0] in list(set_dict.keys()):"}],"source_content_type":"text/x-python","patch_set":1,"id":"df7087c5_8884e8b2","line":56,"updated":"2018-03-12 21:12:01.000000000","message":"Same as above, only for split.","commit_id":"2bcda1c8c4daea87918ce7d5782428993490ae07"},{"author":{"_account_id":26968,"name":"Amit O","email":"oamit.work@gmail.com","username":"amito"},"change_message_id":"03cd63c5351ec72fe135d8bd454f867e545e1cab","unresolved":false,"context_lines":[{"line_number":79,"context_line":"        return metadata"},{"line_number":80,"context_line":""},{"line_number":81,"context_line":"    meta \u003d []"},{"line_number":82,"context_line":"    meta_keys \u003d list(metadata.keys())"},{"line_number":83,"context_line":"    meta_keys.sort()"},{"line_number":84,"context_line":"    meta_keys \u003d meta_keys[:meta_visible_limit]"},{"line_number":85,"context_line":"    for k in meta_keys:"}],"source_content_type":"text/x-python","patch_set":4,"id":"df7087c5_9def91af","line":82,"updated":"2018-03-20 07:18:34.000000000","message":"just do:\nmeta_keys \u003d sorted(metadata.keys())\nsorted will sort any iterable (both in Python 2 and 3) and will return the sorted iterable as a list, as opposed to .sort() which doesn\u0027t exist for dict_keys and sorts lists in-place.","commit_id":"19eb7187e8b690c0ec5b0e50bdc842e2ce704d34"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"7564e098d64e336115e4e782ccdb76ce16fe4b83","unresolved":false,"context_lines":[{"line_number":80,"context_line":""},{"line_number":81,"context_line":"    meta \u003d []"},{"line_number":82,"context_line":"    meta_keys \u003d sorted(metadata.keys())"},{"line_number":83,"context_line":"    meta_keys.sort()"},{"line_number":84,"context_line":"    meta_keys \u003d meta_keys[:meta_visible_limit]"},{"line_number":85,"context_line":"    for k in meta_keys:"},{"line_number":86,"context_line":"        k_shortenned \u003d k"}],"source_content_type":"text/x-python","patch_set":6,"id":"9f6a8fd7_b74564b6","line":83,"range":{"start_line":83,"start_character":4,"end_line":83,"end_character":20},"updated":"2018-04-22 12:22:41.000000000","message":"If you use sorted() above, this line will be unnecessary.","commit_id":"1a625a4ca80bf2a00585859ccf6faae66c63382f"},{"author":{"_account_id":6413,"name":"Victoria Martinez de la Cruz","email":"victoria@redhat.com","username":"vkmc"},"change_message_id":"ab42744b41b9be95fc9436a97a96b9c8e9249605","unresolved":false,"context_lines":[{"line_number":80,"context_line":""},{"line_number":81,"context_line":"    meta \u003d []"},{"line_number":82,"context_line":"    meta_keys \u003d sorted(metadata.keys())"},{"line_number":83,"context_line":"    meta_keys.sort()"},{"line_number":84,"context_line":"    meta_keys \u003d meta_keys[:meta_visible_limit]"},{"line_number":85,"context_line":"    for k in meta_keys:"},{"line_number":86,"context_line":"        k_shortenned \u003d k"}],"source_content_type":"text/x-python","patch_set":6,"id":"9f6a8fd7_301b6cca","line":83,"range":{"start_line":83,"start_character":4,"end_line":83,"end_character":20},"in_reply_to":"9f6a8fd7_b74564b6","updated":"2018-04-24 20:09:06.000000000","message":"Done","commit_id":"1a625a4ca80bf2a00585859ccf6faae66c63382f"}],"manila_ui/tests/dashboards/admin/share_group_types/tests.py":[{"author":{"_account_id":26968,"name":"Amit O","email":"oamit.work@gmail.com","username":"amito"},"change_message_id":"2a1917a373cc215f354b9d26959d1d7368d5e861","unresolved":false,"context_lines":[{"line_number":27,"context_line":""},{"line_number":28,"context_line":"    def setUp(self):"},{"line_number":29,"context_line":"        super(self.__class__, self).setUp()"},{"line_number":30,"context_line":"        self.sgt \u003d test_data.share_group_type"},{"line_number":31,"context_line":"        self.sgt_p \u003d test_data.share_group_type_private"},{"line_number":32,"context_line":"        self.url \u003d reverse("},{"line_number":33,"context_line":"            \u0027horizon:admin:share_group_types:update\u0027, args\u003d[self.sgt.id])"},{"line_number":34,"context_line":"        self.mock_object("}],"source_content_type":"text/x-python","patch_set":6,"id":"bf659307_ffb4a137","line":31,"range":{"start_line":30,"start_character":8,"end_line":31,"end_character":55},"updated":"2018-03-25 11:01:46.000000000","message":"I don\u0027t entirely understand why copy is no longer needed?","commit_id":"1a625a4ca80bf2a00585859ccf6faae66c63382f"},{"author":{"_account_id":6413,"name":"Victoria Martinez de la Cruz","email":"victoria@redhat.com","username":"vkmc"},"change_message_id":"ab42744b41b9be95fc9436a97a96b9c8e9249605","unresolved":false,"context_lines":[{"line_number":27,"context_line":""},{"line_number":28,"context_line":"    def setUp(self):"},{"line_number":29,"context_line":"        super(self.__class__, self).setUp()"},{"line_number":30,"context_line":"        self.sgt \u003d test_data.share_group_type"},{"line_number":31,"context_line":"        self.sgt_p \u003d test_data.share_group_type_private"},{"line_number":32,"context_line":"        self.url \u003d reverse("},{"line_number":33,"context_line":"            \u0027horizon:admin:share_group_types:update\u0027, args\u003d[self.sgt.id])"},{"line_number":34,"context_line":"        self.mock_object("}],"source_content_type":"text/x-python","patch_set":6,"id":"9f6a8fd7_1020a8f6","line":31,"range":{"start_line":30,"start_character":8,"end_line":31,"end_character":55},"in_reply_to":"9f6a8fd7_977f00df","updated":"2018-04-24 20:09:06.000000000","message":"I\u0027m not entirely sure why we were making copies on the first place. Data should be created and deleted for each of the tests independently.","commit_id":"1a625a4ca80bf2a00585859ccf6faae66c63382f"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"7564e098d64e336115e4e782ccdb76ce16fe4b83","unresolved":false,"context_lines":[{"line_number":27,"context_line":""},{"line_number":28,"context_line":"    def setUp(self):"},{"line_number":29,"context_line":"        super(self.__class__, self).setUp()"},{"line_number":30,"context_line":"        self.sgt \u003d test_data.share_group_type"},{"line_number":31,"context_line":"        self.sgt_p \u003d test_data.share_group_type_private"},{"line_number":32,"context_line":"        self.url \u003d reverse("},{"line_number":33,"context_line":"            \u0027horizon:admin:share_group_types:update\u0027, args\u003d[self.sgt.id])"},{"line_number":34,"context_line":"        self.mock_object("}],"source_content_type":"text/x-python","patch_set":6,"id":"9f6a8fd7_977f00df","line":31,"range":{"start_line":30,"start_character":8,"end_line":31,"end_character":55},"in_reply_to":"bf659307_ffb4a137","updated":"2018-04-22 12:22:41.000000000","message":"IIUC, test_data will be prepared for every test.\nUnless we change some data inside a single test, we don\u0027t need copy.copy() (or deepcopy).","commit_id":"1a625a4ca80bf2a00585859ccf6faae66c63382f"}],"manila_ui/tests/helpers.py":[{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"e30c6ee5c3dec2e12bfd88588c2495520df8acd8","unresolved":false,"context_lines":[{"line_number":51,"context_line":""},{"line_number":52,"context_line":"class BaseAdminViewTests(ManilaTestsMixin, helpers.BaseAdminViewTests):"},{"line_number":53,"context_line":""},{"line_number":54,"context_line":"    def tearDown(self):"},{"line_number":55,"context_line":"        super(BaseAdminViewTests, self).tearDown()"},{"line_number":56,"context_line":""},{"line_number":57,"context_line":""},{"line_number":58,"context_line":"class APITestCase(ManilaTestsMixin, helpers.APITestCase):"}],"source_content_type":"text/x-python","patch_set":8,"id":"9f6a8fd7_ed0b4321","line":55,"range":{"start_line":54,"start_character":0,"end_line":55,"end_character":50},"updated":"2018-05-02 16:14:41.000000000","message":"This does no extra things. I wonder why this is needed.","commit_id":"e1fcb2c07c608fbbefa141f7fdb372f232adcd9e"}],"tools/install_venv.py":[{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"7564e098d64e336115e4e782ccdb76ce16fe4b83","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":6,"id":"9f6a8fd7_173d302a","updated":"2018-04-22 12:22:41.000000000","message":"I am a bit surprised that it is still maintained. Most projects have dropped this a while ago.","commit_id":"1a625a4ca80bf2a00585859ccf6faae66c63382f"},{"author":{"_account_id":6413,"name":"Victoria Martinez de la Cruz","email":"victoria@redhat.com","username":"vkmc"},"change_message_id":"ab42744b41b9be95fc9436a97a96b9c8e9249605","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":6,"id":"9f6a8fd7_703ec4b8","in_reply_to":"9f6a8fd7_173d302a","updated":"2018-04-24 20:09:06.000000000","message":"What are you referring to?","commit_id":"1a625a4ca80bf2a00585859ccf6faae66c63382f"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"6d9f37d8f6ff42563779ad856927f8ac551d03d0","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":6,"id":"9f6a8fd7_3f82d0c9","in_reply_to":"9f6a8fd7_703ec4b8","updated":"2018-05-01 23:37:45.000000000","message":"This file originally came from oslo-incubator which was retired a couple of years ago. https://review.openstack.org/#/c/82383/ is one example of oslo-incubator sync.","commit_id":"1a625a4ca80bf2a00585859ccf6faae66c63382f"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"e30c6ee5c3dec2e12bfd88588c2495520df8acd8","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":8,"id":"9f6a8fd7_eda7c30a","updated":"2018-05-02 16:14:41.000000000","message":"+1 to drop this file.","commit_id":"e1fcb2c07c608fbbefa141f7fdb372f232adcd9e"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"a9880dff07120f3342691353e1999c3cf2ac3d6c","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":9,"id":"5f7c97a3_1f686ff3","updated":"2018-05-04 16:00:40.000000000","message":"This file is referenced in the doc, would you update the docs for installation?\nhttps://github.com/openstack/manila-ui/blob/master/doc/source/install/installation.rst","commit_id":"ee47d3645dff72abfc062180015dda72ceea81fc"}],"tox.ini":[{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"7564e098d64e336115e4e782ccdb76ce16fe4b83","unresolved":false,"context_lines":[{"line_number":24,"context_line":"[testenv:venv]"},{"line_number":25,"context_line":"commands \u003d {posargs}"},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"# Django-1.8 is LTS"},{"line_number":28,"context_line":"[testenv:py27dj18]"},{"line_number":29,"context_line":"basepython \u003d python2.7"},{"line_number":30,"context_line":"commands \u003d pip install django\u003e\u003d1.8,\u003c1.9"},{"line_number":31,"context_line":"           /bin/bash run_tests.sh -N --no-pep8 {posargs}"},{"line_number":32,"context_line":""},{"line_number":33,"context_line":"[testenv:py27dj19]"},{"line_number":34,"context_line":"basepython \u003d python2.7"},{"line_number":35,"context_line":"commands \u003d pip install django\u003e\u003d1.9,\u003c1.10"},{"line_number":36,"context_line":"           /bin/bash run_tests.sh -N --no-pep8 {posargs}"},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"[testenv:py27dj110]"},{"line_number":39,"context_line":"basepython \u003d python2.7"},{"line_number":40,"context_line":"commands \u003d pip install django\u003e\u003d1.10,\u003c1.11"},{"line_number":41,"context_line":"           /bin/bash run_tests.sh -N --no-pep8 {posargs}"},{"line_number":42,"context_line":""},{"line_number":43,"context_line":"[testenv:py35dj20]"},{"line_number":44,"context_line":"basepython \u003d python3.5"}],"source_content_type":"text/x-properties","patch_set":6,"id":"9f6a8fd7_5737284e","line":41,"range":{"start_line":27,"start_character":0,"end_line":41,"end_character":56},"updated":"2018-04-22 12:22:41.000000000","message":"Horizon dropped django 1.8 to 1.10 support in Rocky, so they can be dropped in this context.","commit_id":"1a625a4ca80bf2a00585859ccf6faae66c63382f"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"7564e098d64e336115e4e782ccdb76ce16fe4b83","unresolved":false,"context_lines":[{"line_number":42,"context_line":""},{"line_number":43,"context_line":"[testenv:py35dj20]"},{"line_number":44,"context_line":"basepython \u003d python3.5"},{"line_number":45,"context_line":"commands \u003d pip install -U --pre django"},{"line_number":46,"context_line":"           /bin/bash run_tests.sh -N --no-pep8 {posargs}"},{"line_number":47,"context_line":""},{"line_number":48,"context_line":"[testenv:cover]"}],"source_content_type":"text/x-properties","patch_set":6,"id":"9f6a8fd7_f73f5c22","line":45,"range":{"start_line":45,"start_character":11,"end_line":45,"end_character":38},"updated":"2018-04-22 12:22:41.000000000","message":"This way is not suggested because it potentially upgrades other python modules. Consider the approach used in horizon. https://github.com/openstack/horizon/blob/master/tox.ini#L40","commit_id":"1a625a4ca80bf2a00585859ccf6faae66c63382f"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"e30c6ee5c3dec2e12bfd88588c2495520df8acd8","unresolved":false,"context_lines":[{"line_number":42,"context_line":""},{"line_number":43,"context_line":"[testenv:py35dj20]"},{"line_number":44,"context_line":"basepython \u003d python3.5"},{"line_number":45,"context_line":"commands \u003d pip install -U --pre django"},{"line_number":46,"context_line":"           /bin/bash run_tests.sh -N --no-pep8 {posargs}"},{"line_number":47,"context_line":""},{"line_number":48,"context_line":"[testenv:cover]"}],"source_content_type":"text/x-properties","patch_set":8,"id":"9f6a8fd7_cda43f0b","line":45,"range":{"start_line":45,"start_character":10,"end_line":45,"end_character":38},"updated":"2018-05-02 16:14:41.000000000","message":"This is not safe and potentially installs django 2.1 pre. Consider the following instead:\n\n pip install django\u003e\u003d2.0,\u003c2.1\n\nhttp://git.openstack.org/cgit/openstack/horizon/tree/tox.ini#n40","commit_id":"e1fcb2c07c608fbbefa141f7fdb372f232adcd9e"}]}
