11#!/usr/bin/env python3
2+ import argparse
23import json
34import os
45import sys
@@ -77,7 +78,53 @@ def get_language_info(query: str) -> Optional[Dict[str, str]]:
7778 return data
7879
7980
81+ def add_language (data , query , confirm = False ):
82+ """Look up a language and add it to the data dict.
83+
84+ Args:
85+ data: language dictionary to update
86+ query: language name or code to look up
87+ confirm: if True, prompt the user before adding
88+
89+ Returns True if the language was added, False otherwise.
90+ """
91+ language_info = get_language_info (query )
92+ if not language_info :
93+ print (f"Language not found: { query } " )
94+ return False
95+
96+ code = language_info ["code" ]
97+ name = language_info ["name" ]
98+ native_name = language_info ["native_name" ]
99+
100+ print (f"\n Found language: { code } - { name } ({ native_name } )" )
101+
102+ if code in data :
103+ print (
104+ f"Warning: '{ code } ' already exists: "
105+ f"{ data [code ].get ('name' )} ({ data [code ].get ('native_name' )} )"
106+ )
107+
108+ if confirm and input ("Add this language? (Y/N): " ).lower () != "y" :
109+ print ("Language not added." )
110+ return False
111+
112+ data [code ] = {"name" : name , "native_name" : native_name }
113+ print (f"Added language: { name } " )
114+ return True
115+
116+
80117def main ():
118+ parser = argparse .ArgumentParser (
119+ description = "Add languages to le_utils languagelookup.json"
120+ )
121+ parser .add_argument (
122+ "languages" ,
123+ nargs = "*" ,
124+ help = "Language names or codes to add (non-interactive mode)" ,
125+ )
126+ args = parser .parse_args ()
127+
81128 # Get file path
82129 file_path = os .path .join (
83130 os .path .dirname (__file__ ), "../le_utils/resources/languagelookup.json"
@@ -91,45 +138,30 @@ def main():
91138 else :
92139 print (f"Loaded { len (data )} language entries." )
93140
94- while True :
95- query = input (
96- "\n Enter language name or code to add (or press Enter to finish): "
97- )
98- if not query :
99- break
100-
101- language_info = get_language_info (query )
102- if language_info :
103- code = language_info ["code" ]
104- name = language_info ["name" ]
105- native_name = language_info ["native_name" ]
106-
107- print ("\n Found language information:" )
108- print (f"Code: { code } " )
109- print (f"Name: { name } " )
110- print (f"Native name: { native_name } " )
111-
112- if code in data :
113- print (
114- f"Warning: Language code '{ code } ' already exists in the data with the following information:"
115- )
116- print (f"Name: { data [code ].get ('name' )} " )
117- print (f"Native name: { data [code ].get ('native_name' )} " )
118-
119- confirm = input ("Add this language? (Y/N): " )
120- if confirm .lower () == "y" :
121- data [code ] = {"name" : name , "native_name" : native_name }
122- print (f"Added language: { name } " )
123- else :
124- print ("Language not added." )
125- else :
126- print ("Language not found. Please try a different query." )
127-
128- # Save the updated data
129- if input ("\n Save changes to the JSON file? (Y/N): " ).lower () == "y" :
141+ added = 0
142+ if args .languages :
143+ # Non-interactive: add all specified languages and save
144+ for query in args .languages :
145+ if add_language (data , query ):
146+ added += 1
147+ else :
148+ while True :
149+ query = input (
150+ "\n Enter language name or code to add (or press Enter to finish): "
151+ )
152+ if not query :
153+ break
154+ if add_language (data , query , confirm = True ):
155+ added += 1
156+
157+ if input ("\n Save changes to the JSON file? (Y/N): " ).lower () != "y" :
158+ return
159+
160+ if added :
130161 save_json_file (data , file_path )
162+ print (f"\n Added { added } language(s)." )
131163 else :
132- print ("Changes not saved ." )
164+ print ("\n No languages were added ." )
133165
134166
135167if __name__ == "__main__" :
0 commit comments