)]}'
{"/PATCHSET_LEVEL":[{"author":{"_account_id":34429,"name":"Tom Weininger","email":"dienste@weinimo.de","username":"tweining"},"change_message_id":"bd8bf73855f8a664b1a0673b4be6a44ba0a7f989","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":27,"id":"107fee47_61d70fe0","updated":"2023-05-03 13:24:07.000000000","message":"recheck vexxhost issues should be gone now","commit_id":"6ca5d65b2b967a51d2fb2aac91b975b360b6b03f"},{"author":{"_account_id":34429,"name":"Tom Weininger","email":"dienste@weinimo.de","username":"tweining"},"change_message_id":"7dcc1f28572f4bf1cccbfb139448d427198dc052","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":29,"id":"bfed0240_22aee163","updated":"2023-05-05 10:42:36.000000000","message":"recheck timeout","commit_id":"7285c9b43f5f14f26095f7541a6ac434192d562b"},{"author":{"_account_id":34429,"name":"Tom Weininger","email":"dienste@weinimo.de","username":"tweining"},"change_message_id":"06b603592c9bcfde2a167c2642a9b686e96d3035","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":31,"id":"36757ae8_db31e508","updated":"2023-08-25 10:26:02.000000000","message":"2023-08-24 15:43:42.831709 | ubuntu-jammy | Successfully installed types-pyOpenSSL-23.2.0.2 types-python-dateutil-2.8.19.14 types-requests-2.31.0.2 types-setuptools-68.1.0.0 types-simplejson-3.19.0.2 types-six-1.16.21.9 types-urllib3-1.26.25.14\n2023-08-24 15:44:14.418572 | ubuntu-jammy | octavia/common/validate.py: note: In function \"check_hsts_options_put\":\n2023-08-24 15:44:14.418972 | ubuntu-jammy | octavia/common/validate.py:554:38: error: Variable\n2023-08-24 15:44:14.419002 | ubuntu-jammy | \"octavia.common.validate._ListenerPUT\" is not valid as a type  [valid-type]\n2023-08-24 15:44:14.419020 | ubuntu-jammy |     def check_hsts_options_put(listener: _ListenerPUT,\n2023-08-24 15:44:14.419036 | ubuntu-jammy |                                          ^\n2023-08-24 15:44:14.419052 | ubuntu-jammy | octavia/common/validate.py:554:38: note: See https://mypy.readthedocs.io/en/stable/common_issues.html#variables-vs-type-aliases\n2023-08-24 15:44:14.419077 | ubuntu-jammy | Generated HTML report (via XSLT): /home/zuul/src/opendev.org/openstack/octavia/mypy-report/index.html\n2023-08-24 15:44:14.419260 | ubuntu-jammy | Installing missing stub packages:\n2023-08-24 15:44:14.419297 | ubuntu-jammy | /home/zuul/src/opendev.org/openstack/octavia/.tox/mypy/bin/python -m pip install types-pyOpenSSL types-python-dateutil types-requests types-setuptools types-simplejson types-six\n2023-08-24 15:44:14.419319 | ubuntu-jammy |\n2023-08-24 15:44:14.419335 | ubuntu-jammy |\n2023-08-24 15:44:14.419350 | ubuntu-jammy | Generated HTML report (via XSLT): /home/zuul/src/opendev.org/openstack/octavia/mypy-report/index.html\n2023-08-24 15:44:14.419366 | ubuntu-jammy | Found 4 errors in 1 file (checked 597 source files)\n2023-08-24 15:44:14.419390 | ubuntu-jammy | octavia/common/validate.py:558:10: error: _ListenerPUT? has no attribute\n2023-08-24 15:44:14.444764 | ubuntu-jammy | \"hsts_include_subdomains\"  [attr-defined]\n2023-08-24 15:44:14.444849 | ubuntu-jammy |         if ((listener.hsts_include_subdomains or listener.hsts_preload) an...\n2023-08-24 15:44:14.444885 | ubuntu-jammy |              ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n2023-08-24 15:44:14.444911 | ubuntu-jammy | octavia/common/validate.py:558:46: error: _ListenerPUT? has no attribute\n2023-08-24 15:44:14.444935 | ubuntu-jammy | \"hsts_preload\"  [attr-defined]\n2023-08-24 15:44:14.444958 | ubuntu-jammy |         if ((listener.hsts_include_subdomains or listener.hsts_preload) an...\n2023-08-24 15:44:14.444984 | ubuntu-jammy |                                                  ^~~~~~~~~~~~~~~~~~~~~\n2023-08-24 15:44:14.445008 | ubuntu-jammy | octavia/common/validate.py:564:20: error: _ListenerPUT? has no attribute\n2023-08-24 15:44:14.445032 | ubuntu-jammy | \"hsts_max_age\"  [attr-defined]\n2023-08-24 15:44:14.445054 | ubuntu-jammy |         if (isinstance(listener.hsts_max_age, int) and\n2023-08-24 15:44:14.445079 | ubuntu-jammy |                        ^~~~~~~~~~~~~~~~~~~~~\n2023-08-24 15:44:14.445120 | ubuntu-jammy | mypy: 70053 C exit 1 (63.23 seconds) /home/zuul/src/opendev.org/openstack/octavia\u003e mypy --install-types --non-interactive pid\u003d2964 [tox/execute/api.py:279]\n2023-08-24 15:44:14.445300 | ubuntu-jammy | .pkg: 70054 W _exit\u003e python /home/zuul/.local/tox/lib/python3.10/site-packages/pyproject_api/_backend.py True setuptools.build_meta __legacy__ [tox/tox_env/api.py:427]\n2023-08-24 15:44:14.446665 | ubuntu-jammy | Backend: run command _exit with args {}","commit_id":"07da8f566a96ed8e5699b202c7f08978138cedb2"},{"author":{"_account_id":34429,"name":"Tom Weininger","email":"dienste@weinimo.de","username":"tweining"},"change_message_id":"f28fcc3e3dfb4230c883a5f7afad7fccbf59ba35","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":39,"id":"f74e57a2_69931887","updated":"2023-10-30 13:16:03.000000000","message":"recheck random failure `Details: b\u0027{\"faultcode\": \"Server\", \"faultstring\": \"This Session\\\u0027s transaction has been rolled back due to a previous exception during flush. To begin a new transaction with this Session, first issue Session.rollback(). Original exception was: (pymysql.err.OperationalError) (1213, \\\u0027Deadlock found when trying to get lock; try restarting transaction\\\u0027)\\\\n[SQL: INSERT INTO quotas (project_id, health_monitor, listener, load_balancer, `member`, pool, l7policy, l7rule, in_use_health_monitor, in_use_listener, in_use_load_balancer, in_use_member, in_use_pool, in_use_l7policy, in_use_l7rule) VALUES (%(project_id)s, %(health_monitor)s, %(listener)s, %(load_balancer)s, %(member)s, %(pool)s, %(l7policy)s, %(l7rule)s, %(in_use_health_monitor)s, %(in_use_listener)s, %(in_use_load_balancer)s, %(in_use_member)s, %(in_use_pool)s, %(in_use_l7policy)s, %(in_use_l7rule)s)]\\\\n[parameters: {\\\u0027project_id\\\u0027: \\\u0027888d1e9359184979a934c6bd0b3e0e6b\\\u0027, \\\u0027health_monitor\\\u0027: None, \\\u0027listener\\\u0027: None, \\\u0027load_balancer\\\u0027: None, \\\u0027member\\\u0027: None, \\\u0027pool\\\u0027: None, \\\u0027l7policy\\\u0027: None, \\\u0027l7rule\\\u0027: None, \\\u0027in_use_health_monitor\\\u0027: None, \\\u0027in_use_listener\\\u0027: None, \\\u0027in_use_load_balancer\\\u0027: None, \\\u0027in_use_member\\\u0027: None, \\\u0027in_use_pool\\\u0027: None, \\\u0027in_use_l7policy\\\u0027: None, \\\u0027in_use_l7rule\\\u0027: None}]\\\\n(Background on this error at: https://sqlalche.me/e/14/e3q8) (Background on this error at: https://sqlalche.me/e/14/7s2a)\", \"debuginfo\": null}\u0027`","commit_id":"c5659f55514114a50f07713a5278e0b6b943a2ad"},{"author":{"_account_id":34429,"name":"Tom Weininger","email":"dienste@weinimo.de","username":"tweining"},"change_message_id":"31b15f41b511a069a68a9e73a80e8646f66b4d8a","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":39,"id":"adde8336_fd9cee69","updated":"2023-10-31 07:47:44.000000000","message":"recheck same error, different job","commit_id":"c5659f55514114a50f07713a5278e0b6b943a2ad"},{"author":{"_account_id":34429,"name":"Tom Weininger","email":"dienste@weinimo.de","username":"tweining"},"change_message_id":"3cb3cf9300cbc540088681fd2486b62b5aeda635","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":43,"id":"d30219cf_8b431700","updated":"2023-11-13 18:31:17.000000000","message":"recheck random failure","commit_id":"7d096ca9de5dd8f05729a1399ae7f9207121c43e"},{"author":{"_account_id":34429,"name":"Tom Weininger","email":"dienste@weinimo.de","username":"tweining"},"change_message_id":"50bb2ac9c0fa78d173961dcb656730ff047d9db6","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":53,"id":"cce2dbd6_9d33c92d","updated":"2024-04-10 11:34:02.000000000","message":"recheck merge failed because depends-on patch was updated","commit_id":"1dd4f10a8567f9e1383e47153a87ec8da536cef6"},{"author":{"_account_id":34429,"name":"Tom Weininger","email":"dienste@weinimo.de","username":"tweining"},"change_message_id":"9f2534eb9aec20a46593d42744fc91d4ec4b538e","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":56,"id":"49348d20_9722b893","updated":"2024-04-10 13:18:36.000000000","message":"recheck merge failed because depends-on patch was updated","commit_id":"12f0e25ec3a3fa3751db7281a5e383adb5652edf"},{"author":{"_account_id":34429,"name":"Tom Weininger","email":"dienste@weinimo.de","username":"tweining"},"change_message_id":"67bfbfa5d131aade5ee610ceb64a95fe8014b01c","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":58,"id":"08277f6b_017cff19","updated":"2024-04-10 15:02:33.000000000","message":"recheck again depends-on was updated","commit_id":"ec48a14a07f5eeac3f7deeb8b0c2da98e3be17e9"},{"author":{"_account_id":34429,"name":"Tom Weininger","email":"dienste@weinimo.de","username":"tweining"},"change_message_id":"085311fda9a135775443e6f7cbf263f2e7493a95","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":58,"id":"0d31af3e_f4a816b0","updated":"2024-04-10 16:33:53.000000000","message":"recheck once more","commit_id":"ec48a14a07f5eeac3f7deeb8b0c2da98e3be17e9"},{"author":{"_account_id":34429,"name":"Tom Weininger","email":"dienste@weinimo.de","username":"tweining"},"change_message_id":"3a17700627ff8e120311701a1c0992a23b9405a7","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":59,"id":"82c066c6_4d81978b","updated":"2024-04-15 12:31:16.000000000","message":"recheck resolved merge conflict","commit_id":"a2ac6641d20d9336b17ddc08d590d26bb0b05312"},{"author":{"_account_id":34429,"name":"Tom Weininger","email":"dienste@weinimo.de","username":"tweining"},"change_message_id":"cee8d4566ea18fefcad7151906e303375a1b91d1","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":59,"id":"2b569f9f_a6373774","updated":"2024-04-16 06:45:39.000000000","message":"recheck unrelated\ntempest.lib.exceptions.UnexpectedResponseCode: Unexpected response code received","commit_id":"a2ac6641d20d9336b17ddc08d590d26bb0b05312"},{"author":{"_account_id":34429,"name":"Tom Weininger","email":"dienste@weinimo.de","username":"tweining"},"change_message_id":"dffce30bd509ddb4431e7c81d7982f54c85ec74d","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":60,"id":"4d24bd97_0c4a571b","updated":"2024-04-30 16:35:44.000000000","message":"TODO: recheck after https://review.opendev.org/c/openstack/octavia/+/917532 is merged","commit_id":"d168a19d8954e65fe7288415c7606794e0247706"},{"author":{"_account_id":34429,"name":"Tom Weininger","email":"dienste@weinimo.de","username":"tweining"},"change_message_id":"8be99eecc42c56e71e376950bd3ae4003dd5eca3","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":61,"id":"4008cfc3_19e942e6","updated":"2024-05-14 09:57:38.000000000","message":"recheck get new data","commit_id":"b42e0fd57a8e724bd260623368102efdc2e142e7"}],"octavia/certificates/common/pkcs12.py":[{"author":{"_account_id":34429,"name":"Tom Weininger","email":"dienste@weinimo.de","username":"tweining"},"change_message_id":"994f02bfa9af87ab9153109f3efbeb57fff7502b","unresolved":true,"context_lines":[{"line_number":28,"context_line":"    \"\"\"Representation of a Cert for local storage.\"\"\""},{"line_number":29,"context_line":"    def __init__(self, certbag):"},{"line_number":30,"context_line":"        try:"},{"line_number":31,"context_line":"            p12 \u003d crypto.load_pkcs12(certbag)"},{"line_number":32,"context_line":"        except crypto.Error as e:"},{"line_number":33,"context_line":"            raise exceptions.UnreadablePKCS12(error\u003dstr(e))"},{"line_number":34,"context_line":"        self.certificate \u003d p12.get_certificate()"}],"source_content_type":"text/x-python","patch_set":39,"id":"8898f24b_df966007","side":"PARENT","line":31,"updated":"2023-10-30 10:30:22.000000000","message":"mypy is actually correctly flagging this as `error: Module has no attribute \"load_pkcs12\"  [attr-defined]`. Although it still seems to work, the `load_pkcs12` method has been deprecated by pyopenssl, and isn\u0027t even documented anymore[1]. Instead, the Python cryptography library should be used[2].\n\n[1]: https://www.pyopenssl.org/en/latest/api/crypto.html\n[2]: https://stackoverflow.com/questions/65615580/pkcs12-support-in-pyopenssl-is-deprecated","commit_id":"c91ffe0e497a7333e283c4b6e90282c23053e2c9"},{"author":{"_account_id":12898,"name":"Tony Breeds","email":"tony@bakeyournoodle.com","username":"tonyb"},"change_message_id":"c127fee54ba18dfbc3528d5b80ac656dfaae92e3","unresolved":false,"context_lines":[{"line_number":28,"context_line":"    \"\"\"Representation of a Cert for local storage.\"\"\""},{"line_number":29,"context_line":"    def __init__(self, certbag):"},{"line_number":30,"context_line":"        try:"},{"line_number":31,"context_line":"            p12 \u003d crypto.load_pkcs12(certbag)"},{"line_number":32,"context_line":"        except crypto.Error as e:"},{"line_number":33,"context_line":"            raise exceptions.UnreadablePKCS12(error\u003dstr(e))"},{"line_number":34,"context_line":"        self.certificate \u003d p12.get_certificate()"}],"source_content_type":"text/x-python","patch_set":39,"id":"a206da71_d872f112","side":"PARENT","line":31,"in_reply_to":"0802606a_d6ea1a92","updated":"2024-04-30 18:12:33.000000000","message":"FWIW as this requires adding new packages to existing releases (from a distribution and requirements POV) I don\u0027t think this can be backported.","commit_id":"c91ffe0e497a7333e283c4b6e90282c23053e2c9"},{"author":{"_account_id":34429,"name":"Tom Weininger","email":"dienste@weinimo.de","username":"tweining"},"change_message_id":"206f6c1d84382fda4c6a162f5bee6c35b2eb7716","unresolved":false,"context_lines":[{"line_number":28,"context_line":"    \"\"\"Representation of a Cert for local storage.\"\"\""},{"line_number":29,"context_line":"    def __init__(self, certbag):"},{"line_number":30,"context_line":"        try:"},{"line_number":31,"context_line":"            p12 \u003d crypto.load_pkcs12(certbag)"},{"line_number":32,"context_line":"        except crypto.Error as e:"},{"line_number":33,"context_line":"            raise exceptions.UnreadablePKCS12(error\u003dstr(e))"},{"line_number":34,"context_line":"        self.certificate \u003d p12.get_certificate()"}],"source_content_type":"text/x-python","patch_set":39,"id":"0802606a_d6ea1a92","side":"PARENT","line":31,"in_reply_to":"8898f24b_df966007","updated":"2023-10-30 12:09:49.000000000","message":"Reported as https://bugs.launchpad.net/octavia/+bug/2041829","commit_id":"c91ffe0e497a7333e283c4b6e90282c23053e2c9"},{"author":{"_account_id":34429,"name":"Tom Weininger","email":"dienste@weinimo.de","username":"tweining"},"change_message_id":"8d7fac03bfce861e8a30883462c5721593e4268d","unresolved":false,"context_lines":[{"line_number":28,"context_line":"    \"\"\"Representation of a Cert for local storage.\"\"\""},{"line_number":29,"context_line":"    def __init__(self, certbag):"},{"line_number":30,"context_line":"        try:"},{"line_number":31,"context_line":"            p12 \u003d crypto.load_pkcs12(certbag)"},{"line_number":32,"context_line":"        except crypto.Error as e:"},{"line_number":33,"context_line":"            raise exceptions.UnreadablePKCS12(error\u003dstr(e))"},{"line_number":34,"context_line":"        self.certificate \u003d p12.get_certificate()"}],"source_content_type":"text/x-python","patch_set":39,"id":"924a37f7_fb77ca80","side":"PARENT","line":31,"in_reply_to":"a206da71_d872f112","updated":"2024-05-14 10:04:49.000000000","message":"For reference: this was fixed already in https://review.opendev.org/c/openstack/octavia/+/900142/11/octavia/certificates/common/pkcs12.py","commit_id":"c91ffe0e497a7333e283c4b6e90282c23053e2c9"}],"octavia/cmd/prometheus_proxy.py":[{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"2a8791a5dd13a9c5b8ee6398ebe70f6384131c40","unresolved":true,"context_lines":[{"line_number":742,"context_line":"                    # reported."},{"line_number":743,"context_line":"                    if \"prometheus-exporter\" in line:"},{"line_number":744,"context_line":"                        continue"},{"line_number":745,"context_line":"                    match \u003d next((x for x in METRIC_KEYS if x in line), \"\")"},{"line_number":746,"context_line":"                    if match:"},{"line_number":747,"context_line":"                        map_tuple \u003d METRIC_MAP[match]"},{"line_number":748,"context_line":"                        if map_tuple[1] and \"HELP\" in line:"}],"source_content_type":"text/x-python","patch_set":34,"id":"44b495e3_1d97f2e7","line":745,"updated":"2023-10-24 14:35:41.000000000","message":"This is awkward/concerning.","commit_id":"b876d657fd0973c539efa3a5a60d8463ff32419d"},{"author":{"_account_id":34429,"name":"Tom Weininger","email":"dienste@weinimo.de","username":"tweining"},"change_message_id":"2c57d703495a122036918b1a268b2f3e6ba0a495","unresolved":false,"context_lines":[{"line_number":742,"context_line":"                    # reported."},{"line_number":743,"context_line":"                    if \"prometheus-exporter\" in line:"},{"line_number":744,"context_line":"                        continue"},{"line_number":745,"context_line":"                    match \u003d next((x for x in METRIC_KEYS if x in line), \"\")"},{"line_number":746,"context_line":"                    if match:"},{"line_number":747,"context_line":"                        map_tuple \u003d METRIC_MAP[match]"},{"line_number":748,"context_line":"                        if map_tuple[1] and \"HELP\" in line:"}],"source_content_type":"text/x-python","patch_set":34,"id":"e5c066ab_173c64df","line":745,"in_reply_to":"44b495e3_1d97f2e7","updated":"2023-10-25 12:05:14.000000000","message":"Thanks to your comment I\u0027ve learnt about `typing.cast()`, which seems to be exactly what\u0027s needed here.","commit_id":"b876d657fd0973c539efa3a5a60d8463ff32419d"}],"octavia/tests/unit/amphorae/drivers/keepalived/test_vrrp_rest_driver.py":[{"author":{"_account_id":29244,"name":"Gregory Thiemonge","email":"gthiemon@redhat.com","username":"gthiemonge"},"change_message_id":"caf7ee7e50f15b551b73b2a1f96ee5dbb09a3c39","unresolved":true,"context_lines":[{"line_number":25,"context_line":"API_VERSION \u003d \u00271.0\u0027"},{"line_number":26,"context_line":""},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"class KeepalivedAmpDriverMixinImpl("},{"line_number":29,"context_line":"        vrrp_rest_driver.KeepalivedAmphoraDriverMixin):"},{"line_number":30,"context_line":"    \"\"\"The base class is abstract\"\"\""},{"line_number":31,"context_line":"    def _populate_amphora_api_version(self, amphora,"}],"source_content_type":"text/x-python","patch_set":34,"id":"3a709cc0_3a614fba","line":28,"range":{"start_line":28,"start_character":6,"end_line":28,"end_character":34},"updated":"2023-09-19 11:29:41.000000000","message":"this is a bit weird to add that to a test.\ncould we use KeepalivedAmphoraDriverMixin and mock the _populate_amphora_api_version method?","commit_id":"b876d657fd0973c539efa3a5a60d8463ff32419d"},{"author":{"_account_id":34429,"name":"Tom Weininger","email":"dienste@weinimo.de","username":"tweining"},"change_message_id":"b8b9782e28ce0505040c7aab598fd803a719d5c8","unresolved":true,"context_lines":[{"line_number":25,"context_line":"API_VERSION \u003d \u00271.0\u0027"},{"line_number":26,"context_line":""},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"class KeepalivedAmpDriverMixinImpl("},{"line_number":29,"context_line":"        vrrp_rest_driver.KeepalivedAmphoraDriverMixin):"},{"line_number":30,"context_line":"    \"\"\"The base class is abstract\"\"\""},{"line_number":31,"context_line":"    def _populate_amphora_api_version(self, amphora,"}],"source_content_type":"text/x-python","patch_set":34,"id":"e6826e32_13bca86b","line":28,"range":{"start_line":28,"start_character":6,"end_line":28,"end_character":34},"in_reply_to":"3a709cc0_3a614fba","updated":"2023-09-19 16:41:46.000000000","message":"As usual, I am open for arguments about this, but I think this is the best way to do it in this case. It might work to monkey patch that method so that this subclass is not needed, but that seems worse to me than this code, and also more complicated.\n\nBecause `vrrp_rest_driver.KeepalivedAmphoraDriverMixin` is marked as an abstract base class it is not intended be instantiated directly (as it was done before here). Octavia code does this through `HaproxyAmphoraLoadBalancerDriver`, and this test code does it through this new class.","commit_id":"b876d657fd0973c539efa3a5a60d8463ff32419d"}],"test-requirements.txt":[{"author":{"_account_id":34429,"name":"Tom Weininger","email":"dienste@weinimo.de","username":"tweining"},"change_message_id":"ba032438f7a6dddc7b3b890cdfdab1eda5ba2dc4","unresolved":true,"context_lines":[{"line_number":22,"context_line":"WebTest\u003e\u003d2.0.26 # MIT"},{"line_number":23,"context_line":"mypy\u003e\u003d1.1.1 # MIT"},{"line_number":24,"context_line":"lxml\u003e\u003d4.5.2 # BSD"},{"line_number":25,"context_line":"types-python-dateutil\u003e\u003d2.8.19.20240106 # Apache-2.0"},{"line_number":26,"context_line":"types-requests\u003d\u003d2.31.0.0 # Apache-2.0"},{"line_number":27,"context_line":"types-setuptools\u003e\u003d69.0.0.20240125 # Apache-2.0"},{"line_number":28,"context_line":"types-simplejson\u003e\u003d3.19.0.2 # Apache-2.0"},{"line_number":29,"context_line":"types-six\u003e\u003d1.16.21.20240106 # Apache-2.0"}],"source_content_type":"text/plain","patch_set":49,"id":"a60f07f8_18c7f1d8","line":29,"range":{"start_line":25,"start_character":0,"end_line":29,"end_character":40},"updated":"2024-02-14 16:48:35.000000000","message":"By installing the external types packages like this (and not using `mypy --install-types`) we have control about which versions get installed. That was we could avoid issues with types packages that are \"too new\".\n\nMaybe even better than this would be to have those package versions in some global constrains file and to have the version aligned with the version of the respective Python package there.","commit_id":"4d63378bc93e73e759e421e45e35d347ec72e590"},{"author":{"_account_id":34429,"name":"Tom Weininger","email":"dienste@weinimo.de","username":"tweining"},"change_message_id":"f5e3cfaae81193dd317ce909aa791a0082b2f578","unresolved":false,"context_lines":[{"line_number":22,"context_line":"WebTest\u003e\u003d2.0.26 # MIT"},{"line_number":23,"context_line":"mypy\u003e\u003d1.1.1 # MIT"},{"line_number":24,"context_line":"lxml\u003e\u003d4.5.2 # BSD"},{"line_number":25,"context_line":"types-python-dateutil\u003e\u003d2.8.19.20240106 # Apache-2.0"},{"line_number":26,"context_line":"types-requests\u003d\u003d2.31.0.0 # Apache-2.0"},{"line_number":27,"context_line":"types-setuptools\u003e\u003d69.0.0.20240125 # Apache-2.0"},{"line_number":28,"context_line":"types-simplejson\u003e\u003d3.19.0.2 # Apache-2.0"},{"line_number":29,"context_line":"types-six\u003e\u003d1.16.21.20240106 # Apache-2.0"}],"source_content_type":"text/plain","patch_set":49,"id":"a1f5b52a_3057ee07","line":29,"range":{"start_line":25,"start_character":0,"end_line":29,"end_character":40},"in_reply_to":"a60f07f8_18c7f1d8","updated":"2024-05-22 09:28:31.000000000","message":"Done","commit_id":"4d63378bc93e73e759e421e45e35d347ec72e590"}],"tools/mypywrap.sh":[{"author":{"_account_id":34429,"name":"Tom Weininger","email":"dienste@weinimo.de","username":"tweining"},"change_message_id":"204678244a771ed160a53b56363f57e54f8084a8","unresolved":true,"context_lines":[{"line_number":1,"context_line":"#!/bin/bash"},{"line_number":2,"context_line":"#"},{"line_number":3,"context_line":"# A wrapper around mypy that allows us to specify what files to run \u0027mypy\u0027 type"},{"line_number":4,"context_line":"# checks on. Intended to be invoked via tox:"}],"source_content_type":"text/x-sh","patch_set":3,"id":"a5aa1109_af6b30f6","line":1,"updated":"2023-04-12 17:50:56.000000000","message":"TODO: Might not need this file.","commit_id":"c9147a94a85d9f730013c5ce8b8ad8d90a30b522"},{"author":{"_account_id":34429,"name":"Tom Weininger","email":"dienste@weinimo.de","username":"tweining"},"change_message_id":"14c5d4fb9c16914856732a44a240741e38cbaa0a","unresolved":false,"context_lines":[{"line_number":1,"context_line":"#!/bin/bash"},{"line_number":2,"context_line":"#"},{"line_number":3,"context_line":"# A wrapper around mypy that allows us to specify what files to run \u0027mypy\u0027 type"},{"line_number":4,"context_line":"# checks on. Intended to be invoked via tox:"}],"source_content_type":"text/x-sh","patch_set":3,"id":"f29ed33e_396423b1","line":1,"in_reply_to":"a5aa1109_af6b30f6","updated":"2023-04-18 10:48:15.000000000","message":"Done","commit_id":"c9147a94a85d9f730013c5ce8b8ad8d90a30b522"}]}
