docs: def parse_http_date(date):
      """
      Parse a date format as specified by HTTP RFC7231 section 7.1.1.1.
  
      The three formats allowed by the RFC are accepted, even if only the first
      one is still in widespread use.
  
      Return an integer expressed in seconds since the epoch, in UTC.
  
      Implementation copied from Django.
      https://github.com/django/django/blob/master/django/utils/http.py#L157
      License: BSD 3-clause
      """
      MONTHS = 'jan feb mar apr may jun jul aug sep oct nov dec'.split()
      __D = r'(?P<day>\d{2})'
      __D2 = r'(?P<day>[ \d]\d)'
      __M = r'(?P<mon>\w{3})'
      __Y = r'(?P<year>\d{4})'
      __Y2 = r'(?P<year>\d{2})'
      __T = r'(?P<hour>\d{2}):(?P<min>\d{2}):(?P<sec>\d{2})'
      RFC1123_DATE = re.compile(r'^\w{3}, %s %s %s %s GMT$' % (__D, __M, __Y, __T))
      RFC850_DATE = re.compile(r'^\w{6,9}, %s-%s-%s %s GMT$' % (__D, __M, __Y2, __T))
      ASCTIME_DATE = re.compile(r'^\w{3} %s %s %s %s$' % (__M, __D2, __T, __Y))
      # email.utils.parsedate() does the job for RFC1123 dates; unfortunately
      # RFC7231 makes it mandatory to support RFC850 dates too. So we roll
      # our own RFC-compliant parsing.
      for regex in RFC1123_DATE, RFC850_DATE, ASCTIME_DATE:
          m = regex.match(date)
          if m is not None:
              break
      else:
          raise ValueError("%r is not in a valid HTTP date format" % date)
      try:
          year = int(m.group('year'))
          if year < 100:
              if year < 70:
                  year += 2000
              else:
                  year += 1900
          month = MONTHS.index(m.group('mon').lower()) + 1
          day = int(m.group('day'))
          hour = int(m.group('hour'))
          min = int(m.group('min'))
          sec = int(m.group('sec'))
          result = datetime.datetime(year, month, day, hour, min, sec)
          return calendar.timegm(result.utctimetuple())
      except Exception as exc:
          raise ValueError("%r is not a valid date" % date) from exc