)]}'
{"/PATCHSET_LEVEL":[{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"4cf2d9562d9e7ff93319fe2410cbf72b7bb0b576","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":2,"id":"a1fa7a4a_1ad15cfc","updated":"2023-09-07 04:16:24.000000000","message":"thank you for working on the weblate migration.\nFind feedbacks inline from POV of python coding.\n-1 is just to highlight my feedbacks. Don\u0027t be afraid :-)","commit_id":"2ccdb2987057e37334d5401b3d811b4ac699f9b0"},{"author":{"_account_id":36196,"name":"Nayeon Kim","display_name":"nayeonkim","email":"nyn2265@gmail.com","username":"nykim"},"change_message_id":"8af273197c7139afa35da0d50446132dd4531ffa","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":2,"id":"cebf1615_55b517e7","in_reply_to":"a1fa7a4a_1ad15cfc","updated":"2023-09-17 11:37:07.000000000","message":"Hi, Akihiro. Thank you so much for your kind comments \u0026 feedbacks. As updated, we decided to divide WeblateUtils.py from this PR. 😊","commit_id":"2ccdb2987057e37334d5401b3d811b4ac699f9b0"},{"author":{"_account_id":14482,"name":"Ian Y. Choi","email":"ianyrchoi@gmail.com","username":"ianychoi"},"change_message_id":"a4dd443eab9b63fdea3a4ceab5912197436419dd","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":11,"id":"2585efe9_e24001f4","updated":"2023-10-27 19:23:58.000000000","message":"Agree with the direction of this patch, reflected previous comments well, and I could successfully execute and tested but will wait for other reviewers\u0027 comments.\n\nA few additional thoughts (not for this patch but related):\n- if there is no configuration file (e.g., weblate.ini), maybe can we utilize exception? If yes, then revising weblate_utils.py would be great. Sharing paste for the error message: https://paste.opendev.org/show/bLcgRLz75OYMlkalKjPd/ .\n- since it is dependent on wlc package, maybe creating a tox environment \"weblate\" like https://opendev.org/openstack/i18n/src/branch/master/tox.ini#L13 would be good?\n- Username part on weblate is configurable - any impact on migration? Would exploring is a good idea?","commit_id":"6cc7ff24265b9ddabd84309aa012c8407d194ad6"},{"author":{"_account_id":23279,"name":"Seongsoo Cho","display_name":"Seongsoo Cho","email":"ppiyakk2@printf.kr","username":"seongsoo.cho"},"change_message_id":"ac86d91f17018611b7fa0a589637d3733f3312d0","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":11,"id":"cad9f262_476d9da5","updated":"2024-01-13 17:03:55.000000000","message":"Let\u0027s merge this first. And improve it later, if necessary.","commit_id":"6cc7ff24265b9ddabd84309aa012c8407d194ad6"},{"author":{"_account_id":14482,"name":"Ian Y. Choi","email":"ianyrchoi@gmail.com","username":"ianychoi"},"change_message_id":"8a5cb7a426fbd0e1970b38810f2cbf577bda6fd2","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":11,"id":"cfac1c74_79a13587","updated":"2023-11-10 15:50:41.000000000","message":"So far, I am inclining to land this patch and expect more follow-up patches. Reviews from @amotoki, @seongsoocho, and others would be highly appreciated.","commit_id":"6cc7ff24265b9ddabd84309aa012c8407d194ad6"},{"author":{"_account_id":14482,"name":"Ian Y. Choi","email":"ianyrchoi@gmail.com","username":"ianychoi"},"change_message_id":"82660e8fb8e997cbda8f62b31138871149867b7c","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":11,"id":"fabb5f6c_d88033bf","in_reply_to":"051d44e0_920ea852","updated":"2023-10-30 21:55:26.000000000","message":"1. Yep, rather than just exit(), displaying error message(s) would be helpful. I think you already see https://docs.weblate.org/en/latest/python.html#weblateexception .\n\n2. Thank you\n\n3. Let\u0027s see @seongsoocho and other\u0027s idea. Thank you","commit_id":"6cc7ff24265b9ddabd84309aa012c8407d194ad6"},{"author":{"_account_id":36196,"name":"Nayeon Kim","display_name":"nayeonkim","email":"nyn2265@gmail.com","username":"nykim"},"change_message_id":"ef8020533827bdb22ddd37875ead1544da58f447","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":11,"id":"051d44e0_920ea852","in_reply_to":"2585efe9_e24001f4","updated":"2023-10-29 11:29:57.000000000","message":"1. Do you mean adding Error message for the exception here(https://review.opendev.org/c/openstack/i18n/+/893361/11/tools/weblate/weblate_userinfo.py#180)? Maybe I can add them for the new patch during the development.\n2. I think that is a very good idea. It seems there are three environments \u0026 commands related to zanata. We would update this to weblate version and add them to upcoming patch.\n3. Username part on weblate is configurable - Thank you for pointing that out. Did not notice this. However, username, full name, and even email seem to be configurable. Any good idea about this?","commit_id":"6cc7ff24265b9ddabd84309aa012c8407d194ad6"},{"author":{"_account_id":23279,"name":"Seongsoo Cho","display_name":"Seongsoo Cho","email":"ppiyakk2@printf.kr","username":"seongsoo.cho"},"change_message_id":"8d2f4eade8976ee80e842802ecc0a4fe17952535","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":11,"id":"a9134fa8_bbe74497","in_reply_to":"fabb5f6c_d88033bf","updated":"2023-11-11 14:34:37.000000000","message":"@nayeonkim\n\n1. I agree with Ian\u0027s Idea, It will be great to display an error message rather than just terminate the script.\n\nAfter this feedback was applied, let\u0027s merge this patch.","commit_id":"6cc7ff24265b9ddabd84309aa012c8407d194ad6"}],"tools/weblate/WeblateUtils.py":[{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"4cf2d9562d9e7ff93319fe2410cbf72b7bb0b576","unresolved":true,"context_lines":[{"line_number":1,"context_line":"# Copyright (c) 2015 Hewlett-Packard Development Company, L.P."},{"line_number":2,"context_line":"#"},{"line_number":3,"context_line":"# Licensed under the Apache License, Version 2.0 (the \"License\"); you may"},{"line_number":4,"context_line":"# not use this file except in compliance with the License. You may obtain"}],"source_content_type":"text/x-python","patch_set":2,"id":"43bfb319_a66dc406","line":1,"updated":"2023-09-07 04:16:24.000000000","message":"confusing copyright. At least \"2015\" must be wrong.\n\nOpenStack does not necessarily require copyright line.\nIf your organization requires to add such line, please add the correct copyright.\nOtherwise, you can drop the copyright line.","commit_id":"2ccdb2987057e37334d5401b3d811b4ac699f9b0"},{"author":{"_account_id":36196,"name":"Nayeon Kim","display_name":"nayeonkim","email":"nyn2265@gmail.com","username":"nykim"},"change_message_id":"8af273197c7139afa35da0d50446132dd4531ffa","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright (c) 2015 Hewlett-Packard Development Company, L.P."},{"line_number":2,"context_line":"#"},{"line_number":3,"context_line":"# Licensed under the Apache License, Version 2.0 (the \"License\"); you may"},{"line_number":4,"context_line":"# not use this file except in compliance with the License. You may obtain"}],"source_content_type":"text/x-python","patch_set":2,"id":"474e6fa7_ec31f091","line":1,"in_reply_to":"43bfb319_a66dc406","updated":"2023-09-17 11:37:07.000000000","message":"Done, will apply that to WeblateUtils.py PR.","commit_id":"2ccdb2987057e37334d5401b3d811b4ac699f9b0"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"4cf2d9562d9e7ff93319fe2410cbf72b7bb0b576","unresolved":true,"context_lines":[{"line_number":16,"context_line":"import requests"},{"line_number":17,"context_line":"try:"},{"line_number":18,"context_line":"    from urllib.parse import urljoin"},{"line_number":19,"context_line":"except ImportError:"},{"line_number":20,"context_line":"    from urlparse import urljoin"},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"import wlc.config as cfg"},{"line_number":23,"context_line":"from wlc import Weblate"}],"source_content_type":"text/x-python","patch_set":2,"id":"80a49ea4_57baa73e","line":20,"range":{"start_line":19,"start_character":0,"end_line":20,"end_character":32},"updated":"2023-09-07 04:16:24.000000000","message":"This is no longer needed.\nIt is a fallback to python 2.7 and we use python3 only in our infra.","commit_id":"2ccdb2987057e37334d5401b3d811b4ac699f9b0"},{"author":{"_account_id":36196,"name":"Nayeon Kim","display_name":"nayeonkim","email":"nyn2265@gmail.com","username":"nykim"},"change_message_id":"8af273197c7139afa35da0d50446132dd4531ffa","unresolved":false,"context_lines":[{"line_number":16,"context_line":"import requests"},{"line_number":17,"context_line":"try:"},{"line_number":18,"context_line":"    from urllib.parse import urljoin"},{"line_number":19,"context_line":"except ImportError:"},{"line_number":20,"context_line":"    from urlparse import urljoin"},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"import wlc.config as cfg"},{"line_number":23,"context_line":"from wlc import Weblate"}],"source_content_type":"text/x-python","patch_set":2,"id":"618d203f_6ff6d151","line":20,"range":{"start_line":19,"start_character":0,"end_line":20,"end_character":32},"in_reply_to":"80a49ea4_57baa73e","updated":"2023-09-17 11:37:07.000000000","message":"Done, will apply that to WeblateUtils.py PR.","commit_id":"2ccdb2987057e37334d5401b3d811b4ac699f9b0"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"4cf2d9562d9e7ff93319fe2410cbf72b7bb0b576","unresolved":true,"context_lines":[{"line_number":20,"context_line":"    from urlparse import urljoin"},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"import wlc.config as cfg"},{"line_number":23,"context_line":"from wlc import Weblate"},{"line_number":24,"context_line":""},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"class IniConfig(object):"}],"source_content_type":"text/x-python","patch_set":2,"id":"6a056f5d_f51fdea5","line":23,"updated":"2023-09-07 04:16:24.000000000","message":"we usually use \"module\"-level import.\n\n import wlc","commit_id":"2ccdb2987057e37334d5401b3d811b4ac699f9b0"},{"author":{"_account_id":36196,"name":"Nayeon Kim","display_name":"nayeonkim","email":"nyn2265@gmail.com","username":"nykim"},"change_message_id":"8af273197c7139afa35da0d50446132dd4531ffa","unresolved":false,"context_lines":[{"line_number":20,"context_line":"    from urlparse import urljoin"},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"import wlc.config as cfg"},{"line_number":23,"context_line":"from wlc import Weblate"},{"line_number":24,"context_line":""},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"class IniConfig(object):"}],"source_content_type":"text/x-python","patch_set":2,"id":"f1ec44de_494f8d53","line":23,"in_reply_to":"6a056f5d_f51fdea5","updated":"2023-09-17 11:37:07.000000000","message":"Done, will apply that to WeblateUtils.py PR.","commit_id":"2ccdb2987057e37334d5401b3d811b4ac699f9b0"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"4cf2d9562d9e7ff93319fe2410cbf72b7bb0b576","unresolved":true,"context_lines":[{"line_number":29,"context_line":"    Read weblate.ini and make its values available."},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"    Attributes:"},{"line_number":32,"context_line":"    inifile: The path to the ini file to load values from."},{"line_number":33,"context_line":""},{"line_number":34,"context_line":"    \"\"\""},{"line_number":35,"context_line":"    def __init__(self, inifile):"}],"source_content_type":"text/x-python","patch_set":2,"id":"1f7cf2f5_419af206","line":32,"updated":"2023-09-07 04:16:24.000000000","message":"Could you add \"url\" and \"key\" here?\nThey are accessed as attributes from WeblateRestService.","commit_id":"2ccdb2987057e37334d5401b3d811b4ac699f9b0"},{"author":{"_account_id":36196,"name":"Nayeon Kim","display_name":"nayeonkim","email":"nyn2265@gmail.com","username":"nykim"},"change_message_id":"8af273197c7139afa35da0d50446132dd4531ffa","unresolved":true,"context_lines":[{"line_number":29,"context_line":"    Read weblate.ini and make its values available."},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"    Attributes:"},{"line_number":32,"context_line":"    inifile: The path to the ini file to load values from."},{"line_number":33,"context_line":""},{"line_number":34,"context_line":"    \"\"\""},{"line_number":35,"context_line":"    def __init__(self, inifile):"}],"source_content_type":"text/x-python","patch_set":2,"id":"61e91603_2fca224c","line":32,"in_reply_to":"1f7cf2f5_419af206","updated":"2023-09-17 11:37:07.000000000","message":"URL \u0026 KEY is being retrieved from weblate.ini file itself, so it does not seems to be a must-have attribute to me. What do you think?","commit_id":"2ccdb2987057e37334d5401b3d811b4ac699f9b0"},{"author":{"_account_id":14482,"name":"Ian Y. Choi","email":"ianyrchoi@gmail.com","username":"ianychoi"},"change_message_id":"8bdc3d6197a79e7393b79ee799918838ef6b5224","unresolved":true,"context_lines":[{"line_number":29,"context_line":"    Read weblate.ini and make its values available."},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"    Attributes:"},{"line_number":32,"context_line":"    inifile: The path to the ini file to load values from."},{"line_number":33,"context_line":""},{"line_number":34,"context_line":"    \"\"\""},{"line_number":35,"context_line":"    def __init__(self, inifile):"}],"source_content_type":"text/x-python","patch_set":2,"id":"93a4c45e_47f19d1d","line":32,"in_reply_to":"61e91603_2fca224c","updated":"2023-09-22 16:10:33.000000000","message":"Would you revise based on my example of suggestion? Note that we need to describe that we are assuming to use weblate.ini, not .weblate nor weblate on some README or somewhere by referring to https://docs.weblate.org/en/latest/wlc.html#wlc-config .\n\n```\n\"\"\"Object that holds weblate.ini configuration\n\n    Read url and key from weblate.ini and make its values available.\n\n    Attributes:\n    inifile: The path to the ini file to load values from.\n    \"\"\"\n```","commit_id":"2ccdb2987057e37334d5401b3d811b4ac699f9b0"},{"author":{"_account_id":36196,"name":"Nayeon Kim","display_name":"nayeonkim","email":"nyn2265@gmail.com","username":"nykim"},"change_message_id":"3236a41783f547625400c3cbcc02ad750bafa052","unresolved":false,"context_lines":[{"line_number":29,"context_line":"    Read weblate.ini and make its values available."},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"    Attributes:"},{"line_number":32,"context_line":"    inifile: The path to the ini file to load values from."},{"line_number":33,"context_line":""},{"line_number":34,"context_line":"    \"\"\""},{"line_number":35,"context_line":"    def __init__(self, inifile):"}],"source_content_type":"text/x-python","patch_set":2,"id":"e84a957e_cce48270","line":32,"in_reply_to":"93a4c45e_47f19d1d","updated":"2023-09-23 11:42:02.000000000","message":"I updated this to weblate_utils.py and created new PR about this. \nhttps://review.opendev.org/c/openstack/i18n/+/896308\nPlease check! Thanks.","commit_id":"2ccdb2987057e37334d5401b3d811b4ac699f9b0"}],"tools/weblate/weblate_userinfo.py":[{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"4cf2d9562d9e7ff93319fe2410cbf72b7bb0b576","unresolved":true,"context_lines":[{"line_number":22,"context_line":""},{"line_number":23,"context_line":"from oslo_log import log as logging"},{"line_number":24,"context_line":"from WeblateUtils import IniConfig"},{"line_number":25,"context_line":"from WeblateUtils import WeblateRestService"},{"line_number":26,"context_line":"import yaml"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"LOG \u003d logging.getLogger(__name__)"}],"source_content_type":"text/x-python","patch_set":2,"id":"40683b35_0c9268e1","line":25,"updated":"2023-09-07 04:16:24.000000000","message":"The OpenStack python coding convention recommends to use three import groups: standard lib, third-party lib and project specific lib in this order.\nWeblateUtils is a project specific lib (in the same directory) so L.24-25 should be moved after L.26 (with a blank line).","commit_id":"2ccdb2987057e37334d5401b3d811b4ac699f9b0"},{"author":{"_account_id":36196,"name":"Nayeon Kim","display_name":"nayeonkim","email":"nyn2265@gmail.com","username":"nykim"},"change_message_id":"8af273197c7139afa35da0d50446132dd4531ffa","unresolved":false,"context_lines":[{"line_number":22,"context_line":""},{"line_number":23,"context_line":"from oslo_log import log as logging"},{"line_number":24,"context_line":"from WeblateUtils import IniConfig"},{"line_number":25,"context_line":"from WeblateUtils import WeblateRestService"},{"line_number":26,"context_line":"import yaml"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"LOG \u003d logging.getLogger(__name__)"}],"source_content_type":"text/x-python","patch_set":2,"id":"c6bd13ca_d2a73532","line":25,"in_reply_to":"40683b35_0c9268e1","updated":"2023-09-17 11:37:07.000000000","message":"Resolved.","commit_id":"2ccdb2987057e37334d5401b3d811b4ac699f9b0"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"4cf2d9562d9e7ff93319fe2410cbf72b7bb0b576","unresolved":true,"context_lines":[{"line_number":53,"context_line":"        \"\"\""},{"line_number":54,"context_line":"        r \u003d self.rest_service.query("},{"line_number":55,"context_line":"            \u0027users/%s/\u0027"},{"line_number":56,"context_line":"            % (weblate_username))"},{"line_number":57,"context_line":"        account_data \u003d r.json()"},{"line_number":58,"context_line":"        return account_data"},{"line_number":59,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"6fd0e2ae_956f9e03","line":56,"updated":"2023-09-07 04:16:24.000000000","message":"Let\u0027s add more indents (with 4 spaces) to L.55-56. it would be clearer when reading the code.","commit_id":"2ccdb2987057e37334d5401b3d811b4ac699f9b0"},{"author":{"_account_id":36196,"name":"Nayeon Kim","display_name":"nayeonkim","email":"nyn2265@gmail.com","username":"nykim"},"change_message_id":"8af273197c7139afa35da0d50446132dd4531ffa","unresolved":false,"context_lines":[{"line_number":53,"context_line":"        \"\"\""},{"line_number":54,"context_line":"        r \u003d self.rest_service.query("},{"line_number":55,"context_line":"            \u0027users/%s/\u0027"},{"line_number":56,"context_line":"            % (weblate_username))"},{"line_number":57,"context_line":"        account_data \u003d r.json()"},{"line_number":58,"context_line":"        return account_data"},{"line_number":59,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"92df4916_ff48614d","line":56,"in_reply_to":"6fd0e2ae_956f9e03","updated":"2023-09-17 11:37:07.000000000","message":"Resolved.","commit_id":"2ccdb2987057e37334d5401b3d811b4ac699f9b0"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"4cf2d9562d9e7ff93319fe2410cbf72b7bb0b576","unresolved":true,"context_lines":[{"line_number":55,"context_line":"            \u0027users/%s/\u0027"},{"line_number":56,"context_line":"            % (weblate_username))"},{"line_number":57,"context_line":"        account_data \u003d r.json()"},{"line_number":58,"context_line":"        return account_data"},{"line_number":59,"context_line":""},{"line_number":60,"context_line":""},{"line_number":61,"context_line":"def _make_language_team(name, team_info):"}],"source_content_type":"text/x-python","patch_set":2,"id":"80607c6c_2c8ee5e9","line":58,"updated":"2023-09-07 04:16:24.000000000","message":"Personally, I prefer\n\n  return r.json()\n  \nwithout assigning a value at L.57.","commit_id":"2ccdb2987057e37334d5401b3d811b4ac699f9b0"},{"author":{"_account_id":36196,"name":"Nayeon Kim","display_name":"nayeonkim","email":"nyn2265@gmail.com","username":"nykim"},"change_message_id":"8af273197c7139afa35da0d50446132dd4531ffa","unresolved":false,"context_lines":[{"line_number":55,"context_line":"            \u0027users/%s/\u0027"},{"line_number":56,"context_line":"            % (weblate_username))"},{"line_number":57,"context_line":"        account_data \u003d r.json()"},{"line_number":58,"context_line":"        return account_data"},{"line_number":59,"context_line":""},{"line_number":60,"context_line":""},{"line_number":61,"context_line":"def _make_language_team(name, team_info):"}],"source_content_type":"text/x-python","patch_set":2,"id":"7ff14fc5_eee47a69","line":58,"in_reply_to":"80607c6c_2c8ee5e9","updated":"2023-09-17 11:37:07.000000000","message":"Resolved. Think that would be better too.","commit_id":"2ccdb2987057e37334d5401b3d811b4ac699f9b0"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"4cf2d9562d9e7ff93319fe2410cbf72b7bb0b576","unresolved":true,"context_lines":[{"line_number":60,"context_line":""},{"line_number":61,"context_line":"def _make_language_team(name, team_info):"},{"line_number":62,"context_line":"    return {"},{"line_number":63,"context_line":"        \u0027tag\u0027: \u0027language_team\u0027,"},{"line_number":64,"context_line":"        \u0027language_code\u0027: name,"},{"line_number":65,"context_line":"        \u0027language\u0027: team_info[\u0027language\u0027],"},{"line_number":66,"context_line":"        # Weblate ID which only consists of numbers is a valid ID"}],"source_content_type":"text/x-python","patch_set":2,"id":"abb6247c_7034bb87","line":63,"updated":"2023-09-07 04:16:24.000000000","message":"How is \"tag\" key used? I wonder it is required or not.","commit_id":"2ccdb2987057e37334d5401b3d811b4ac699f9b0"},{"author":{"_account_id":36196,"name":"Nayeon Kim","display_name":"nayeonkim","email":"nyn2265@gmail.com","username":"nykim"},"change_message_id":"3236a41783f547625400c3cbcc02ad750bafa052","unresolved":false,"context_lines":[{"line_number":60,"context_line":""},{"line_number":61,"context_line":"def _make_language_team(name, team_info):"},{"line_number":62,"context_line":"    return {"},{"line_number":63,"context_line":"        \u0027tag\u0027: \u0027language_team\u0027,"},{"line_number":64,"context_line":"        \u0027language_code\u0027: name,"},{"line_number":65,"context_line":"        \u0027language\u0027: team_info[\u0027language\u0027],"},{"line_number":66,"context_line":"        # Weblate ID which only consists of numbers is a valid ID"}],"source_content_type":"text/x-python","patch_set":2,"id":"f29b1755_5e044b5d","line":63,"in_reply_to":"0e99af0b_be5cf6d9","updated":"2023-09-23 11:42:02.000000000","message":"Thank you for looking up. Deleted \u0027tag\u0027 and \u0027reviewers\u0027 \u0026 \u0027coordinators\u0027 too as they are not used in Weblate. (FYI, we are only getting \u0027translators\u0027 form weblate_users.py https://review.opendev.org/c/openstack/i18n/+/895763)","commit_id":"2ccdb2987057e37334d5401b3d811b4ac699f9b0"},{"author":{"_account_id":36196,"name":"Nayeon Kim","display_name":"nayeonkim","email":"nyn2265@gmail.com","username":"nykim"},"change_message_id":"8af273197c7139afa35da0d50446132dd4531ffa","unresolved":true,"context_lines":[{"line_number":60,"context_line":""},{"line_number":61,"context_line":"def _make_language_team(name, team_info):"},{"line_number":62,"context_line":"    return {"},{"line_number":63,"context_line":"        \u0027tag\u0027: \u0027language_team\u0027,"},{"line_number":64,"context_line":"        \u0027language_code\u0027: name,"},{"line_number":65,"context_line":"        \u0027language\u0027: team_info[\u0027language\u0027],"},{"line_number":66,"context_line":"        # Weblate ID which only consists of numbers is a valid ID"}],"source_content_type":"text/x-python","patch_set":2,"id":"cfce3cb1_7c11ddff","line":63,"in_reply_to":"abb6247c_7034bb87","updated":"2023-09-17 11:37:07.000000000","message":"I do not think this is really necessary, as you pointed out.\nHowever, Zanata originally had this \u0027tag\u0027, and thought it would be better to keep it just in case.","commit_id":"2ccdb2987057e37334d5401b3d811b4ac699f9b0"},{"author":{"_account_id":14482,"name":"Ian Y. Choi","email":"ianyrchoi@gmail.com","username":"ianychoi"},"change_message_id":"8bdc3d6197a79e7393b79ee799918838ef6b5224","unresolved":true,"context_lines":[{"line_number":60,"context_line":""},{"line_number":61,"context_line":"def _make_language_team(name, team_info):"},{"line_number":62,"context_line":"    return {"},{"line_number":63,"context_line":"        \u0027tag\u0027: \u0027language_team\u0027,"},{"line_number":64,"context_line":"        \u0027language_code\u0027: name,"},{"line_number":65,"context_line":"        \u0027language\u0027: team_info[\u0027language\u0027],"},{"line_number":66,"context_line":"        # Weblate ID which only consists of numbers is a valid ID"}],"source_content_type":"text/x-python","patch_set":2,"id":"0e99af0b_be5cf6d9","line":63,"in_reply_to":"cfce3cb1_7c11ddff","updated":"2023-09-22 16:10:33.000000000","message":"I originally put this line on zanata_userinfo.py considering https://opendev.org/openstack/i18n/src/branch/master/tools/zanata/ZanataUtils.py#L120 but confirm that this line does not affect on the execution result on current zanata_userinfo.py.","commit_id":"2ccdb2987057e37334d5401b3d811b4ac699f9b0"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"4cf2d9562d9e7ff93319fe2410cbf72b7bb0b576","unresolved":true,"context_lines":[{"line_number":125,"context_line":"        user \u003d users.get(user_name)"},{"line_number":126,"context_line":"        print(\u0027Getting user detail data for user %(user_name)s\u0027"},{"line_number":127,"context_line":"              % {\u0027user_name\u0027: user_name})"},{"line_number":128,"context_line":"        user_data \u003d accounts.get_account_data(user_name)"},{"line_number":129,"context_line":""},{"line_number":130,"context_line":"        if user_data:"},{"line_number":131,"context_line":"            user[\u0027name\u0027] \u003d user_data[\u0027full_name\u0027]"}],"source_content_type":"text/x-python","patch_set":2,"id":"16357cc8_1d757283","line":128,"updated":"2023-09-07 04:16:24.000000000","message":"question: this means we call the weblate API per account. The number of API calls will be the number of users (i.e. ~1000 times?).\nDoes the weblate API allow us to retrieve a list of accounts?\nIf it exists, it would be much better as the number of API calls would be one (or several) time(s) and it would be much faster.","commit_id":"2ccdb2987057e37334d5401b3d811b4ac699f9b0"},{"author":{"_account_id":36196,"name":"Nayeon Kim","display_name":"nayeonkim","email":"nyn2265@gmail.com","username":"nykim"},"change_message_id":"8af273197c7139afa35da0d50446132dd4531ffa","unresolved":true,"context_lines":[{"line_number":125,"context_line":"        user \u003d users.get(user_name)"},{"line_number":126,"context_line":"        print(\u0027Getting user detail data for user %(user_name)s\u0027"},{"line_number":127,"context_line":"              % {\u0027user_name\u0027: user_name})"},{"line_number":128,"context_line":"        user_data \u003d accounts.get_account_data(user_name)"},{"line_number":129,"context_line":""},{"line_number":130,"context_line":"        if user_data:"},{"line_number":131,"context_line":"            user[\u0027name\u0027] \u003d user_data[\u0027full_name\u0027]"}],"source_content_type":"text/x-python","patch_set":2,"id":"c33dde4f_01ac392a","line":128,"in_reply_to":"16357cc8_1d757283","updated":"2023-09-17 11:37:07.000000000","message":"This is in progress! Will leave additional comment after update.\nThank you for pointing that out.","commit_id":"2ccdb2987057e37334d5401b3d811b4ac699f9b0"},{"author":{"_account_id":14482,"name":"Ian Y. Choi","email":"ianyrchoi@gmail.com","username":"ianychoi"},"change_message_id":"8bdc3d6197a79e7393b79ee799918838ef6b5224","unresolved":true,"context_lines":[{"line_number":125,"context_line":"        user \u003d users.get(user_name)"},{"line_number":126,"context_line":"        print(\u0027Getting user detail data for user %(user_name)s\u0027"},{"line_number":127,"context_line":"              % {\u0027user_name\u0027: user_name})"},{"line_number":128,"context_line":"        user_data \u003d accounts.get_account_data(user_name)"},{"line_number":129,"context_line":""},{"line_number":130,"context_line":"        if user_data:"},{"line_number":131,"context_line":"            user[\u0027name\u0027] \u003d user_data[\u0027full_name\u0027]"}],"source_content_type":"text/x-python","patch_set":2,"id":"ec30d448_a6d8f3e6","line":128,"in_reply_to":"c33dde4f_01ac392a","updated":"2023-09-22 16:10:33.000000000","message":"Seems that Weblate has Users API like https://docs.weblate.org/en/latest/api.html#users but.. let me ask another fundamental question - how language teams are managed on Weblate? Fetching e-mail information through Weblate Users API is possible, but I am not sure whether the generation of translation_team.yaml only through Weblate REST API is possible or not.","commit_id":"2ccdb2987057e37334d5401b3d811b4ac699f9b0"},{"author":{"_account_id":36196,"name":"Nayeon Kim","display_name":"nayeonkim","email":"nyn2265@gmail.com","username":"nykim"},"change_message_id":"3236a41783f547625400c3cbcc02ad750bafa052","unresolved":false,"context_lines":[{"line_number":125,"context_line":"        user \u003d users.get(user_name)"},{"line_number":126,"context_line":"        print(\u0027Getting user detail data for user %(user_name)s\u0027"},{"line_number":127,"context_line":"              % {\u0027user_name\u0027: user_name})"},{"line_number":128,"context_line":"        user_data \u003d accounts.get_account_data(user_name)"},{"line_number":129,"context_line":""},{"line_number":130,"context_line":"        if user_data:"},{"line_number":131,"context_line":"            user[\u0027name\u0027] \u003d user_data[\u0027full_name\u0027]"}],"source_content_type":"text/x-python","patch_set":2,"id":"d792123d_5b761d58","line":128,"in_reply_to":"ec30d448_a6d8f3e6","updated":"2023-09-23 11:42:02.000000000","message":"1. About language team\n\nWe are trying to manage the translation team with Weblate\u0027s groups.\n(https://docs.weblate.org/en/latest/api.html#groups)\nEach language will be grouped by each group. For example, Korean Group will only have \u0027ko\u0027 as language. And users who contribute in Korean would be part of this group, so we could make a language team with this info.\n\n2. Weblate Users API\n\nThank you for the resource. I have updated the API call as you have mentioned. I\u0027m getting users by /api/users and extract user\u0027s full name \u0026 email from that json.","commit_id":"2ccdb2987057e37334d5401b3d811b4ac699f9b0"}]}
