async def rotate(self, source: str, dest: str):
if self.rotator is None:<EOL><INDENT>if await self.loop.run_in_executor(<EOL>None, lambda: os.path.exists(source)<EOL>):<EOL><INDENT>await self.loop.run_in_executor(  <EOL>None, lambda: os.rename(source, dest)<EOL>)<EOL><DEDENT><DEDENT>else:<EOL><INDENT>self.rotator(source, dest)<EOL><DEDENT>
When rotating, rotate the current log.

The default implementation calls the 'rotator' attribute of the
handler, if it's callable, passing the source and dest arguments to
it. If the attribute isn't callable (the default is None), the source
is simply renamed to the destination.

:param source: The source filename. This is normally the base
               filename, e.g. 'test.log'
:param dest:   The destination filename. This is normally
               what the source is rotated to, e.g. 'test.log.1'.