)]}'
{"/PATCHSET_LEVEL":[{"author":{"_account_id":30615,"name":"Tushar Trambak Gite","email":"tushargite96@gmail.com","username":"tushargite96"},"change_message_id":"a09ae2b7a016390b536d5d8f6967b07c4ccf887d","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":14,"id":"f25b1924_0d7a7c11","updated":"2022-03-23 10:41:09.000000000","message":"LGTM","commit_id":"9e6dbab7ee7dbb300b59966cb76e672716fc9668"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"1f657867706f4a74eac25d2b3d19e958393feaee","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":15,"id":"d8c950ff_f3ea649d","updated":"2023-02-15 15:43:46.000000000","message":"This has been out here for a long time now. Looking at it again, I\u0027m wondering why this is needed. It\u0027s possible I\u0027ve been away long enough that I don\u0027t fully grasp where this is handled, but all dates in Cinder should be in UTC. So it\u0027s not clear to me why or where timezone handling is needed.","commit_id":"fb78572fa5f0759d323f0c6ed871168d785c19bf"},{"author":{"_account_id":8846,"name":"Hao Wang","display_name":"Hao Wang","email":"sxmatch1986@gmail.com","username":"sxmatch"},"change_message_id":"007d842cde18bc4a979ebec375604ebc4b5399aa","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":15,"id":"175f0c17_4b54b4f5","in_reply_to":"d8c950ff_f3ea649d","updated":"2023-02-22 01:20:32.000000000","message":"Hi Sean, nice to see you here again. I found this issue when I was working on time comparison filters for snapshots. I got the updated_at time from snapshot object, it\u0027s \"datetime.datetime(2020, 7, 6, 3, 47, 47, 24856, tzinfo\u003ddatetime.timezone.utc)\", and when I passed this time to getting snapshots url, the query string will be \u0027/v3/snapshots?updated_at\u003dgt:2020-07-06 03:47:47.024856+00:00\u0027. Of course, it UTC time. But I think since we follow the ISO 8601 time format, that\u0027s huge possibility that user pass the time string with timezone offset (UTC timezone +00:00 for example) and now Cinder will raise an exception for it. So the main point of this patch is to handle right to the ISO time format, it\u0027s no harm to Cinder\u0027s object with UTC time I think.","commit_id":"fb78572fa5f0759d323f0c6ed871168d785c19bf"},{"author":{"_account_id":30615,"name":"Tushar Trambak Gite","email":"tushargite96@gmail.com","username":"tushargite96"},"change_message_id":"1a61ab1bfeb738b874e5cf153596c6b67b0a666f","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":16,"id":"27f16376_3e760d80","updated":"2023-03-01 08:20:28.000000000","message":"LGTM but would you update the bug description as well got confuse with u cycle description","commit_id":"c0b601d87f86c1ba1656f2cf3613248d197a4308"},{"author":{"_account_id":8846,"name":"Hao Wang","display_name":"Hao Wang","email":"sxmatch1986@gmail.com","username":"sxmatch"},"change_message_id":"e1b1edc87a39e3ece06cec9f2faa86205053695d","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":16,"id":"634f7f89_64fd9054","updated":"2023-02-23 08:26:18.000000000","message":"recheck","commit_id":"c0b601d87f86c1ba1656f2cf3613248d197a4308"},{"author":{"_account_id":8846,"name":"Hao Wang","display_name":"Hao Wang","email":"sxmatch1986@gmail.com","username":"sxmatch"},"change_message_id":"bdfd3a6f8cba5195db1556a5606af1e2b4351d6b","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":16,"id":"7ff33c27_ae5228c7","updated":"2023-02-23 01:13:39.000000000","message":"recheck","commit_id":"c0b601d87f86c1ba1656f2cf3613248d197a4308"},{"author":{"_account_id":8846,"name":"Hao Wang","display_name":"Hao Wang","email":"sxmatch1986@gmail.com","username":"sxmatch"},"change_message_id":"5eaef020858ddf5725987c6f4c3bde437463230e","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":16,"id":"7cf5063e_196b9075","in_reply_to":"27f16376_3e760d80","updated":"2023-03-09 02:14:04.000000000","message":"Sure.","commit_id":"c0b601d87f86c1ba1656f2cf3613248d197a4308"},{"author":{"_account_id":31779,"name":"Jean Pierre Roquesalane","display_name":"happystacker","email":"jeanpierre.roquesalane@dell.com","username":"happystacker"},"change_message_id":"bc8612cef0464f719d874e608fd9afce8ac17f89","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":18,"id":"4344b4cf_c8a74215","updated":"2023-03-22 08:11:43.000000000","message":"This patch was pushed more than 3 years ago, and still not merged. Is this still relevant? ","commit_id":"3fdd43e2f17335775a3cd2154d1ba4d29e9b9ea9"},{"author":{"_account_id":8846,"name":"Hao Wang","display_name":"Hao Wang","email":"sxmatch1986@gmail.com","username":"sxmatch"},"change_message_id":"4eb7e596c39d2e048fdd68def49c41c5a660fe44","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":18,"id":"52e4f8db_446a5ee5","in_reply_to":"4344b4cf_c8a74215","updated":"2023-04-29 03:42:29.000000000","message":"Although it\u0027s been a long time, I still work on it and hope it merges soon. Eric and I also had some discussions on Mar 07, I think it\u0027s relevant as fixing this bug, maybe not a big one, but worth improving.","commit_id":"3fdd43e2f17335775a3cd2154d1ba4d29e9b9ea9"},{"author":{"_account_id":30615,"name":"Tushar Trambak Gite","email":"tushargite96@gmail.com","username":"tushargite96"},"change_message_id":"7c751343e4395510f2b6b1cf9cde0ff07aebc937","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":19,"id":"fd8074b6_9696c20c","updated":"2023-07-05 03:54:15.000000000","message":"lgtm","commit_id":"52d63d6965d54dd7109eae91ad8ce462c66c854e"},{"author":{"_account_id":8846,"name":"Hao Wang","display_name":"Hao Wang","email":"sxmatch1986@gmail.com","username":"sxmatch"},"change_message_id":"4d3a4c371d1a6476b194b097f769b12dbac6f47a","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":19,"id":"d8061886_f5c81975","updated":"2023-06-19 19:31:46.000000000","message":"recheck","commit_id":"52d63d6965d54dd7109eae91ad8ce462c66c854e"},{"author":{"_account_id":13425,"name":"Simon Dodsley","email":"simon@purestorage.com","username":"sdodsley"},"change_message_id":"8b127ff89267da19072fe187670b0d793e4f854d","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":19,"id":"18a36ef2_cd68dc93","updated":"2023-06-19 16:53:17.000000000","message":"run Pure Storage CI","commit_id":"52d63d6965d54dd7109eae91ad8ce462c66c854e"},{"author":{"_account_id":8846,"name":"Hao Wang","display_name":"Hao Wang","email":"sxmatch1986@gmail.com","username":"sxmatch"},"change_message_id":"cfbaf703e0493a11b64e0b228e810356f87693b4","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":20,"id":"a180d41e_b3ad40f0","updated":"2023-10-11 17:24:43.000000000","message":"recheck","commit_id":"3687031405926a129b25a16584b354974db614c9"},{"author":{"_account_id":13425,"name":"Simon Dodsley","email":"simon@purestorage.com","username":"sdodsley"},"change_message_id":"15bb3a6f87b9624dba6cd38c008861c3e9f42b29","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":21,"id":"bdee4ffb_55fbf307","updated":"2023-12-04 15:53:30.000000000","message":"Looks good","commit_id":"940aeec3d1dee0b824e015ba6ab48b4035bcb984"},{"author":{"_account_id":31779,"name":"Jean Pierre Roquesalane","display_name":"happystacker","email":"jeanpierre.roquesalane@dell.com","username":"happystacker"},"change_message_id":"61cc0c634aa7d8683fa2b653bce7c17bbfb60c89","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":21,"id":"52706298_0d76bbcb","updated":"2023-12-06 13:35:53.000000000","message":"looks good, thks.","commit_id":"940aeec3d1dee0b824e015ba6ab48b4035bcb984"},{"author":{"_account_id":8846,"name":"Hao Wang","display_name":"Hao Wang","email":"sxmatch1986@gmail.com","username":"sxmatch"},"change_message_id":"742d5cb0b58a80e724aba86972109b0f8137d50a","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":21,"id":"2032b060_10b7483c","updated":"2023-11-28 23:18:54.000000000","message":"recheck","commit_id":"940aeec3d1dee0b824e015ba6ab48b4035bcb984"},{"author":{"_account_id":8846,"name":"Hao Wang","display_name":"Hao Wang","email":"sxmatch1986@gmail.com","username":"sxmatch"},"change_message_id":"bf47f0e5e6a204447443e739f0135fccd661ac66","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":21,"id":"f3181023_a5a73233","updated":"2023-11-30 18:16:48.000000000","message":"recheck","commit_id":"940aeec3d1dee0b824e015ba6ab48b4035bcb984"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"45a66fb3b5e535fad06cfa6c41fbb7250ecd8e42","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":23,"id":"954f1472_52b85a3c","updated":"2024-05-28 12:10:54.000000000","message":"I\u0027m not 100% about this one. The stance had always been that Cinder only operated on UTC time, explicitly not supporting time zones. This could be coming from user input though, so it may make sense in this case.","commit_id":"eb02cc1b7176ef966f326dbb07ede55c2e266261"},{"author":{"_account_id":8846,"name":"Hao Wang","display_name":"Hao Wang","email":"sxmatch1986@gmail.com","username":"sxmatch"},"change_message_id":"05df6f6c623ed4dd23c492a1b8c86987de23ffbf","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":23,"id":"c3f7ecf2_0b24ec04","in_reply_to":"954f1472_52b85a3c","updated":"2024-06-17 18:32:33.000000000","message":"Thank you Sean for reviewing this. Yes, the purpose of this patch is to let Cinder handle the user input with the format of time zone offset. It has no impact on the Cinder\u0027s internal operation.","commit_id":"eb02cc1b7176ef966f326dbb07ede55c2e266261"},{"author":{"_account_id":13425,"name":"Simon Dodsley","email":"simon@purestorage.com","username":"sdodsley"},"change_message_id":"201ab1be795ff08d0ba7b682e876691fd1184c9d","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":24,"id":"5468f22a_baa9ce92","updated":"2024-08-19 15:55:08.000000000","message":"run Pure Storage CI","commit_id":"5fa8a4c338c08cd12d71fbf053468b2403949ab3"},{"author":{"_account_id":35429,"name":"Biser Milanov","email":"biser.milanov@storpool.com","username":"sp-bmilanov"},"change_message_id":"e31dc8a398471ded8d284c5dcf91ee70343b6865","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":24,"id":"37d0c349_fadb9679","updated":"2025-03-26 08:49:08.000000000","message":"run-storpoolci","commit_id":"5fa8a4c338c08cd12d71fbf053468b2403949ab3"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"8d7479248b8d225bc904da5c6c25c449ed119a12","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":27,"id":"bbdf440a_e8785641","updated":"2025-08-22 12:08:23.000000000","message":"Looks like remaining concerns have been addressed. Looks good to me.","commit_id":"9971bed92e413d30389dba1ba944a9f648095218"}],"cinder/api/v3/volumes.py":[{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"72f1f676fdde5a712d4ce5011683f3f981aed22f","unresolved":false,"context_lines":[{"line_number":108,"context_line":"                for comparison_unit in comparison_units:"},{"line_number":109,"context_line":"                    try:"},{"line_number":110,"context_line":"                        # handle the time_zone offset in iso format."},{"line_number":111,"context_line":"                        if \" \" in comparison_unit and \"T\" not in comparison_unit:"},{"line_number":112,"context_line":"                            if len(comparison_unit.split(\" \")) \u003d\u003d 3:"},{"line_number":113,"context_line":"                                y_m_d \u003d comparison_unit.split(\" \")[0]"},{"line_number":114,"context_line":"                                h_m_s \u003d comparison_unit.split(\" \")[1]"}],"source_content_type":"text/x-python","patch_set":1,"id":"ff570b3c_6f7480ff","line":111,"updated":"2020-06-09 06:19:05.000000000","message":"pep8: E501 line too long (81 \u003e 79 characters)","commit_id":"27b49aab58d15e15c247f4a5314030fca94b755e"},{"author":{"_account_id":1736,"name":"Ivan Kolodyazhny","email":"e0ne@e0ne.info","username":"e0ne"},"change_message_id":"dca6b285adbfe40eb57314b0d26f0b19b8d73700","unresolved":false,"context_lines":[{"line_number":107,"context_line":"                operators \u003d common.get_time_comparsion_operators()"},{"line_number":108,"context_line":"                for comparison_unit in comparison_units:"},{"line_number":109,"context_line":"                    try:"},{"line_number":110,"context_line":"                        # handle the time_zone offset in iso format."},{"line_number":111,"context_line":"                        if \" \" in comparison_unit and \\"},{"line_number":112,"context_line":"                                \"T\" not in comparison_unit:"},{"line_number":113,"context_line":"                            if len(comparison_unit.split(\" \")) \u003d\u003d 3:"}],"source_content_type":"text/x-python","patch_set":2,"id":"ff570b3c_c2073a18","line":110,"updated":"2020-06-10 19:55:25.000000000","message":"Please, add unit-tests for this change to prevent the issue in the future","commit_id":"b86ec9631d392252dfd17564718813afc1d8725c"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"278f84515a88e140e44c982ab8121c8e56f8ed11","unresolved":false,"context_lines":[{"line_number":107,"context_line":"                for comparison_unit in comparison_units:"},{"line_number":108,"context_line":"                    try:"},{"line_number":109,"context_line":"                        # handle the time_zone offset in iso format."},{"line_number":110,"context_line":"                        if \" \" in comparison_unit and \\"},{"line_number":111,"context_line":"                                \"T\" not in comparison_unit:"},{"line_number":112,"context_line":"                            if len(comparison_unit.split(\" \")) \u003d\u003d 3:"},{"line_number":113,"context_line":"                                y_m_d \u003d comparison_unit.split(\" \")[0]"}],"source_content_type":"text/x-python","patch_set":9,"id":"bf51134e_35d559b8","line":110,"range":{"start_line":110,"start_character":54,"end_line":110,"end_character":55},"updated":"2020-07-08 11:27:36.000000000","message":"We\u0027ve made an effort to avoid using \\ to span multiple lines because it can cause subtle bugs. Please wrap the conditions for the if statement in () so it can span lines without using \\.","commit_id":"de00f1bf9bf885d50c88c1e75ed88ec6149fa1c2"},{"author":{"_account_id":8846,"name":"Hao Wang","display_name":"Hao Wang","email":"sxmatch1986@gmail.com","username":"sxmatch"},"change_message_id":"ec101946dee765369869f454fdb4f5ce999a8edc","unresolved":false,"context_lines":[{"line_number":107,"context_line":"                for comparison_unit in comparison_units:"},{"line_number":108,"context_line":"                    try:"},{"line_number":109,"context_line":"                        # handle the time_zone offset in iso format."},{"line_number":110,"context_line":"                        if \" \" in comparison_unit and \\"},{"line_number":111,"context_line":"                                \"T\" not in comparison_unit:"},{"line_number":112,"context_line":"                            if len(comparison_unit.split(\" \")) \u003d\u003d 3:"},{"line_number":113,"context_line":"                                y_m_d \u003d comparison_unit.split(\" \")[0]"}],"source_content_type":"text/x-python","patch_set":9,"id":"bf51134e_2f95fa87","line":110,"range":{"start_line":110,"start_character":54,"end_line":110,"end_character":55},"in_reply_to":"bf51134e_35d559b8","updated":"2020-07-09 01:10:16.000000000","message":"yeah, no problem.","commit_id":"de00f1bf9bf885d50c88c1e75ed88ec6149fa1c2"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"a901cabb873292d453bd070cc93242390de97682","unresolved":false,"context_lines":[{"line_number":114,"context_line":"                                h_m_s \u003d comparison_unit.split(\" \")[1]"},{"line_number":115,"context_line":"                                tz_offset \u003d comparison_unit.split(\" \")[2]"},{"line_number":116,"context_line":"                                comparison_unit \u003d \\"},{"line_number":117,"context_line":"                                    y_m_d + \"T\" + h_m_s + \"+\" + tz_offset"},{"line_number":118,"context_line":"                        elif \" \" in comparison_unit and \"T\" in comparison_unit:"},{"line_number":119,"context_line":"                            y_m_d_h_m_s \u003d comparison_unit.split(\" \")[0]"},{"line_number":120,"context_line":"                            tz_offset \u003d comparison_unit.split(\" \")[1]"}],"source_content_type":"text/x-python","patch_set":9,"id":"bf51134e_f56f61f9","line":117,"range":{"start_line":117,"start_character":58,"end_line":117,"end_character":61},"updated":"2020-07-08 11:33:04.000000000","message":"This doesn\u0027t take into account negative time offsets.","commit_id":"de00f1bf9bf885d50c88c1e75ed88ec6149fa1c2"},{"author":{"_account_id":8846,"name":"Hao Wang","display_name":"Hao Wang","email":"sxmatch1986@gmail.com","username":"sxmatch"},"change_message_id":"6772e6e8cf18085a3060b0beefbba2d3f5357225","unresolved":false,"context_lines":[{"line_number":114,"context_line":"                                h_m_s \u003d comparison_unit.split(\" \")[1]"},{"line_number":115,"context_line":"                                tz_offset \u003d comparison_unit.split(\" \")[2]"},{"line_number":116,"context_line":"                                comparison_unit \u003d \\"},{"line_number":117,"context_line":"                                    y_m_d + \"T\" + h_m_s + \"+\" + tz_offset"},{"line_number":118,"context_line":"                        elif \" \" in comparison_unit and \"T\" in comparison_unit:"},{"line_number":119,"context_line":"                            y_m_d_h_m_s \u003d comparison_unit.split(\" \")[0]"},{"line_number":120,"context_line":"                            tz_offset \u003d comparison_unit.split(\" \")[1]"}],"source_content_type":"text/x-python","patch_set":9,"id":"bf51134e_b22ded96","line":117,"range":{"start_line":117,"start_character":58,"end_line":117,"end_character":61},"in_reply_to":"bf51134e_f56f61f9","updated":"2020-07-09 03:30:36.000000000","message":"This block especially handles for \"+\", since \"2020-07-06 04:41:57.768583+08:00\" will be \"2020-07-06 04:41:57.768583 08:00\" when Cinder API get the request parameter string, this format \"2020-07-06 04:41:57.768583 08:00\" can\u0027t be parsed to iso time so that why we need to transfer it in here. But it\u0027s no change to \"-\", so \"2020-07-06 04:41:57.768583-08:00\" still be the same format when Cinder API gets it. So it could be parsed as normal. we didn\u0027t need to handle negative time offsets here.","commit_id":"de00f1bf9bf885d50c88c1e75ed88ec6149fa1c2"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"f3be2d1688b03bbbdcdee0351ec6f344d3f440b7","unresolved":true,"context_lines":[{"line_number":116,"context_line":"                        # change to \"-\". So \"-\" time_zone offset could be"},{"line_number":117,"context_line":"                        # parsed to ISO format as normal."},{"line_number":118,"context_line":"                        if (\" \" in comparison_unit and"},{"line_number":119,"context_line":"                                \"T\" not in comparison_unit):"},{"line_number":120,"context_line":"                            if len(comparison_unit.split(\" \")) \u003d\u003d 3:"},{"line_number":121,"context_line":"                                y_m_d \u003d comparison_unit.split(\" \")[0]"},{"line_number":122,"context_line":"                                h_m_s \u003d comparison_unit.split(\" \")[1]"}],"source_content_type":"text/x-python","patch_set":16,"id":"a7bc1e53_266a1402","line":119,"range":{"start_line":119,"start_character":32,"end_line":119,"end_character":58},"updated":"2023-03-07 20:39:55.000000000","message":"What happens with this check if the request contained\n  LT:\n\ninstead of\n  lt:\n\n?","commit_id":"c0b601d87f86c1ba1656f2cf3613248d197a4308"},{"author":{"_account_id":8846,"name":"Hao Wang","display_name":"Hao Wang","email":"sxmatch1986@gmail.com","username":"sxmatch"},"change_message_id":"5eaef020858ddf5725987c6f4c3bde437463230e","unresolved":false,"context_lines":[{"line_number":116,"context_line":"                        # change to \"-\". So \"-\" time_zone offset could be"},{"line_number":117,"context_line":"                        # parsed to ISO format as normal."},{"line_number":118,"context_line":"                        if (\" \" in comparison_unit and"},{"line_number":119,"context_line":"                                \"T\" not in comparison_unit):"},{"line_number":120,"context_line":"                            if len(comparison_unit.split(\" \")) \u003d\u003d 3:"},{"line_number":121,"context_line":"                                y_m_d \u003d comparison_unit.split(\" \")[0]"},{"line_number":122,"context_line":"                                h_m_s \u003d comparison_unit.split(\" \")[1]"}],"source_content_type":"text/x-python","patch_set":16,"id":"45c04430_6bf4d736","line":119,"range":{"start_line":119,"start_character":32,"end_line":119,"end_character":58},"in_reply_to":"a7bc1e53_266a1402","updated":"2023-03-09 02:14:04.000000000","message":"It will go to line 126, but since the LT is not in the list of valid operators(\"gt\", \"gte\", \"eq\", \"neq\", \"lt\", \"lte\"), it will raise BadRequest exception at Line 137.","commit_id":"c0b601d87f86c1ba1656f2cf3613248d197a4308"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"45a66fb3b5e535fad06cfa6c41fbb7250ecd8e42","unresolved":true,"context_lines":[{"line_number":111,"context_line":"                    try:"},{"line_number":112,"context_line":"                        # handle the \"+\" time_zone offset in iso format"},{"line_number":113,"context_line":"                        # specially. Since \"+\" will be replaced by \" \" when"},{"line_number":114,"context_line":"                        # Cinder API gets the request url, but it\u0027s no"},{"line_number":115,"context_line":"                        # change to \"-\". So \"-\" time_zone offset could be"},{"line_number":116,"context_line":"                        # parsed to ISO format as normal."},{"line_number":117,"context_line":"                        if (\" \" in comparison_unit and"},{"line_number":118,"context_line":"                                \"T\" not in comparison_unit):"}],"source_content_type":"text/x-python","patch_set":23,"id":"b247e911_7c4f68d1","line":115,"range":{"start_line":114,"start_character":68,"end_line":115,"end_character":32},"updated":"2024-05-28 12:10:54.000000000","message":"\"now changed\"? I\u0027m not sure what this sentence is saying.","commit_id":"eb02cc1b7176ef966f326dbb07ede55c2e266261"},{"author":{"_account_id":8846,"name":"Hao Wang","display_name":"Hao Wang","email":"sxmatch1986@gmail.com","username":"sxmatch"},"change_message_id":"05df6f6c623ed4dd23c492a1b8c86987de23ffbf","unresolved":false,"context_lines":[{"line_number":111,"context_line":"                    try:"},{"line_number":112,"context_line":"                        # handle the \"+\" time_zone offset in iso format"},{"line_number":113,"context_line":"                        # specially. Since \"+\" will be replaced by \" \" when"},{"line_number":114,"context_line":"                        # Cinder API gets the request url, but it\u0027s no"},{"line_number":115,"context_line":"                        # change to \"-\". So \"-\" time_zone offset could be"},{"line_number":116,"context_line":"                        # parsed to ISO format as normal."},{"line_number":117,"context_line":"                        if (\" \" in comparison_unit and"},{"line_number":118,"context_line":"                                \"T\" not in comparison_unit):"}],"source_content_type":"text/x-python","patch_set":23,"id":"5ed991e4_7c2250b0","line":115,"range":{"start_line":114,"start_character":68,"end_line":115,"end_character":32},"in_reply_to":"b247e911_7c4f68d1","updated":"2024-06-17 18:32:33.000000000","message":"Should be \u0027but \"-\" isn\u0027t replaced.\u0027 Will update it.","commit_id":"eb02cc1b7176ef966f326dbb07ede55c2e266261"}],"cinder/db/sqlalchemy/api.py":[{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"e3f5f92f2a32623ba5122add41d758e82c893ee4","unresolved":false,"context_lines":[{"line_number":431,"context_line":"            conditions.append(field.op(\u0027\u003c\u0027)(filter_time))"},{"line_number":432,"context_line":"        elif operator \u003d\u003d \u0027lte\u0027:"},{"line_number":433,"context_line":"            conditions.append(field.op(\u0027\u003c\u003d\u0027)(filter_time))"},{"line_number":434,"context_line":"    return and_(*conditions)"},{"line_number":435,"context_line":""},{"line_number":436,"context_line":""},{"line_number":437,"context_line":"def _clustered_bool_field_filter(query, field_name, filter_value):"}],"source_content_type":"text/x-python","patch_set":5,"id":"bf51134e_6dbc48dc","line":434,"updated":"2020-06-18 15:57:46.000000000","message":"Why is this change needed?","commit_id":"68931bc4a0bc18dd0279663a3852a7ded4de7255"},{"author":{"_account_id":8846,"name":"Hao Wang","display_name":"Hao Wang","email":"sxmatch1986@gmail.com","username":"sxmatch"},"change_message_id":"95dc7e07fc60536ffbe8380c3b6172422cae544d","unresolved":false,"context_lines":[{"line_number":431,"context_line":"            conditions.append(field.op(\u0027\u003c\u0027)(filter_time))"},{"line_number":432,"context_line":"        elif operator \u003d\u003d \u0027lte\u0027:"},{"line_number":433,"context_line":"            conditions.append(field.op(\u0027\u003c\u003d\u0027)(filter_time))"},{"line_number":434,"context_line":"    return and_(*conditions)"},{"line_number":435,"context_line":""},{"line_number":436,"context_line":""},{"line_number":437,"context_line":"def _clustered_bool_field_filter(query, field_name, filter_value):"}],"source_content_type":"text/x-python","patch_set":5,"id":"bf51134e_630e0d33","line":434,"in_reply_to":"bf51134e_6dbc48dc","updated":"2020-06-19 01:38:23.000000000","message":"This is because I found if the user specifies the time comparison operators like: \"updated_at\u003dlt:time1,gt:time2\", it should mean \"time2 \u003c volume.updated_time \u003c time1\", so there should be \u0027and\u0027 not \u0027or\u0027 relationship with those two operators.","commit_id":"68931bc4a0bc18dd0279663a3852a7ded4de7255"}],"cinder/tests/unit/api/v3/test_volumes.py":[{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"8d917b77dc4c8c98d24e7584c79d33fc5847399f","unresolved":false,"context_lines":[{"line_number":12,"context_line":"#    under the License."},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"import datetime"},{"line_number":15,"context_line":"from dateutil import tz"},{"line_number":16,"context_line":"import json"},{"line_number":17,"context_line":"from unittest import mock"},{"line_number":18,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"ff570b3c_cbbe1cff","line":15,"updated":"2020-06-12 09:21:28.000000000","message":"pep8: I201 Missing newline between import groups. \u0027from dateutil import tz\u0027 is identified as Third Party and \u0027import datetime\u0027 is identified as Stdlib.","commit_id":"57e21ea30cf7fac7a8ad08f030d8073e20658e69"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"8d917b77dc4c8c98d24e7584c79d33fc5847399f","unresolved":false,"context_lines":[{"line_number":13,"context_line":""},{"line_number":14,"context_line":"import datetime"},{"line_number":15,"context_line":"from dateutil import tz"},{"line_number":16,"context_line":"import json"},{"line_number":17,"context_line":"from unittest import mock"},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"import ddt"}],"source_content_type":"text/x-python","patch_set":4,"id":"ff570b3c_2bbeb8fe","line":16,"updated":"2020-06-12 09:21:28.000000000","message":"pep8: I100 Import statements are in the wrong order. \u0027import json\u0027 should be before \u0027from dateutil import tz\u0027 and in a different group.","commit_id":"57e21ea30cf7fac7a8ad08f030d8073e20658e69"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"8d917b77dc4c8c98d24e7584c79d33fc5847399f","unresolved":false,"context_lines":[{"line_number":13,"context_line":""},{"line_number":14,"context_line":"import datetime"},{"line_number":15,"context_line":"from dateutil import tz"},{"line_number":16,"context_line":"import json"},{"line_number":17,"context_line":"from unittest import mock"},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"import ddt"}],"source_content_type":"text/x-python","patch_set":4,"id":"ff570b3c_0bb93414","line":16,"updated":"2020-06-12 09:21:28.000000000","message":"pep8: I201 Missing newline between import groups. \u0027import json\u0027 is identified as Stdlib and \u0027from dateutil import tz\u0027 is identified as Third Party.","commit_id":"57e21ea30cf7fac7a8ad08f030d8073e20658e69"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"83c3279e746d80e97d9eaf15ced28d74a650ee2f","unresolved":false,"context_lines":[{"line_number":1064,"context_line":"        self.assertEqual(vols[1].id, volumes[0][\u0027id\u0027])"},{"line_number":1065,"context_line":""},{"line_number":1066,"context_line":"    def test_volume_index_filter_by_time_with_time_zone_offset(self):"},{"line_number":1067,"context_line":"        vols \u003d self._create_volume_with_glance_metadata()"},{"line_number":1068,"context_line":"        change_before \u003d timeutils.utcnow() + datetime.timedelta(hours\u003d8)"},{"line_number":1069,"context_line":"        change_before \u003d change_before.replace(tzinfo\u003dtz.gettz(\u0027Asia/Shanghai\u0027))"},{"line_number":1070,"context_line":"        req \u003d fakes.HTTPRequest.blank(\"/v3/volumes?updated_at\u003dlt:%s\" %"}],"source_content_type":"text/x-python","patch_set":12,"id":"bf51134e_e3ee7220","line":1067,"updated":"2020-07-09 14:10:16.000000000","message":"pep8: F841 local variable \u0027vols\u0027 is assigned to but never used","commit_id":"81bd4b3f0c833085536b1278db666db010f2f2e7"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"1f657867706f4a74eac25d2b3d19e958393feaee","unresolved":true,"context_lines":[{"line_number":16,"context_line":"import json"},{"line_number":17,"context_line":"from unittest import mock"},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"from dateutil import tz"},{"line_number":20,"context_line":"import ddt"},{"line_number":21,"context_line":"import fixtures"},{"line_number":22,"context_line":"import iso8601"}],"source_content_type":"text/x-python","patch_set":15,"id":"9d72aa9a_f880b153","line":19,"updated":"2023-02-15 15:43:46.000000000","message":"`dateutil` needs to be added to requirements: https://opendev.org/openstack/cinder/src/branch/master/test-requirements.txt","commit_id":"fb78572fa5f0759d323f0c6ed871168d785c19bf"},{"author":{"_account_id":8846,"name":"Hao Wang","display_name":"Hao Wang","email":"sxmatch1986@gmail.com","username":"sxmatch"},"change_message_id":"007d842cde18bc4a979ebec375604ebc4b5399aa","unresolved":false,"context_lines":[{"line_number":16,"context_line":"import json"},{"line_number":17,"context_line":"from unittest import mock"},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"from dateutil import tz"},{"line_number":20,"context_line":"import ddt"},{"line_number":21,"context_line":"import fixtures"},{"line_number":22,"context_line":"import iso8601"}],"source_content_type":"text/x-python","patch_set":15,"id":"cda36a29_7566ee8a","line":19,"in_reply_to":"9d72aa9a_f880b153","updated":"2023-02-22 01:20:32.000000000","message":"Sure, thanks","commit_id":"fb78572fa5f0759d323f0c6ed871168d785c19bf"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"ac2952ca18f7be1dcbefc16108e694b7eaee39da","unresolved":true,"context_lines":[{"line_number":1215,"context_line":"    def test_volume_index_filter_by_time_with_time_zone_offset(self):"},{"line_number":1216,"context_line":"        self._create_volume_with_glance_metadata()"},{"line_number":1217,"context_line":"        change_before \u003d timeutils.utcnow() + datetime.timedelta(hours\u003d8)"},{"line_number":1218,"context_line":"        change_before \u003d change_before.replace(tzinfo\u003dtz.gettz(\u0027Asia/Shanghai\u0027))"},{"line_number":1219,"context_line":"        req \u003d fakes.HTTPRequest.blank(\"/v3/volumes?updated_at\u003dlt:%s\" %"},{"line_number":1220,"context_line":"                                      change_before)"},{"line_number":1221,"context_line":"        req.environ[\u0027cinder.context\u0027] \u003d self.ctxt"}],"source_content_type":"text/x-python","patch_set":24,"id":"c7ca64bb_7a8292af","line":1218,"updated":"2025-08-14 14:04:55.000000000","message":"Is there a way to do this that doesn\u0027t require pulling in a new dependency just for this test?","commit_id":"5fa8a4c338c08cd12d71fbf053468b2403949ab3"},{"author":{"_account_id":8846,"name":"Hao Wang","display_name":"Hao Wang","email":"sxmatch1986@gmail.com","username":"sxmatch"},"change_message_id":"24f8d74647a3d9391fad58a78f17a9646122f0d9","unresolved":false,"context_lines":[{"line_number":1215,"context_line":"    def test_volume_index_filter_by_time_with_time_zone_offset(self):"},{"line_number":1216,"context_line":"        self._create_volume_with_glance_metadata()"},{"line_number":1217,"context_line":"        change_before \u003d timeutils.utcnow() + datetime.timedelta(hours\u003d8)"},{"line_number":1218,"context_line":"        change_before \u003d change_before.replace(tzinfo\u003dtz.gettz(\u0027Asia/Shanghai\u0027))"},{"line_number":1219,"context_line":"        req \u003d fakes.HTTPRequest.blank(\"/v3/volumes?updated_at\u003dlt:%s\" %"},{"line_number":1220,"context_line":"                                      change_before)"},{"line_number":1221,"context_line":"        req.environ[\u0027cinder.context\u0027] \u003d self.ctxt"}],"source_content_type":"text/x-python","patch_set":24,"id":"afee0a25_265709a4","line":1218,"in_reply_to":"a5abaeea_b978e4c6","updated":"2025-08-21 18:47:20.000000000","message":"Done","commit_id":"5fa8a4c338c08cd12d71fbf053468b2403949ab3"},{"author":{"_account_id":8846,"name":"Hao Wang","display_name":"Hao Wang","email":"sxmatch1986@gmail.com","username":"sxmatch"},"change_message_id":"e29d098b3f87d7a43006bf6ae58cb911ff5fbc49","unresolved":true,"context_lines":[{"line_number":1215,"context_line":"    def test_volume_index_filter_by_time_with_time_zone_offset(self):"},{"line_number":1216,"context_line":"        self._create_volume_with_glance_metadata()"},{"line_number":1217,"context_line":"        change_before \u003d timeutils.utcnow() + datetime.timedelta(hours\u003d8)"},{"line_number":1218,"context_line":"        change_before \u003d change_before.replace(tzinfo\u003dtz.gettz(\u0027Asia/Shanghai\u0027))"},{"line_number":1219,"context_line":"        req \u003d fakes.HTTPRequest.blank(\"/v3/volumes?updated_at\u003dlt:%s\" %"},{"line_number":1220,"context_line":"                                      change_before)"},{"line_number":1221,"context_line":"        req.environ[\u0027cinder.context\u0027] \u003d self.ctxt"}],"source_content_type":"text/x-python","patch_set":24,"id":"a5abaeea_b978e4c6","line":1218,"in_reply_to":"c7ca64bb_7a8292af","updated":"2025-08-18 16:55:34.000000000","message":"Hi Eric, thanks for the review, will check it to see if we can do it without importing the tz.","commit_id":"5fa8a4c338c08cd12d71fbf053468b2403949ab3"}],"releasenotes/notes/support-time-zone-offset-in-time-comparison-filter-a3f58078d129036f.yaml":[{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"1f657867706f4a74eac25d2b3d19e958393feaee","unresolved":true,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"fixes:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    In the U cycle, Cinder support to filter volumes by time comparison"},{"line_number":5,"context_line":"    operators. The time format is following the ISO 8601."},{"line_number":6,"context_line":"    But there didn\u0027t consider the time zone offset well in time string."},{"line_number":7,"context_line":"    This fix will support filtering string of time with time zone offset like"}],"source_content_type":"text/x-yaml","patch_set":15,"id":"6fb1ed40_206dca2e","line":4,"updated":"2023-02-15 15:43:46.000000000","message":"This is not accurate. The release notes are pulled in by the release they were merged in, so don\u0027t refer to a specific release here.","commit_id":"fb78572fa5f0759d323f0c6ed871168d785c19bf"},{"author":{"_account_id":8846,"name":"Hao Wang","display_name":"Hao Wang","email":"sxmatch1986@gmail.com","username":"sxmatch"},"change_message_id":"007d842cde18bc4a979ebec375604ebc4b5399aa","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"fixes:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    In the U cycle, Cinder support to filter volumes by time comparison"},{"line_number":5,"context_line":"    operators. The time format is following the ISO 8601."},{"line_number":6,"context_line":"    But there didn\u0027t consider the time zone offset well in time string."},{"line_number":7,"context_line":"    This fix will support filtering string of time with time zone offset like"}],"source_content_type":"text/x-yaml","patch_set":15,"id":"6ebbf80e_81fde858","line":4,"in_reply_to":"6fb1ed40_206dca2e","updated":"2023-02-22 01:20:32.000000000","message":"Done","commit_id":"fb78572fa5f0759d323f0c6ed871168d785c19bf"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"45a66fb3b5e535fad06cfa6c41fbb7250ecd8e42","unresolved":true,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"fixes:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    Cinder has supported to filter volumes by time comparison"},{"line_number":5,"context_line":"    operators. The time format is following the ISO 8601."},{"line_number":6,"context_line":"    But there didn\u0027t consider the time zone offset well in time string."},{"line_number":7,"context_line":"    This fix will support filtering string of time with time zone offset like"},{"line_number":8,"context_line":"    \"2020-07-06T03:47:47.024856+00:00\"."}],"source_content_type":"text/x-yaml","patch_set":23,"id":"1001a7bb_9e4e2814","line":6,"range":{"start_line":4,"start_character":4,"end_line":6,"end_character":71},"updated":"2024-05-28 12:10:54.000000000","message":"Suggestion:\n\nCinder supports filtering volume results by time, using ISO 8601 format. This filtering had ignored any time zone offset. Any provided offset like \"2020-07-06T03:47:47.024856+01:00\" will now be used in filtering results.","commit_id":"eb02cc1b7176ef966f326dbb07ede55c2e266261"},{"author":{"_account_id":8846,"name":"Hao Wang","display_name":"Hao Wang","email":"sxmatch1986@gmail.com","username":"sxmatch"},"change_message_id":"05df6f6c623ed4dd23c492a1b8c86987de23ffbf","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"fixes:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    Cinder has supported to filter volumes by time comparison"},{"line_number":5,"context_line":"    operators. The time format is following the ISO 8601."},{"line_number":6,"context_line":"    But there didn\u0027t consider the time zone offset well in time string."},{"line_number":7,"context_line":"    This fix will support filtering string of time with time zone offset like"},{"line_number":8,"context_line":"    \"2020-07-06T03:47:47.024856+00:00\"."}],"source_content_type":"text/x-yaml","patch_set":23,"id":"f199140b_a8a5d906","line":6,"range":{"start_line":4,"start_character":4,"end_line":6,"end_character":71},"in_reply_to":"1001a7bb_9e4e2814","updated":"2024-06-17 18:32:33.000000000","message":"Sure, thanks for this.","commit_id":"eb02cc1b7176ef966f326dbb07ede55c2e266261"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"45a66fb3b5e535fad06cfa6c41fbb7250ecd8e42","unresolved":true,"context_lines":[{"line_number":4,"context_line":"    Cinder has supported to filter volumes by time comparison"},{"line_number":5,"context_line":"    operators. The time format is following the ISO 8601."},{"line_number":6,"context_line":"    But there didn\u0027t consider the time zone offset well in time string."},{"line_number":7,"context_line":"    This fix will support filtering string of time with time zone offset like"},{"line_number":8,"context_line":"    \"2020-07-06T03:47:47.024856+00:00\"."}],"source_content_type":"text/x-yaml","patch_set":23,"id":"778ae1b4_8dc5731c","line":7,"range":{"start_line":7,"start_character":3,"end_line":7,"end_character":12},"updated":"2024-05-28 12:10:54.000000000","message":"Remove \"this fix\". Release notes are generated for the entire release, without the context of the code changes the release note was added with. So saying something like \"this fix\" doesn\u0027t make sense.","commit_id":"eb02cc1b7176ef966f326dbb07ede55c2e266261"},{"author":{"_account_id":8846,"name":"Hao Wang","display_name":"Hao Wang","email":"sxmatch1986@gmail.com","username":"sxmatch"},"change_message_id":"05df6f6c623ed4dd23c492a1b8c86987de23ffbf","unresolved":false,"context_lines":[{"line_number":4,"context_line":"    Cinder has supported to filter volumes by time comparison"},{"line_number":5,"context_line":"    operators. The time format is following the ISO 8601."},{"line_number":6,"context_line":"    But there didn\u0027t consider the time zone offset well in time string."},{"line_number":7,"context_line":"    This fix will support filtering string of time with time zone offset like"},{"line_number":8,"context_line":"    \"2020-07-06T03:47:47.024856+00:00\"."}],"source_content_type":"text/x-yaml","patch_set":23,"id":"d942855a_480a9411","line":7,"range":{"start_line":7,"start_character":3,"end_line":7,"end_character":12},"in_reply_to":"778ae1b4_8dc5731c","updated":"2024-06-17 18:32:33.000000000","message":"Got it, will update.","commit_id":"eb02cc1b7176ef966f326dbb07ede55c2e266261"}]}
