Skip to content
Extraits de code Groupes Projets
Valider 689e97a8 rédigé par Patrick Watrin's avatar Patrick Watrin
Parcourir les fichiers

config file loading and checking (work in progress)

parent 776b28f2
Aucune branche associée trouvée
Aucune étiquette associée trouvée
Aucune requête de fusion associée trouvée
...@@ -2,6 +2,8 @@ global: ...@@ -2,6 +2,8 @@ global:
debug: 1 debug: 1
verbose: 1 verbose: 1
tempdir: "/tmp"
persistence: 1 persistence: 1
virtualization: 1 virtualization: 1
...@@ -19,7 +21,8 @@ resources: ...@@ -19,7 +21,8 @@ resources:
- /home/resources/media/fr/unitex/dictionary/toponyms.bin - /home/resources/media/fr/unitex/dictionary/toponyms.bin
# The 'options' section can contain any of the argument used by the unitex tools # The 'options' section can contain any of the argument used by the unitex tools
# functions. # functions. Note that some argument will be overriden to fit the 'tag' and 'extract'
# behaviour. For intance, there is not point to define a font or a context for
# 'concord'.
options: options:
match-mode: longest match_mode: longest
output-mode: merge
...@@ -2,13 +2,14 @@ ...@@ -2,13 +2,14 @@
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
import os import os
import tempfile
import yaml import yaml
from unitex import UnitexException, LOGGER, DEFAULT_ENCODING from unitex import UnitexException, LOGGER, DEFAULT_ENCODING, VERBOSE, DEBUG
class UnitexSettings(object): class UnitexConfig(object):
def __init__(self): def __init__(self):
self.__settings = None self.__settings = None
...@@ -21,36 +22,63 @@ class UnitexSettings(object): ...@@ -21,36 +22,63 @@ class UnitexSettings(object):
raise UnitexException("Key '%s' not found!" % key) raise UnitexException("Key '%s' not found!" % key)
return self.__settings[key] return self.__settings[key]
def set(self, key, value): def __setitem__(self, key, value):
self.__settings[key] = value self.__settings[key] = value
def load(self, f): def __load_global(self, options):
with open(f, 'r') as config: verbose = options.get("verbose", VERBOSE)
self.__settings = yaml.load(config) if verbose not in (0, 1, 2):
self.check() raise UnitexException("Wrong value for the 'verbose' global option.")
self.__settings["verbose"] = verbose
def check(self):
resources = self.__settings.get("resources", None) debug = options.get("debug", DEBUG)
if resources is None: if debug not in (0, 1):
raise UnitexException("You must provide the 'resources' config element.") raise UnitexException("Wrong value for the 'debug' global option.")
self.__settings["debug"] = debug
language = resources.get("language", None)
for handler in LOGGER.handlers:
if debug == 1:
fh.setLevel(logging.DEBUG)
elif verbose == 1:
fh.setLevel(logging.WARNING)
elif verbose == 2:
fh.setLevel(logging.INFO)
else:
fh.setLevel(logging.ERROR)
persistence = options.get("persistence", 0)
if persistence not in (0, 1)
raise UnitexException("Wrong value for the 'persistence' global option.")
self.__settings["persistence"] = bool(persistence)
virtualization = options.get("virtualization", 0)
if virtualization not in (0, 1)
raise UnitexException("Wrong value for the 'virtualization' global option.")
self.__settings["virtualization"] = bool(virtualization)
def __load_resources(self, options):
language = options.get("language", None)
if language is None: if language is None:
raise UnitexException("The 'resources' section must contain the 'language' element.") raise UnitexException("The 'resources' section must contain the 'language' element.")
self.__settings["language"] = language
alphabet = resources.get("alphabet", None) alphabet = options.get("alphabet", None)
if alphabet is None: if alphabet is None:
LOGGER.warning("No alphabet file provided.") LOGGER.warning("No alphabet file provided.")
elif not os.path.exists(alphabet): elif not os.path.exists(alphabet):
raise UnitexException("Alphabet file '%s' doesn't exist." % alphabet) raise UnitexException("Alphabet file '%s' doesn't exist." % alphabet)
self.__settings["alphabet"] = alphabet
alphabet_sort = resources.get("alphabet-sort", None) alphabet_sort = options.get("alphabet-sort", None)
if alphabet_sort is None: if alphabet_sort is None:
LOGGER.warning("No sorted alphabet file provided.") LOGGER.warning("No sorted alphabet file provided.")
elif not os.path.exists(alphabet_sort): elif not os.path.exists(alphabet_sort):
raise UnitexException("Sorted alphabet file '%s' doesn't exist." % alphabet_sort) raise UnitexException("Sorted alphabet file '%s' doesn't exist." % alphabet_sort)
self.__settings["alphabet-sort"] = alphabet_sort
sentence = resources.get("sentence", None) sentence = options.get("sentence", None)
if sentence is None: if sentence is None:
LOGGER.warning("No sentence grammar provided.") LOGGER.warning("No sentence grammar provided.")
else: else:
...@@ -60,7 +88,9 @@ class UnitexSettings(object): ...@@ -60,7 +88,9 @@ class UnitexSettings(object):
if not os.path.exists(sentence): if not os.path.exists(sentence):
raise UnitexException("Sentence grammar file '%s' doesn't exist." % sentence) raise UnitexException("Sentence grammar file '%s' doesn't exist." % sentence)
replace = resources.get("replace", None) self.__settings["sentence"] = sentence
replace = options.get("replace", None)
if replace is None: if replace is None:
LOGGER.warning("No replace grammar provided.") LOGGER.warning("No replace grammar provided.")
else: else:
...@@ -70,7 +100,9 @@ class UnitexSettings(object): ...@@ -70,7 +100,9 @@ class UnitexSettings(object):
if not os.path.exists(replace): if not os.path.exists(replace):
raise UnitexException("Replace grammar file '%s' doesn't exist." % replace) raise UnitexException("Replace grammar file '%s' doesn't exist." % replace)
dictionaries = resources.get("dictionaries", None) self.__settings["replace"] = replace
dictionaries = options.get("dictionaries", None)
if dictionaries is None: if dictionaries is None:
LOGGER.warning("No dictionaries provided.") LOGGER.warning("No dictionaries provided.")
else: else:
...@@ -85,6 +117,31 @@ class UnitexSettings(object): ...@@ -85,6 +117,31 @@ class UnitexSettings(object):
if not os.path.exists("%s.bin" % prefix): if not os.path.exists("%s.bin" % prefix):
raise UnitexException("Dictionary .inf file missing for '%s'." % dictionary) raise UnitexException("Dictionary .inf file missing for '%s'." % dictionary)
self.__settings["dictionaries"] = dictionaries
def __load_normalize_options(self, options):
pass
def load(self, path):
self.__settings = {}
settings = None
with open(path, 'r') as config:
settings = yaml.load(config)
if not settings:
return
if "global" in settings:
self.__load_global(settings["global"])
if "resources" not in settings:
raise UnitexException("You must provide the 'resources' config element.")
self.__load_resources(settings["resources"])
if "options" in settings:
pass
class UnitexProcessor(object): class UnitexProcessor(object):
...@@ -96,7 +153,7 @@ class UnitexProcessor(object): ...@@ -96,7 +153,7 @@ class UnitexProcessor(object):
self.reset(config) self.reset(config)
def reset(self, config): def reset(self, config):
self.__settings = UnitexSettings() self.__settings = UnitexConfig()
self.__settings.load(config) self.__settings.load(config)
def open(self, path, mode="srtlf", encoding=None, tagged=False, virtualize=False): def open(self, path, mode="srtlf", encoding=None, tagged=False, virtualize=False):
......
0% Chargement en cours ou .
You are about to add 0 people to the discussion. Proceed with caution.
Terminez d'abord l'édition de ce message.
Veuillez vous inscrire ou vous pour commenter