old_contents: # -*- coding: utf-8 -*-
  
  """ License
  
      Copyright (C) 2018 YUNOHOST.ORG
  
      This program is free software; you can redistribute it and/or modify
      it under the terms of the GNU Affero General Public License as published
      by the Free Software Foundation, either version 3 of the License, or
      (at your option) any later version.
  
      This program is distributed in the hope that it will be useful,
      but WITHOUT ANY WARRANTY; without even the implied warranty of
      MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
      GNU Affero General Public License for more details.
  
      You should have received a copy of the GNU Affero General Public License
      along with this program; if not, see http://www.gnu.org/licenses
  
  """
  
  from moulinette.core import MoulinetteError
  from moulinette import m18n
  
  
  class YunohostError(MoulinetteError):
  
      http_code = 500
  
      """
      Yunohost base exception
  
      The (only?) main difference with MoulinetteError being that keys
      are translated via m18n.n (namespace) instead of m18n.g (global?)
      """
  
      def __init__(self, key, raw_msg=False, log_ref=None, *args, **kwargs):
          self.key = key  # Saving the key is useful for unit testing
          self.kwargs = kwargs  # Saving the key is useful for unit testing
          self.log_ref = log_ref
          if raw_msg:
              msg = key
          else:
              msg = m18n.n(key, *args, **kwargs)
  
          super(YunohostError, self).__init__(msg, raw_msg=True)
  
      def content(self):
  
          if not self.log_ref:
              return super(YunohostError, self).content()
          else:
              return {"error": self.strerror, "log_ref": self.log_ref}
  
  
  class YunohostValidationError(YunohostError):
  
      http_code = 400
  
new_contents: # -*- coding: utf-8 -*-
  
  """ License
  
      Copyright (C) 2018 YUNOHOST.ORG
  
      This program is free software; you can redistribute it and/or modify
      it under the terms of the GNU Affero General Public License as published
      by the Free Software Foundation, either version 3 of the License, or
      (at your option) any later version.
  
      This program is distributed in the hope that it will be useful,
      but WITHOUT ANY WARRANTY; without even the implied warranty of
      MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
      GNU Affero General Public License for more details.
  
      You should have received a copy of the GNU Affero General Public License
      along with this program; if not, see http://www.gnu.org/licenses
  
  """
  
  from moulinette.core import MoulinetteError
  from moulinette import m18n
  
  
  class YunohostError(MoulinetteError):
  
      http_code = 500
  
      """
      Yunohost base exception
  
      The (only?) main difference with MoulinetteError being that keys
      are translated via m18n.n (namespace) instead of m18n.g (global?)
      """
  
      def __init__(self, key, raw_msg=False, log_ref=None, *args, **kwargs):
          self.key = key  # Saving the key is useful for unit testing
          self.kwargs = kwargs  # Saving the key is useful for unit testing
          self.log_ref = log_ref
          if raw_msg:
              msg = key
          else:
              msg = m18n.n(key, *args, **kwargs)
  
          super(YunohostError, self).__init__(msg, raw_msg=True)
  
      def content(self):
  
          if not self.log_ref:
              return super().content()
          else:
              return {"error": self.strerror, "log_ref": self.log_ref}
  
  
  class YunohostValidationError(YunohostError):
  
      http_code = 400
  
      def content(self):
  
          return {"error": self.strerror, "error_key": self.key}
  
subject: Return a dict structure to the API for ValidationErrors, for easier error identification/interface