docs: def parse_htdigest_file(self, filelike):
          """
          .htdigest files consist of lines in the following format::
  
              username:realm:passwordhash
  
          where both `username` and `realm` are plain-text without any colons
          and `passwordhash` is the result of ``md5(username : realm : password)``
          and thus `passwordhash` == HA1.
          """
          realm = None
          user_HA1_map = {}
  
          for lineno, line in enumerate(filter(None, filelike.read().splitlines()), 1):
              try:
                  username, realm2, password_hash = line.split(':')
              except ValueError:
                  raise ValueError("Line %d invalid: %r (username/password may not contain ':')" % (lineno, line))
              if realm is not None and realm != realm2:
                  raise ValueError("Line %d: realm may not vary (got %r and %r)" % (lineno, realm, realm2))
              else:
                  realm = realm2
                  user_HA1_map[username] = password_hash
  
          return realm, user_HA1_map