Validates that all required fields are present

def validate(self):
    """ Validates that all required fields are present """
    if not self.start:
      raise ValueError("Event has no start date")

    if not self.end:
      raise ValueError("Event has no end date")

    if self.end < self.start:
      raise ValueError("Start date is after end date")

    if self.reminder_minutes_before_start and not isinstance(self.reminder_minutes_before_start, int):
      raise TypeError("reminder_minutes_before_start must be of type int")

    if self.is_all_day and not isinstance(self.is_all_day, bool):
      raise TypeError("is_all_day must be of type bool")