Finds all courses by a given substring. This is case-insensitive.

def find_courses(self, partial):
        """Finds all courses by a given substring. This is case-insensitive.
        """
        partial = partial.lower()
        keys = self.courses.keys()
        keys = [k for k in keys if k.lower().find(partial) != -1]
        courses = [self.courses[k] for k in keys]
        return list(set(courses))