docs: def rotate(key_prefix, key_ext, bucket_name, daily_backups=7, weekly_backups=4, aws_key=None, aws_secret=None):
      """ Delete old files we've uploaded to S3 according to grandfather, father, sun strategy """
  
      session = boto3.Session(
          aws_access_key_id=aws_key,
          aws_secret_access_key=aws_secret
      )
      s3 = session.resource('s3')
      bucket = s3.Bucket(bucket_name)
      keys = bucket.objects.filter(Prefix=key_prefix)
  
      regex = '{0}-(?P<year>[\d]+?)-(?P<month>[\d]+?)-(?P<day>[\d]+?){1}'.format(key_prefix, key_ext)
      backups = []
  
      for key in keys:
          match = re.match(regex, str(key.key))
          if not match:
              continue
          year = int(match.group('year'))
          month = int(match.group('month'))
          day = int(match.group('day'))
          key_date = datetime(year, month, day)
          backups[:0] = [key_date]
      backups = sorted(backups, reverse=True)
  
      if len(backups) > daily_backups+1 and backups[daily_backups] - backups[daily_backups+1] < timedelta(days=7):
          key = bucket.Object("{0}{1}{2}".format(key_prefix,backups[daily_backups].strftime("-%Y-%m-%d"), key_ext))
          logger.debug("deleting {0}".format(key))
          key.delete()
          del backups[daily_backups]
  
      month_offset = daily_backups + weekly_backups
      if len(backups) > month_offset+1 and backups[month_offset] - backups[month_offset+1] < timedelta(days=30):
          key = bucket.Object("{0}{1}{2}".format(key_prefix,backups[month_offset].strftime("-%Y-%m-%d"), key_ext))
          logger.debug("deleting {0}".format(key))
          key.delete()
          del backups[month_offset]