diff --git a/escpos/config.py b/escpos/config.py index aba4e86..bac19e0 100644 --- a/escpos/config.py +++ b/escpos/config.py @@ -46,11 +46,15 @@ class Config(object): ) try: - if isinstance(config_path, str): + # First check if it's file like. If it is, pyyaml can load it. + # I'm checking type instead of catching excpetions to keep the + # exception handling simple + if hasattr(config_path, 'read'): + config = yaml.safe_load(config_path) + else: + # If it isn't, it's a path. We have to open it first. with open(config_path, 'rb') as config_file: config = yaml.safe_load(config_file) - else: - config = yaml.safe_load(config_path) except EnvironmentError: raise exceptions.ConfigNotFoundError('Couldn\'t read config at {config_path}'.format( config_path=str(config_path), @@ -72,7 +76,8 @@ class Config(object): self._has_loaded = True def printer(self): - """ Returns a printer that was defined in the config, or None. + """ Returns a printer that was defined in the config, or throws an + exception. This method loads the default config if one hasn't beeen already loaded. @@ -80,6 +85,9 @@ class Config(object): if not self._has_loaded: self.load() + if not self._printer_name: + raise exceptions.ConfigSectionMissingError('printer') + if not self._printer: # We could catch init errors and make them a ConfigSyntaxError, # but I'll just let them pass diff --git a/escpos/exceptions.py b/escpos/exceptions.py index 3b1ac1a..0a51782 100644 --- a/escpos/exceptions.py +++ b/escpos/exceptions.py @@ -15,6 +15,7 @@ Result/Exit codes: - `100` = Set variable out of range :py:exc:`~escpos.exceptions.SetVariableError` - `200` = Configuration not found :py:exc:`~escpos.exceptions.ConfigNotFoundError` - `210` = Configuration syntax error :py:exc:`~escpos.exceptions.ConfigSyntaxError` + - `220` = Configuration section not found :py:exc:`~escpos.exceptions.ConfigSectionMissingError` :author: `Manuel F Martinez `_ and others :organization: Bashlinux and `python-escpos `_ @@ -211,7 +212,7 @@ class ConfigNotFoundError(Error): class ConfigSyntaxError(Error): """ The configuration file is invalid - The syntax is incorrect or there is a section missing + The syntax is incorrect Ths returncode for this exception is `210`. """ def __init__(self, msg=""): @@ -221,3 +222,17 @@ class ConfigSyntaxError(Error): def __str__(self): return "Configuration syntax is invalid ({msg})".format(msg=self.msg) + +class ConfigSectionMissingError(Error): + """ The configuration file is missing a section + + The part of the config asked for doesn't exist in the loaded configuration + Ths returncode for this exception is `220`. + """ + def __init__(self, msg=""): + Error.__init__(self, msg) + self.msg = msg + self.resultcode = 220 + + def __str__(self): + return "Configuration section is missing ({msg})".format(msg=self.msg)