17
17
import os
18
18
import re
19
19
import sys
20
+ import logging
20
21
21
22
try :
22
23
from xml .etree import cElementTree as ElementTree
@@ -62,16 +63,7 @@ def _text(elem):
62
63
'timeFormats' : 'time_formats'
63
64
}
64
65
65
-
66
- def log (message , * args ):
67
- if args :
68
- message = message % args
69
- sys .stderr .write (message + '\r \n ' )
70
- sys .stderr .flush ()
71
-
72
-
73
- def error (message , * args ):
74
- log ('ERROR: %s' % message , * args )
66
+ log = logging .getLogger ("import_cldr" )
75
67
76
68
77
69
def need_conversion (dst_filename , data_dict , source_filename ):
@@ -182,10 +174,19 @@ def main():
182
174
'-j' , '--json' , dest = 'dump_json' , action = 'store_true' , default = False ,
183
175
help = 'also export debugging JSON dumps of locale data'
184
176
)
177
+ parser .add_option (
178
+ '-q' , '--quiet' , dest = 'quiet' , action = 'store_true' , default = bool (os .environ .get ('BABEL_CLDR_QUIET' )),
179
+ help = 'quiesce info/warning messages' ,
180
+ )
185
181
186
182
options , args = parser .parse_args ()
187
183
if len (args ) != 1 :
188
184
parser .error ('incorrect number of arguments' )
185
+
186
+ logging .basicConfig (
187
+ level = (logging .ERROR if options .quiet else logging .INFO ),
188
+ )
189
+
189
190
return process_data (
190
191
srcdir = args [0 ],
191
192
destdir = BABEL_PACKAGE_ROOT ,
@@ -383,15 +384,18 @@ def _process_local_datas(sup, srcdir, destdir, force=False, dump_json=False):
383
384
territory = '001' # world
384
385
regions = territory_containment .get (territory , [])
385
386
386
- log ('Processing %s (Language = %s; Territory = %s)' ,
387
- filename , language , territory )
387
+ log .info (
388
+ 'Processing %s (Language = %s; Territory = %s)' ,
389
+ filename , language , territory ,
390
+ )
388
391
389
392
locale_id = '_' .join (filter (None , [
390
393
language ,
391
394
territory != '001' and territory or None
392
395
]))
393
396
394
397
data ['locale_id' ] = locale_id
398
+ data ['unsupported_number_systems' ] = set ()
395
399
396
400
if locale_id in plural_rules :
397
401
data ['plural_form' ] = plural_rules [locale_id ]
@@ -432,6 +436,13 @@ def _process_local_datas(sup, srcdir, destdir, force=False, dump_json=False):
432
436
parse_character_order (data , tree )
433
437
parse_measurement_systems (data , tree )
434
438
439
+ unsupported_number_systems_string = ', ' .join (sorted (data .pop ('unsupported_number_systems' )))
440
+ if unsupported_number_systems_string :
441
+ log .warning ('%s: unsupported number systems were ignored: %s' % (
442
+ locale_id ,
443
+ unsupported_number_systems_string ,
444
+ ))
445
+
435
446
write_datafile (data_filename , data , dump_json = dump_json )
436
447
437
448
@@ -440,21 +451,14 @@ def _should_skip_number_elem(data, elem):
440
451
Figure out whether the numbering-containing element `elem` is in a currently
441
452
non-supported (i.e. currently non-Latin) numbering system.
442
453
443
- If it is, a warning is raised.
444
-
445
- :param data: The root data element, for formatting the warning.
454
+ :param data: The root data element, for stashing the warning.
446
455
:param elem: Element with `numberSystem` key
447
456
:return: Boolean
448
457
"""
449
458
number_system = elem .get ('numberSystem' , 'latn' )
450
459
451
460
if number_system != 'latn' :
452
- log ('%s: Unsupported number system "%s" in <%s numberSystem="%s">' % (
453
- data ['locale_id' ],
454
- number_system ,
455
- elem .tag ,
456
- number_system ,
457
- ))
461
+ data ['unsupported_number_systems' ].add (number_system )
458
462
return True
459
463
460
464
return False
@@ -686,7 +690,7 @@ def parse_calendar_date_formats(data, calendar):
686
690
text_type (elem .findtext ('dateFormat/pattern' ))
687
691
)
688
692
except ValueError as e :
689
- error (e )
693
+ log . error (e )
690
694
elif elem .tag == 'alias' :
691
695
date_formats = Alias (_translate_alias (
692
696
['date_formats' ], elem .attrib ['path' ])
@@ -706,7 +710,7 @@ def parse_calendar_time_formats(data, calendar):
706
710
text_type (elem .findtext ('timeFormat/pattern' ))
707
711
)
708
712
except ValueError as e :
709
- error (e )
713
+ log . error (e )
710
714
elif elem .tag == 'alias' :
711
715
time_formats = Alias (_translate_alias (
712
716
['time_formats' ], elem .attrib ['path' ])
@@ -725,7 +729,7 @@ def parse_calendar_datetime_skeletons(data, calendar):
725
729
try :
726
730
datetime_formats [type ] = text_type (elem .findtext ('dateTimeFormat/pattern' ))
727
731
except ValueError as e :
728
- error (e )
732
+ log . error (e )
729
733
elif elem .tag == 'alias' :
730
734
datetime_formats = Alias (_translate_alias (
731
735
['datetime_formats' ], elem .attrib ['path' ])
0 commit comments