)]}'
{".gitignore":[{"author":{"_account_id":28619,"name":"Dmitriy Rabotyagov","email":"noonedeadpunk@gmail.com","username":"noonedeadpunk"},"change_message_id":"469133bd730582f350e6237332a8307c36944032","unresolved":true,"context_lines":[{"line_number":21,"context_line":"AUTHORS"},{"line_number":22,"context_line":"ChangeLog"},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"# OpenSpec configuration and artifacts"},{"line_number":25,"context_line":"openspec/"},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"# OpenEncode configuration and skills"},{"line_number":28,"context_line":".opencode/"},{"line_number":29,"context_line":""},{"line_number":30,"context_line":"# Django files that get created during the test runs"},{"line_number":31,"context_line":".secret_key_store"},{"line_number":32,"context_line":"*.lock"}],"source_content_type":"application/octet-stream","patch_set":9,"id":"5e0d739d_b9933fad","line":29,"range":{"start_line":24,"start_character":0,"end_line":29,"end_character":0},"updated":"2026-08-17 12:16:26.000000000","message":"um, can we do that separately if we have to?","commit_id":"26fc5d37724b58fdee53dd021144310a13ce7d23"},{"author":{"_account_id":28619,"name":"Dmitriy Rabotyagov","email":"noonedeadpunk@gmail.com","username":"noonedeadpunk"},"change_message_id":"dc7d54217111f8d84e1b59b72f1846c12e6f3a30","unresolved":false,"context_lines":[{"line_number":21,"context_line":"AUTHORS"},{"line_number":22,"context_line":"ChangeLog"},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"# OpenSpec configuration and artifacts"},{"line_number":25,"context_line":"openspec/"},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"# OpenEncode configuration and skills"},{"line_number":28,"context_line":".opencode/"},{"line_number":29,"context_line":""},{"line_number":30,"context_line":"# Django files that get created during the test runs"},{"line_number":31,"context_line":".secret_key_store"},{"line_number":32,"context_line":"*.lock"}],"source_content_type":"application/octet-stream","patch_set":9,"id":"ea015f4c_7b626003","line":29,"range":{"start_line":24,"start_character":0,"end_line":29,"end_character":0},"in_reply_to":"5e0d739d_b9933fad","updated":"2026-08-19 12:47:00.000000000","message":"Done","commit_id":"26fc5d37724b58fdee53dd021144310a13ce7d23"}],"/PATCHSET_LEVEL":[{"author":{"_account_id":28619,"name":"Dmitriy Rabotyagov","email":"noonedeadpunk@gmail.com","username":"noonedeadpunk"},"change_message_id":"eadd05abc71e2ba600ea355a6958e50c314089ba","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":7,"id":"56fde6d2_1cfda9c7","updated":"2026-08-12 06:01:48.000000000","message":"Can you kindly elaborate on reasons for these changes in a commit message?\n\nAs these options seemingly should be doing the same thing and accept same format.","commit_id":"9c3394357124f98ae5cc94909b947ea124b26977"},{"author":{"_account_id":28619,"name":"Dmitriy Rabotyagov","email":"noonedeadpunk@gmail.com","username":"noonedeadpunk"},"change_message_id":"469133bd730582f350e6237332a8307c36944032","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":9,"id":"35fd2485_6114d109","updated":"2026-08-17 12:16:26.000000000","message":"Do we need related patches to tempest/UI/client to introduce/leverage new option?","commit_id":"26fc5d37724b58fdee53dd021144310a13ce7d23"},{"author":{"_account_id":28619,"name":"Dmitriy Rabotyagov","email":"noonedeadpunk@gmail.com","username":"noonedeadpunk"},"change_message_id":"a13bf3e7dc0569b0505d1486d9c00d53a7da6fe1","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":9,"id":"87910e37_92fc0a70","updated":"2026-08-17 14:23:03.000000000","message":"will set -cr for better visibility","commit_id":"26fc5d37724b58fdee53dd021144310a13ce7d23"},{"author":{"_account_id":28619,"name":"Dmitriy Rabotyagov","email":"noonedeadpunk@gmail.com","username":"noonedeadpunk"},"change_message_id":"4cb4f854b7b715bb4ce51f8f0d127f1c95ea3706","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":13,"id":"e29c4f12_93e18395","updated":"2026-08-19 12:50:04.000000000","message":"the only thing left here are copyrights on new files. I can\u0027t address it for you...","commit_id":"ee6c5a212af837466fe8d22ba29e126f60bb9224"}],"freezer/common/config.py":[{"author":{"_account_id":28619,"name":"Dmitriy Rabotyagov","email":"noonedeadpunk@gmail.com","username":"noonedeadpunk"},"change_message_id":"469133bd730582f350e6237332a8307c36944032","unresolved":true,"context_lines":[{"line_number":312,"context_line":"    cfg.StrOpt(\u0027remove-from-date\u0027,"},{"line_number":313,"context_line":"               dest\u003d\u0027remove_from_date\u0027,"},{"line_number":314,"context_line":"               default\u003dDEFAULT_PARAMS[\u0027remove_from_date\u0027],"},{"line_number":315,"context_line":"               deprecated_for_removal\u003dTrue,"},{"line_number":316,"context_line":"               deprecated_reason\u003d\"Use --remove-before-date instead.\","},{"line_number":317,"context_line":"               help\u003d\"Deprecated. Checks the specified container and removes \""},{"line_number":318,"context_line":"                    \"objects older than the provided datetime in the form \""}],"source_content_type":"text/x-python","patch_set":9,"id":"0ed371a7_389cbc86","line":315,"updated":"2026-08-17 12:16:26.000000000","message":"Can I ask you also to add `deprecated_since` here? So it would be easier to understand when we can completely drop it?","commit_id":"26fc5d37724b58fdee53dd021144310a13ce7d23"},{"author":{"_account_id":28619,"name":"Dmitriy Rabotyagov","email":"noonedeadpunk@gmail.com","username":"noonedeadpunk"},"change_message_id":"dc7d54217111f8d84e1b59b72f1846c12e6f3a30","unresolved":false,"context_lines":[{"line_number":312,"context_line":"    cfg.StrOpt(\u0027remove-from-date\u0027,"},{"line_number":313,"context_line":"               dest\u003d\u0027remove_from_date\u0027,"},{"line_number":314,"context_line":"               default\u003dDEFAULT_PARAMS[\u0027remove_from_date\u0027],"},{"line_number":315,"context_line":"               deprecated_for_removal\u003dTrue,"},{"line_number":316,"context_line":"               deprecated_reason\u003d\"Use --remove-before-date instead.\","},{"line_number":317,"context_line":"               help\u003d\"Deprecated. Checks the specified container and removes \""},{"line_number":318,"context_line":"                    \"objects older than the provided datetime in the form \""}],"source_content_type":"text/x-python","patch_set":9,"id":"7347d0c1_ace4ed4a","line":315,"in_reply_to":"0ed371a7_389cbc86","updated":"2026-08-19 12:47:00.000000000","message":"Done","commit_id":"26fc5d37724b58fdee53dd021144310a13ce7d23"}],"freezer/exceptions/utils.py":[{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"9f7495e8b7b659b3326a99b3bb930ea739e6b3a2","unresolved":false,"context_lines":[{"line_number":12,"context_line":"# See the License for the specific language governing permissions and"},{"line_number":13,"context_line":"# limitations under the License."},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"class TimeoutException(Exception):"},{"line_number":16,"context_line":"    msg \u003d \"Timeout has been occurred.\""},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"    def __init__(self, message\u003dNone, **kwargs):"}],"source_content_type":"text/x-python","patch_set":7,"id":"b1185522_d28b13f9","line":15,"updated":"2026-08-12 06:18:43.000000000","message":"pep8: E302 expected 2 blank lines, found 1","commit_id":"9c3394357124f98ae5cc94909b947ea124b26977"}],"freezer/job.py":[{"author":{"_account_id":28619,"name":"Dmitriy Rabotyagov","email":"noonedeadpunk@gmail.com","username":"noonedeadpunk"},"change_message_id":"469133bd730582f350e6237332a8307c36944032","unresolved":true,"context_lines":[{"line_number":54,"context_line":"        self.container \u003d self.get_container()"},{"line_number":55,"context_line":"        self._general_validation()"},{"line_number":56,"context_line":"        self._validate()"},{"line_number":57,"context_line":"        self.client \u003d client_manager.get_client_manager(CONF)"},{"line_number":58,"context_line":"        self.nova \u003d self.client.get_nova()"},{"line_number":59,"context_line":"        self.cinder \u003d self.client.get_cinder()"},{"line_number":60,"context_line":"        self.glance \u003d self.client.get_glance()"},{"line_number":61,"context_line":"        if self.conf.nova_inst_name:"},{"line_number":62,"context_line":"            self.nova_instance_ids \u003d [server.id for server in"},{"line_number":63,"context_line":"                                      self.nova.servers(details\u003dFalse)"}],"source_content_type":"text/x-python","patch_set":9,"id":"bac23a2a_29f73805","line":60,"range":{"start_line":57,"start_character":0,"end_line":60,"end_character":46},"updated":"2026-08-17 12:16:26.000000000","message":"why this change?","commit_id":"26fc5d37724b58fdee53dd021144310a13ce7d23"},{"author":{"_account_id":28619,"name":"Dmitriy Rabotyagov","email":"noonedeadpunk@gmail.com","username":"noonedeadpunk"},"change_message_id":"dc7d54217111f8d84e1b59b72f1846c12e6f3a30","unresolved":false,"context_lines":[{"line_number":54,"context_line":"        self.container \u003d self.get_container()"},{"line_number":55,"context_line":"        self._general_validation()"},{"line_number":56,"context_line":"        self._validate()"},{"line_number":57,"context_line":"        self.client \u003d client_manager.get_client_manager(CONF)"},{"line_number":58,"context_line":"        self.nova \u003d self.client.get_nova()"},{"line_number":59,"context_line":"        self.cinder \u003d self.client.get_cinder()"},{"line_number":60,"context_line":"        self.glance \u003d self.client.get_glance()"},{"line_number":61,"context_line":"        if self.conf.nova_inst_name:"},{"line_number":62,"context_line":"            self.nova_instance_ids \u003d [server.id for server in"},{"line_number":63,"context_line":"                                      self.nova.servers(details\u003dFalse)"}],"source_content_type":"text/x-python","patch_set":9,"id":"1df4c6ba_ee1b0029","line":60,"range":{"start_line":57,"start_character":0,"end_line":60,"end_character":46},"in_reply_to":"bac23a2a_29f73805","updated":"2026-08-19 12:47:00.000000000","message":"Done","commit_id":"26fc5d37724b58fdee53dd021144310a13ce7d23"},{"author":{"_account_id":28619,"name":"Dmitriy Rabotyagov","email":"noonedeadpunk@gmail.com","username":"noonedeadpunk"},"change_message_id":"469133bd730582f350e6237332a8307c36944032","unresolved":true,"context_lines":[{"line_number":679,"context_line":"            try:"},{"line_number":680,"context_line":"                return utils.date_to_timestamp(self.conf.remove_before_date)"},{"line_number":681,"context_line":"            except exception_utils.DateException:"},{"line_number":682,"context_line":"                raise ValueError(\"--remove-before-date must be an ISO \""},{"line_number":683,"context_line":"                                 \"datetime in the form YYYY-MM-DDTHH:MM:SS\")"},{"line_number":684,"context_line":"        if self.conf.remove_from_date is not None:"},{"line_number":685,"context_line":"            try:"},{"line_number":686,"context_line":"                return utils.date_to_timestamp(self.conf.remove_from_date)"}],"source_content_type":"text/x-python","patch_set":9,"id":"9c0ada53_7391d8f7","line":683,"range":{"start_line":682,"start_character":16,"end_line":683,"end_character":76},"updated":"2026-08-17 12:16:26.000000000","message":"why do we re-raise here? wouldn\u0027t introduced DateException be just fine here? It would simplify code and make it more readable?","commit_id":"26fc5d37724b58fdee53dd021144310a13ce7d23"},{"author":{"_account_id":28619,"name":"Dmitriy Rabotyagov","email":"noonedeadpunk@gmail.com","username":"noonedeadpunk"},"change_message_id":"dc7d54217111f8d84e1b59b72f1846c12e6f3a30","unresolved":false,"context_lines":[{"line_number":679,"context_line":"            try:"},{"line_number":680,"context_line":"                return utils.date_to_timestamp(self.conf.remove_before_date)"},{"line_number":681,"context_line":"            except exception_utils.DateException:"},{"line_number":682,"context_line":"                raise ValueError(\"--remove-before-date must be an ISO \""},{"line_number":683,"context_line":"                                 \"datetime in the form YYYY-MM-DDTHH:MM:SS\")"},{"line_number":684,"context_line":"        if self.conf.remove_from_date is not None:"},{"line_number":685,"context_line":"            try:"},{"line_number":686,"context_line":"                return utils.date_to_timestamp(self.conf.remove_from_date)"}],"source_content_type":"text/x-python","patch_set":9,"id":"cb523680_798e660c","line":683,"range":{"start_line":682,"start_character":16,"end_line":683,"end_character":76},"in_reply_to":"9c0ada53_7391d8f7","updated":"2026-08-19 12:47:00.000000000","message":"Ok, I even put it differently after thinking about it. Why was DateException introduced at the first place?\nWhy can not we through ValueError in date_to_timestamp()?","commit_id":"26fc5d37724b58fdee53dd021144310a13ce7d23"},{"author":{"_account_id":28619,"name":"Dmitriy Rabotyagov","email":"noonedeadpunk@gmail.com","username":"noonedeadpunk"},"change_message_id":"469133bd730582f350e6237332a8307c36944032","unresolved":true,"context_lines":[{"line_number":685,"context_line":"            try:"},{"line_number":686,"context_line":"                return utils.date_to_timestamp(self.conf.remove_from_date)"},{"line_number":687,"context_line":"            except exception_utils.DateException:"},{"line_number":688,"context_line":"                raise ValueError(\"--remove-from-date must be an ISO \""},{"line_number":689,"context_line":"                                 \"datetime in the form YYYY-MM-DDTHH:MM:SS\")"},{"line_number":690,"context_line":"        try:"},{"line_number":691,"context_line":"            if isinstance(self.conf.remove_older_than, bool):"},{"line_number":692,"context_line":"                raise ValueError(\"--remove-older-than must be a number \""}],"source_content_type":"text/x-python","patch_set":9,"id":"64b9b4de_f7dcd714","line":689,"range":{"start_line":688,"start_character":16,"end_line":689,"end_character":76},"updated":"2026-08-17 12:16:26.000000000","message":"Same here?","commit_id":"26fc5d37724b58fdee53dd021144310a13ce7d23"},{"author":{"_account_id":28619,"name":"Dmitriy Rabotyagov","email":"noonedeadpunk@gmail.com","username":"noonedeadpunk"},"change_message_id":"dc7d54217111f8d84e1b59b72f1846c12e6f3a30","unresolved":false,"context_lines":[{"line_number":685,"context_line":"            try:"},{"line_number":686,"context_line":"                return utils.date_to_timestamp(self.conf.remove_from_date)"},{"line_number":687,"context_line":"            except exception_utils.DateException:"},{"line_number":688,"context_line":"                raise ValueError(\"--remove-from-date must be an ISO \""},{"line_number":689,"context_line":"                                 \"datetime in the form YYYY-MM-DDTHH:MM:SS\")"},{"line_number":690,"context_line":"        try:"},{"line_number":691,"context_line":"            if isinstance(self.conf.remove_older_than, bool):"},{"line_number":692,"context_line":"                raise ValueError(\"--remove-older-than must be a number \""}],"source_content_type":"text/x-python","patch_set":9,"id":"77c9a0e4_63a9774f","line":689,"range":{"start_line":688,"start_character":16,"end_line":689,"end_character":76},"in_reply_to":"64b9b4de_f7dcd714","updated":"2026-08-19 12:47:00.000000000","message":"Done","commit_id":"26fc5d37724b58fdee53dd021144310a13ce7d23"},{"author":{"_account_id":28619,"name":"Dmitriy Rabotyagov","email":"noonedeadpunk@gmail.com","username":"noonedeadpunk"},"change_message_id":"469133bd730582f350e6237332a8307c36944032","unresolved":true,"context_lines":[{"line_number":688,"context_line":"                raise ValueError(\"--remove-from-date must be an ISO \""},{"line_number":689,"context_line":"                                 \"datetime in the form YYYY-MM-DDTHH:MM:SS\")"},{"line_number":690,"context_line":"        try:"},{"line_number":691,"context_line":"            if isinstance(self.conf.remove_older_than, bool):"},{"line_number":692,"context_line":"                raise ValueError(\"--remove-older-than must be a number \""},{"line_number":693,"context_line":"                                 \"of days\")"},{"line_number":694,"context_line":"            days \u003d float(self.conf.remove_older_than)"}],"source_content_type":"text/x-python","patch_set":9,"id":"31b59dbf_bb67cc65","line":691,"range":{"start_line":691,"start_character":55,"end_line":691,"end_character":59},"updated":"2026-08-17 12:16:26.000000000","message":"isn\u0027t bool weird thing to check?\nmaaybe it\u0027s better to have a test on `isnumeric` or `isdecimal`: https://docs.python.org/3/library/stdtypes.html#str.isnumeric ?\n\nNot sure though, but bool looks very narrow to me.","commit_id":"26fc5d37724b58fdee53dd021144310a13ce7d23"},{"author":{"_account_id":28619,"name":"Dmitriy Rabotyagov","email":"noonedeadpunk@gmail.com","username":"noonedeadpunk"},"change_message_id":"dc7d54217111f8d84e1b59b72f1846c12e6f3a30","unresolved":false,"context_lines":[{"line_number":688,"context_line":"                raise ValueError(\"--remove-from-date must be an ISO \""},{"line_number":689,"context_line":"                                 \"datetime in the form YYYY-MM-DDTHH:MM:SS\")"},{"line_number":690,"context_line":"        try:"},{"line_number":691,"context_line":"            if isinstance(self.conf.remove_older_than, bool):"},{"line_number":692,"context_line":"                raise ValueError(\"--remove-older-than must be a number \""},{"line_number":693,"context_line":"                                 \"of days\")"},{"line_number":694,"context_line":"            days \u003d float(self.conf.remove_older_than)"}],"source_content_type":"text/x-python","patch_set":9,"id":"a0562763_dbb02ffc","line":691,"range":{"start_line":691,"start_character":55,"end_line":691,"end_character":59},"in_reply_to":"31b59dbf_bb67cc65","updated":"2026-08-19 12:47:00.000000000","message":"Acknowledged","commit_id":"26fc5d37724b58fdee53dd021144310a13ce7d23"}],"freezer/tests/unit/storages/test_swift.py":[{"author":{"_account_id":28619,"name":"Dmitriy Rabotyagov","email":"noonedeadpunk@gmail.com","username":"noonedeadpunk"},"change_message_id":"469133bd730582f350e6237332a8307c36944032","unresolved":true,"context_lines":[{"line_number":1,"context_line":"# (c) Copyright 2024 Hewlett Packard Enterprise Development LP"},{"line_number":2,"context_line":"#"},{"line_number":3,"context_line":"# Licensed under the Apache License, Version 2.0 (the \"License\");"},{"line_number":4,"context_line":"# you may not use this file except in compliance with the License."}],"source_content_type":"text/x-python","patch_set":9,"id":"094e9c9a_b5493b5a","line":1,"range":{"start_line":1,"start_character":16,"end_line":1,"end_character":20},"updated":"2026-08-17 12:16:26.000000000","message":"it\u0027s not 2024, and I am not sure if you\u0027re affilated with HP?","commit_id":"26fc5d37724b58fdee53dd021144310a13ce7d23"}],"freezer/tests/unit/test_main.py":[{"author":{"_account_id":28619,"name":"Dmitriy Rabotyagov","email":"noonedeadpunk@gmail.com","username":"noonedeadpunk"},"change_message_id":"469133bd730582f350e6237332a8307c36944032","unresolved":true,"context_lines":[{"line_number":1,"context_line":"# (c) Copyright 2024 Hewlett Packard Enterprise Development LP"},{"line_number":2,"context_line":"#"},{"line_number":3,"context_line":"# Licensed under the Apache License, Version 2.0 (the \"License\");"},{"line_number":4,"context_line":"# you may not use this file except in compliance with the License."}],"source_content_type":"text/x-python","patch_set":9,"id":"429f3d38_d5d19e0d","line":1,"range":{"start_line":1,"start_character":0,"end_line":1,"end_character":62},"updated":"2026-08-17 12:16:26.000000000","message":"copyright is off here as well","commit_id":"26fc5d37724b58fdee53dd021144310a13ce7d23"}]}
