Files
tryton/modules/currency/scripts/import_currencies.py
T

119 lines
3.1 KiB
Python
Raw Normal View History

2019-07-30 23:02:46 +02:00
#!/usr/bin/env python3
# PYTHON_ARGCOMPLETE_OK
2019-07-30 23:02:46 +02:00
# This file is part of Tryton. The COPYRIGHT file at the top level of
# this repository contains the full copyright notices and license terms.
import gettext
import os
import sys
from argparse import ArgumentParser
import pycountry
try:
import argcomplete
except ImportError:
argcomplete = None
2019-07-30 23:02:46 +02:00
try:
2023-07-22 19:36:08 +02:00
from tqdm import tqdm
2019-07-30 23:02:46 +02:00
except ImportError:
2023-07-22 19:36:08 +02:00
tqdm = None
2019-07-30 23:02:46 +02:00
try:
from proteus import Model, config
except ImportError:
prog = os.path.basename(sys.argv[0])
sys.exit("proteus must be installed to use %s" % prog)
2023-07-22 19:36:08 +02:00
def _progress(iterable, **kwargs):
if tqdm:
return tqdm(iterable, disable=None, **kwargs)
2019-07-30 23:02:46 +02:00
else:
2023-07-22 19:36:08 +02:00
return iterable
2019-07-30 23:02:46 +02:00
def _get_language_codes():
Language = Model.get('ir.lang')
languages = Language.find([('translatable', '=', True)])
for l in languages:
yield l.code
2021-01-19 22:42:52 +01:00
def _remove_forbidden_chars(name):
2021-09-13 23:43:03 +02:00
from trytond.tools import remove_forbidden_chars
return remove_forbidden_chars(name)
2021-01-19 22:42:52 +01:00
2019-07-30 23:02:46 +02:00
def get_currencies():
Currency = Model.get('currency.currency')
return {c.code: c for c in Currency.find([])}
2019-07-30 23:02:46 +02:00
def update_currencies(currencies):
2019-10-14 00:13:00 +02:00
print("Update currencies", file=sys.stderr)
2019-07-30 23:02:46 +02:00
Currency = Model.get('currency.currency')
records = []
for currency in _progress(pycountry.currencies):
code = currency.alpha_3
if code in currencies:
record = currencies[code]
else:
2023-02-23 13:39:32 +01:00
record = Currency(code=code)
2021-01-19 22:42:52 +01:00
record.name = _remove_forbidden_chars(currency.name)
2019-07-30 23:02:46 +02:00
record.numeric_code = currency.numeric
records.append(record)
Currency.save(records)
return {c.code: c for c in records}
def translate_currencies(currencies):
Currency = Model.get('currency.currency')
current_config = config.get_config()
for code in _get_language_codes():
try:
gnutranslation = gettext.translation(
'iso4217', pycountry.LOCALES_DIR, languages=[code])
except IOError:
continue
2019-10-14 00:13:00 +02:00
print("Update currencies %s" % code, file=sys.stderr)
2019-07-30 23:02:46 +02:00
with current_config.set_context(language=code):
records = []
for currency in _progress(pycountry.currencies):
record = Currency(currencies[currency.alpha_3].id)
2021-01-19 22:42:52 +01:00
record.name = _remove_forbidden_chars(
gnutranslation.gettext(currency.name))
2019-07-30 23:02:46 +02:00
records.append(record)
Currency.save(records)
def main(database, config_file=None):
config.set_trytond(database, config_file=config_file)
with config.get_config().set_context(active_test=False):
do_import()
2019-07-30 23:02:46 +02:00
2019-10-14 00:13:00 +02:00
def do_import():
2019-07-30 23:02:46 +02:00
currencies = get_currencies()
currencies = update_currencies(currencies)
translate_currencies(currencies)
2019-10-14 00:13:00 +02:00
def run():
2019-07-30 23:02:46 +02:00
parser = ArgumentParser()
2020-07-09 10:38:50 +01:00
parser.add_argument('-d', '--database', dest='database', required=True)
2019-07-30 23:02:46 +02:00
parser.add_argument('-c', '--config', dest='config_file',
help='the trytond config file')
if argcomplete:
argcomplete.autocomplete(parser)
2019-07-30 23:02:46 +02:00
args = parser.parse_args()
main(args.database, args.config_file)
2019-10-14 00:13:00 +02:00
if __name__ == '__main__':
run()