@experiments.over('<STR_LIT>', '<STR_LIT>')<EOL>@utils.for_each_value<EOL>def _dates(self, key, value):
if value.get('<STR_LIT:q>'):<EOL><INDENT>self['<STR_LIT>'] = normalize_date(value['<STR_LIT:q>'])<EOL><DEDENT>if value.get('<STR_LIT:r>'):<EOL><INDENT>self['<STR_LIT>'] = normalize_date(value['<STR_LIT:r>'])<EOL><DEDENT>if value.get('<STR_LIT:s>'):<EOL><INDENT>self['<STR_LIT>'] = normalize_date(value['<STR_LIT:s>'])<EOL><DEDENT>if value.get('<STR_LIT:c>'):<EOL><INDENT>self['<STR_LIT>'] = normalize_date(value['<STR_LIT:c>'])<EOL><DEDENT>if value.get('<STR_LIT:t>'):<EOL><INDENT>self['<STR_LIT>'] = normalize_date(value['<STR_LIT:t>'])<EOL><DEDENT>raise IgnoreKey<EOL>
Don't populate any key through the return value.

    On the other hand, populates the ``date_proposed``, ``date_approved``,
    ``date_started``, ``date_cancelled``, and the ``date_completed`` keys
    through side effects.