updated with pymotw