parameters: (cls, pax_headers, type, encoding)
return_statement: return cls._create_header(info, USTAR_FORMAT, "ascii", "replace") + \
  
                  cls._create_payload(records)
docstring: Return a POSIX.1-2008 extended or global header sequence
  
             that contains a list of keyword, value pairs. The values
  
             must be strings.
docstring_summary: Return a POSIX.1-2008 extended or global header sequence
docstring_tokens: Return a POSIX . 1 - 2008 extended or global header sequence
function: def _create_pax_generic_header(cls, pax_headers, type, encoding):
  
          """Return a POSIX.1-2008 extended or global header sequence
  
             that contains a list of keyword, value pairs. The values
  
             must be strings.
  
          """
  
          # Check if one of the fields contains surrogate characters and thereby
  
          # forces hdrcharset=BINARY, see _proc_pax() for more information.
  
          binary = False
  
          for keyword, value in pax_headers.items():
  
              try:
  
                  value.encode("utf8", "strict")
  
              except UnicodeEncodeError:
  
                  binary = True
  
                  break
  
  
  
          records = b""
  
          if binary:
  
              # Put the hdrcharset field at the beginning of the header.
  
              records += b"21 hdrcharset=BINARY\n"
  
  
  
          for keyword, value in pax_headers.items():
  
              keyword = keyword.encode("utf8")
  
              if binary:
  
                  # Try to restore the original byte representation of `value'.
  
                  # Needless to say, that the encoding must match the string.
  
                  value = value.encode(encoding, "surrogateescape")
  
              else:
  
                  value = value.encode("utf8")
  
  
  
              l = len(keyword) + len(value) + 3   # ' ' + '=' + '\n'
  
              n = p = 0
  
              while True:
  
                  n = l + len(str(p))
  
                  if n == p:
  
                      break
  
                  p = n
  
              records += bytes(str(p), "ascii") + b" " + keyword + b"=" + value + b"\n"
  
  
  
          # We use a hardcoded "././@PaxHeader" name like star does
  
          # instead of the one that POSIX recommends.
  
          info = {}
  
          info["name"] = "././@PaxHeader"
  
          info["type"] = type
  
          info["size"] = len(records)
  
          info["magic"] = POSIX_MAGIC
  
  
  
          # Create pax header + record blocks.
  
          return cls._create_header(info, USTAR_FORMAT, "ascii", "replace") + \
  
                  cls._create_payload(records)
function_tokens: def _create_pax_generic_header ( cls , pax_headers , type , encoding ) : # Check if one of the fields contains surrogate characters and thereby # forces hdrcharset=BINARY, see _proc_pax() for more information. binary = False for keyword , value in pax_headers . items ( ) : try : value . encode ( "utf8" , "strict" ) except UnicodeEncodeError : binary = True break records = b"" if binary : # Put the hdrcharset field at the beginning of the header. records += b"21 hdrcharset=BINARY\n" for keyword , value in pax_headers . items ( ) : keyword = keyword . encode ( "utf8" ) if binary : # Try to restore the original byte representation of `value'. # Needless to say, that the encoding must match the string. value = value . encode ( encoding , "surrogateescape" ) else : value = value . encode ( "utf8" ) l = len ( keyword ) + len ( value ) + 3 # ' ' + '=' + '\n' n = p = 0 while True : n = l + len ( str ( p ) ) if n == p : break p = n records += bytes ( str ( p ) , "ascii" ) + b" " + keyword + b"=" + value + b"\n" # We use a hardcoded "././@PaxHeader" name like star does # instead of the one that POSIX recommends. info = { } info [ "name" ] = "././@PaxHeader" info [ "type" ] = type info [ "size" ] = len ( records ) info [ "magic" ] = POSIX_MAGIC # Create pax header + record blocks. return cls . _create_header ( info , USTAR_FORMAT , "ascii" , "replace" ) + cls . _create_payload ( records )