This is the main helper, it adds a meal to the
            canteen. The following data are needed:

            :param datetime.date date: Date for the meal
            :param str category:  Name of the meal category
            :param str meal: Meal name.

            :raises ValueError: if the meal name is empty or longer that 250 characters
            :raises ValueError: if the price role is unknown
            :raises ValueError: if the category name is empty
            :raises ValueError: if note list contains empty note
            :raises TypeError: if the price value is not an integer

            Additional the following data are also supported:

            :param notes: List of notes
            :type notes: list
            :param prices: Price of the meal; Every key must be a string for
                 the role of the persons who can use this tariff; The value is
                 the price in Euro Cents, The site of the OpenMensa project
                 offers more detailed information.
            :type prices: dict

def addMeal(self, date, category, name, notes=None, prices=None):
        """ This is the main helper, it adds a meal to the
            canteen. The following data are needed:

            :param datetime.date date: Date for the meal
            :param str category:  Name of the meal category
            :param str meal: Meal name.

            :raises ValueError: if the meal name is empty or longer that 250 characters
            :raises ValueError: if the price role is unknown
            :raises ValueError: if the category name is empty
            :raises ValueError: if note list contains empty note
            :raises TypeError: if the price value is not an integer

            Additional the following data are also supported:

            :param notes: List of notes
            :type notes: list
            :param prices: Price of the meal; Every key must be a string for
                 the role of the persons who can use this tariff; The value is
                 the price in Euro Cents, The site of the OpenMensa project
                 offers more detailed information.
            :type prices: dict"""
        # check name:
        if not len(name):
            raise ValueError('Meal names must not be empty')
        if len(name) > 250:
            raise ValueError('Meal names must be shorter than 251 characters')
        # check category:
        if not len(category):
            raise ValueError('Category names must not be empty')
        # process notes
        if notes:
            for note in notes:
                if not len(note):
                    raise ValueError('Note must not be empty. Left it out, if not needed')
        # process prices:
        if prices is None:
            prices = {}
        else:
            for role in prices:
                if role not in self.allowed_price_roles:
                    raise ValueError('Unknown price role "%s"' % role)
                if not isinstance(prices[role], int):
                    raise TypeError('Unsupport price type - expect integer')
        # ensure we have an entry for this date
        date = self._handleDate(date)
        if date not in self._days:
            self._days[date] = OrderedDict()
        # ensure we have a category element for this category
        if category not in self._days[date]:
            self._days[date][category] = []
        # add meal into category:
        self._days[date][category].append((name, notes or [], prices))