)]}'
{"openstack_dashboard/dashboards/admin/snapshots/forms.py":[{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"07e04cc1c459dbe8bd6b2a5d2e855646a28591c6","unresolved":false,"context_lines":[{"line_number":32,"context_line":")"},{"line_number":33,"context_line":""},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"def populate_status_choices(initial, status_choices):"},{"line_number":36,"context_line":"    current_status \u003d initial.get(\u0027status\u0027)"},{"line_number":37,"context_line":"    status_choices \u003d [status for status in status_choices"},{"line_number":38,"context_line":"                      if status[0] !\u003d current_status]"}],"source_content_type":"text/x-python","patch_set":8,"id":"1f013ff3_53a37f50","line":35,"range":{"start_line":35,"start_character":28,"end_line":35,"end_character":35},"updated":"2017-05-14 13:27:20.000000000","message":"Looking at the code in __init__() below, it looks better to change \u0027initial\u0027 to \u0027current_status\u0027. we no longer passes the initial dict. If we pass current_status directly,  L.52 will be unnecessary.","commit_id":"75adb38ba0daafe823d92dcb4abda7d0a8cd9f23"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"07e04cc1c459dbe8bd6b2a5d2e855646a28591c6","unresolved":false,"context_lines":[{"line_number":46,"context_line":""},{"line_number":47,"context_line":"    def __init__(self, request, *args, **kwargs):"},{"line_number":48,"context_line":"        # Obtain the localized status to use as initial value, has to be done"},{"line_number":49,"context_line":"        # before super() otherwise the inital value will get overwritten back"},{"line_number":50,"context_line":"        # to the raw value"},{"line_number":51,"context_line":"        initial \u003d kwargs.get(\u0027initial\u0027, {})"},{"line_number":52,"context_line":"        status \u003d {\u0027status\u0027: initial[\u0027status\u0027]}"}],"source_content_type":"text/x-python","patch_set":8,"id":"1f013ff3_1324d70c","line":49,"range":{"start_line":49,"start_character":39,"end_line":49,"end_character":45},"updated":"2017-05-14 13:27:20.000000000","message":"-\u003e initial","commit_id":"75adb38ba0daafe823d92dcb4abda7d0a8cd9f23"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"07e04cc1c459dbe8bd6b2a5d2e855646a28591c6","unresolved":false,"context_lines":[{"line_number":49,"context_line":"        # before super() otherwise the inital value will get overwritten back"},{"line_number":50,"context_line":"        # to the raw value"},{"line_number":51,"context_line":"        initial \u003d kwargs.get(\u0027initial\u0027, {})"},{"line_number":52,"context_line":"        status \u003d {\u0027status\u0027: initial[\u0027status\u0027]}"},{"line_number":53,"context_line":"        choices \u003d dict(STATUS_CHOICES)"},{"line_number":54,"context_line":"        localized_status \u003d choices[initial[\u0027status\u0027]]"},{"line_number":55,"context_line":"        initial[\u0027status\u0027] \u003d localized_status"}],"source_content_type":"text/x-python","patch_set":8,"id":"1f013ff3_b39403ea","line":52,"range":{"start_line":52,"start_character":28,"end_line":52,"end_character":45},"updated":"2017-05-14 13:27:20.000000000","message":"This is not compatible with the previous line. According to L.51, \"initial\" can be {} and if so initial[\u0027status\u0027] can raise an error.\n\nBTW, is there a case where kwargs does not contain \u0027initial\u0027?\nLooking at django.views.generic.edit, FormMixin.get_forms() always passes \u0027initial\u0027, so L.51-52 can be:\n\n  status \u003d {\u0027status\u0027: kwargs[\u0027initial\u0027][\u0027status\u0027]}","commit_id":"75adb38ba0daafe823d92dcb4abda7d0a8cd9f23"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"07e04cc1c459dbe8bd6b2a5d2e855646a28591c6","unresolved":false,"context_lines":[{"line_number":52,"context_line":"        status \u003d {\u0027status\u0027: initial[\u0027status\u0027]}"},{"line_number":53,"context_line":"        choices \u003d dict(STATUS_CHOICES)"},{"line_number":54,"context_line":"        localized_status \u003d choices[initial[\u0027status\u0027]]"},{"line_number":55,"context_line":"        initial[\u0027status\u0027] \u003d localized_status"},{"line_number":56,"context_line":"        super(UpdateStatus, self).__init__(request, *args, **kwargs)"},{"line_number":57,"context_line":""},{"line_number":58,"context_line":"        self.fields[\u0027status\u0027].choices \u003d populate_status_choices("}],"source_content_type":"text/x-python","patch_set":8,"id":"1f013ff3_3388f3c4","line":55,"updated":"2017-05-14 13:27:20.000000000","message":"Considering my comment at L.35 below, L.51-55 can be simplified as follows:\n\n  current_status \u003d kwargs[\u0027initial\u0027][\u0027status\u0027]\n  choices \u003d dict(STATUS_CHOICES)\n  kwargs[\u0027initial\u0027][\u0027status\u0027] \u003d choices(current_status)\n\nI think L.54 and 55 can be merged.","commit_id":"75adb38ba0daafe823d92dcb4abda7d0a8cd9f23"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"07e04cc1c459dbe8bd6b2a5d2e855646a28591c6","unresolved":false,"context_lines":[{"line_number":56,"context_line":"        super(UpdateStatus, self).__init__(request, *args, **kwargs)"},{"line_number":57,"context_line":""},{"line_number":58,"context_line":"        self.fields[\u0027status\u0027].choices \u003d populate_status_choices("},{"line_number":59,"context_line":"            status, STATUS_CHOICES)"},{"line_number":60,"context_line":""},{"line_number":61,"context_line":"    def handle(self, request, data):"},{"line_number":62,"context_line":"        try:"}],"source_content_type":"text/x-python","patch_set":8,"id":"1f013ff3_f3916bf3","line":59,"range":{"start_line":59,"start_character":12,"end_line":59,"end_character":18},"updated":"2017-05-14 13:27:20.000000000","message":"and this would be \"current_status\"","commit_id":"75adb38ba0daafe823d92dcb4abda7d0a8cd9f23"}],"openstack_dashboard/dashboards/admin/volumes/forms.py":[{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"3d1e2d733a7994ddd9cb24eb6dda760e4ca95739","unresolved":false,"context_lines":[{"line_number":41,"context_line":"    (\u0027error\u0027, _(\u0027Error\u0027)),"},{"line_number":42,"context_line":"    (\u0027error_deleting\u0027, _(\u0027Error Deleting\u0027)),"},{"line_number":43,"context_line":"    (\u0027in-use\u0027, _(\u0027In-use\u0027)),"},{"line_number":44,"context_line":"    (\u0027maintenance\u0027, _(\u0027Maintenance\u0027)),"},{"line_number":45,"context_line":")"},{"line_number":46,"context_line":""},{"line_number":47,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"3f044301_9a50c50c","line":44,"updated":"2017-05-05 15:43:10.000000000","message":"How about constructing STATUS_CHOICES based on STATUS_DISPLAY_CHOICES in project tables to prevent the mismatch of displayed strings. In addition, the current approach produces two different entries \u0027Attaching\u0027 and \u0027Attaching\u0027 with context information. Thought?\n\nMy idea is:\n\n  SETTABLE_STATUSES \u003d (\n      \u0027attaching\u0027, \u0027available\u0027, .... \u0027maintenance\u0027)\n  STATUS_CHOICES \u003d tuple(\n     x for x in volumes_tables.STATUS_DISPLAY_CHOICES\n     x[0] not in SETTABLE_STATUSES\n  )","commit_id":"710aa988212bd6aa75577f0e8b1fb0dcfcf141b2"},{"author":{"_account_id":11592,"name":"Julie Gravel","email":"julie.gravel@suse.com","username":"jgravel"},"change_message_id":"7ef5c920cb5894200bab050be26f6e659069040e","unresolved":false,"context_lines":[{"line_number":41,"context_line":"    (\u0027error\u0027, _(\u0027Error\u0027)),"},{"line_number":42,"context_line":"    (\u0027error_deleting\u0027, _(\u0027Error Deleting\u0027)),"},{"line_number":43,"context_line":"    (\u0027in-use\u0027, _(\u0027In-use\u0027)),"},{"line_number":44,"context_line":"    (\u0027maintenance\u0027, _(\u0027Maintenance\u0027)),"},{"line_number":45,"context_line":")"},{"line_number":46,"context_line":""},{"line_number":47,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"3f044301_a9e0ddcd","line":44,"in_reply_to":"3f044301_9a50c50c","updated":"2017-05-05 19:11:52.000000000","message":"Referring to the STATUS_DISPLAY_CHOICES in project tables is a good idea. But where and when did you see the two different entries for Attaching? I didn\u0027t see that.","commit_id":"710aa988212bd6aa75577f0e8b1fb0dcfcf141b2"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"9ac8aad6069ad4bce88648a334272c7b5e2caa58","unresolved":false,"context_lines":[{"line_number":41,"context_line":"    (\u0027error\u0027, _(\u0027Error\u0027)),"},{"line_number":42,"context_line":"    (\u0027error_deleting\u0027, _(\u0027Error Deleting\u0027)),"},{"line_number":43,"context_line":"    (\u0027in-use\u0027, _(\u0027In-use\u0027)),"},{"line_number":44,"context_line":"    (\u0027maintenance\u0027, _(\u0027Maintenance\u0027)),"},{"line_number":45,"context_line":")"},{"line_number":46,"context_line":""},{"line_number":47,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"3f044301_bbf38073","line":44,"in_reply_to":"3f044301_a9e0ddcd","updated":"2017-05-05 20:06:44.000000000","message":"I see two different entries in the POT file [1].\nYou will see two \"Attaching\".\n\n  msgid \"Attaching\"\n\nThe one has no \u0027msgctxt\u0027 and the other has. This is what I said.\n\n[1] http://tarballs.openstack.org/translation-source/horizon/master/openstack_dashboard/locale/django.pot","commit_id":"710aa988212bd6aa75577f0e8b1fb0dcfcf141b2"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"3d1e2d733a7994ddd9cb24eb6dda760e4ca95739","unresolved":false,"context_lines":[{"line_number":223,"context_line":"        initial \u003d kwargs.get(\u0027initial\u0027, {})"},{"line_number":224,"context_line":"        choices \u003d dict(STATUS_CHOICES)"},{"line_number":225,"context_line":"        statustext \u003d choices[initial.get(\u0027status\u0027)]"},{"line_number":226,"context_line":"        initial.update({\u0027status\u0027: statustext})"},{"line_number":227,"context_line":"        super(UpdateStatus, self).__init__(request, *args, **kwargs)"},{"line_number":228,"context_line":""},{"line_number":229,"context_line":"        self.fields[\u0027status\u0027].choices \u003d ("}],"source_content_type":"text/x-python","patch_set":3,"id":"3f044301_3a741168","line":226,"range":{"start_line":226,"start_character":8,"end_line":226,"end_character":46},"updated":"2017-05-05 15:43:10.000000000","message":"I think this is a tricky hack. populate_status_choices below excludes the current value from the choice list, but by setting the initial[\u0027status\u0027] to a translation you change the initial value. As a result, the choice list contains the current value. If this is the intended change, I don\u0027t think changing the logic above populate_status_choices looks a straight-forward approach.","commit_id":"710aa988212bd6aa75577f0e8b1fb0dcfcf141b2"},{"author":{"_account_id":11592,"name":"Julie Gravel","email":"julie.gravel@suse.com","username":"jgravel"},"change_message_id":"7ef5c920cb5894200bab050be26f6e659069040e","unresolved":false,"context_lines":[{"line_number":223,"context_line":"        initial \u003d kwargs.get(\u0027initial\u0027, {})"},{"line_number":224,"context_line":"        choices \u003d dict(STATUS_CHOICES)"},{"line_number":225,"context_line":"        statustext \u003d choices[initial.get(\u0027status\u0027)]"},{"line_number":226,"context_line":"        initial.update({\u0027status\u0027: statustext})"},{"line_number":227,"context_line":"        super(UpdateStatus, self).__init__(request, *args, **kwargs)"},{"line_number":228,"context_line":""},{"line_number":229,"context_line":"        self.fields[\u0027status\u0027].choices \u003d ("}],"source_content_type":"text/x-python","patch_set":3,"id":"3f044301_89352149","line":226,"range":{"start_line":226,"start_character":8,"end_line":226,"end_character":46},"in_reply_to":"3f044301_3a741168","updated":"2017-05-05 19:11:52.000000000","message":"Not sure why I didn\u0027t see the current value in the list when I first tested this fix. I\u0027m almost positive that I wasn\u0027t drunk at the time :-) \nI changed the first parameter to populate_status_choices to use the raw data of the current value so the value should not be included in the list any more.","commit_id":"710aa988212bd6aa75577f0e8b1fb0dcfcf141b2"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"4564416ccd286dd89124dcf24fb71538bd36ffda","unresolved":false,"context_lines":[{"line_number":217,"context_line":"    status \u003d forms.ThemableChoiceField(label\u003d_(\"Status\"))"},{"line_number":218,"context_line":""},{"line_number":219,"context_line":"    def __init__(self, request, *args, **kwargs):"},{"line_number":220,"context_line":"        # Obtain the localized status to use as initial value"},{"line_number":221,"context_line":"        initial \u003d kwargs.get(\u0027initial\u0027, {})"},{"line_number":222,"context_line":"        status \u003d {\u0027status\u0027: initial.get(\u0027status\u0027)}"},{"line_number":223,"context_line":"        choices \u003d dict(STATUS_CHOICES)"}],"source_content_type":"text/x-python","patch_set":5,"id":"3f044301_9b3b24ea","line":220,"range":{"start_line":220,"start_character":8,"end_line":220,"end_character":61},"updated":"2017-05-05 20:12:11.000000000","message":"Do we need to place the below before super()? If so, it would be nice to add the reason in the comment.","commit_id":"15b48ff4dd61d1e83ec83066d7bf0160d5df284a"},{"author":{"_account_id":11592,"name":"Julie Gravel","email":"julie.gravel@suse.com","username":"jgravel"},"change_message_id":"cbbd28bd7d5fc37869957792522089910cb5f237","unresolved":false,"context_lines":[{"line_number":217,"context_line":"    status \u003d forms.ThemableChoiceField(label\u003d_(\"Status\"))"},{"line_number":218,"context_line":""},{"line_number":219,"context_line":"    def __init__(self, request, *args, **kwargs):"},{"line_number":220,"context_line":"        # Obtain the localized status to use as initial value"},{"line_number":221,"context_line":"        initial \u003d kwargs.get(\u0027initial\u0027, {})"},{"line_number":222,"context_line":"        status \u003d {\u0027status\u0027: initial.get(\u0027status\u0027)}"},{"line_number":223,"context_line":"        choices \u003d dict(STATUS_CHOICES)"}],"source_content_type":"text/x-python","patch_set":5,"id":"3f044301_d462993e","line":220,"range":{"start_line":220,"start_character":8,"end_line":220,"end_character":61},"in_reply_to":"3f044301_9b3b24ea","updated":"2017-05-05 23:17:08.000000000","message":"done","commit_id":"15b48ff4dd61d1e83ec83066d7bf0160d5df284a"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"4564416ccd286dd89124dcf24fb71538bd36ffda","unresolved":false,"context_lines":[{"line_number":221,"context_line":"        initial \u003d kwargs.get(\u0027initial\u0027, {})"},{"line_number":222,"context_line":"        status \u003d {\u0027status\u0027: initial.get(\u0027status\u0027)}"},{"line_number":223,"context_line":"        choices \u003d dict(STATUS_CHOICES)"},{"line_number":224,"context_line":"        statustext \u003d choices[initial.get(\u0027status\u0027)]"},{"line_number":225,"context_line":"        initial.update({\u0027status\u0027: statustext})"},{"line_number":226,"context_line":"        super(UpdateStatus, self).__init__(request, *args, **kwargs)"},{"line_number":227,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"3f044301_5b60fc01","line":224,"range":{"start_line":224,"start_character":29,"end_line":224,"end_character":50},"updated":"2017-05-05 20:12:11.000000000","message":"This can be \u0027status\u0027","commit_id":"15b48ff4dd61d1e83ec83066d7bf0160d5df284a"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"4564416ccd286dd89124dcf24fb71538bd36ffda","unresolved":false,"context_lines":[{"line_number":221,"context_line":"        initial \u003d kwargs.get(\u0027initial\u0027, {})"},{"line_number":222,"context_line":"        status \u003d {\u0027status\u0027: initial.get(\u0027status\u0027)}"},{"line_number":223,"context_line":"        choices \u003d dict(STATUS_CHOICES)"},{"line_number":224,"context_line":"        statustext \u003d choices[initial.get(\u0027status\u0027)]"},{"line_number":225,"context_line":"        initial.update({\u0027status\u0027: statustext})"},{"line_number":226,"context_line":"        super(UpdateStatus, self).__init__(request, *args, **kwargs)"},{"line_number":227,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"3f044301_db31ac0d","line":224,"range":{"start_line":224,"start_character":8,"end_line":224,"end_character":18},"updated":"2017-05-05 20:12:11.000000000","message":"What does \u0027ext\u0027 mean?","commit_id":"15b48ff4dd61d1e83ec83066d7bf0160d5df284a"},{"author":{"_account_id":11592,"name":"Julie Gravel","email":"julie.gravel@suse.com","username":"jgravel"},"change_message_id":"cbbd28bd7d5fc37869957792522089910cb5f237","unresolved":false,"context_lines":[{"line_number":221,"context_line":"        initial \u003d kwargs.get(\u0027initial\u0027, {})"},{"line_number":222,"context_line":"        status \u003d {\u0027status\u0027: initial.get(\u0027status\u0027)}"},{"line_number":223,"context_line":"        choices \u003d dict(STATUS_CHOICES)"},{"line_number":224,"context_line":"        statustext \u003d choices[initial.get(\u0027status\u0027)]"},{"line_number":225,"context_line":"        initial.update({\u0027status\u0027: statustext})"},{"line_number":226,"context_line":"        super(UpdateStatus, self).__init__(request, *args, **kwargs)"},{"line_number":227,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"3f044301_d414d9a2","line":224,"range":{"start_line":224,"start_character":8,"end_line":224,"end_character":18},"in_reply_to":"3f044301_db31ac0d","updated":"2017-05-05 23:17:08.000000000","message":"It\u0027s not \u0027ext\u0027 but \u0027text\u0027 as in \u0027status text\u0027. I changed it to localized_status to it\u0027s a bit clearer.","commit_id":"15b48ff4dd61d1e83ec83066d7bf0160d5df284a"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"4564416ccd286dd89124dcf24fb71538bd36ffda","unresolved":false,"context_lines":[{"line_number":222,"context_line":"        status \u003d {\u0027status\u0027: initial.get(\u0027status\u0027)}"},{"line_number":223,"context_line":"        choices \u003d dict(STATUS_CHOICES)"},{"line_number":224,"context_line":"        statustext \u003d choices[initial.get(\u0027status\u0027)]"},{"line_number":225,"context_line":"        initial.update({\u0027status\u0027: statustext})"},{"line_number":226,"context_line":"        super(UpdateStatus, self).__init__(request, *args, **kwargs)"},{"line_number":227,"context_line":""},{"line_number":228,"context_line":"        self.fields[\u0027status\u0027].choices \u003d ("}],"source_content_type":"text/x-python","patch_set":5,"id":"3f044301_1b5a744e","line":225,"range":{"start_line":225,"start_character":8,"end_line":225,"end_character":46},"updated":"2017-05-05 20:12:11.000000000","message":"initial[\u0027status\u0027] \u003d statusext","commit_id":"15b48ff4dd61d1e83ec83066d7bf0160d5df284a"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"07e04cc1c459dbe8bd6b2a5d2e855646a28591c6","unresolved":false,"context_lines":[{"line_number":216,"context_line":"class UpdateStatus(forms.SelfHandlingForm):"},{"line_number":217,"context_line":"    status \u003d forms.ThemableChoiceField(label\u003d_(\"Status\"))"},{"line_number":218,"context_line":""},{"line_number":219,"context_line":"    def __init__(self, request, *args, **kwargs):"},{"line_number":220,"context_line":"        # Obtain the localized status to use as initial value, has to be done"},{"line_number":221,"context_line":"        # before super() otherwise the inital value will get overwritten back"},{"line_number":222,"context_line":"        # to the raw value"}],"source_content_type":"text/x-python","patch_set":8,"id":"1f013ff3_d38e6fcf","line":219,"updated":"2017-05-14 13:27:20.000000000","message":"All my comments in snapshots/forms apply to here.","commit_id":"75adb38ba0daafe823d92dcb4abda7d0a8cd9f23"}]}
