code: def create_args_parser(description):
      parser = argparse.ArgumentParser(description=description)
      def network_port(string):
          value = int(string)
          if not 0 < value <= 65535:
              raise argparse.ArgumentTypeError(
                  'port must be in ]0,65535] interval')
          return value
      def cacert_file(cacert):
          try:
              context = ssl.create_default_context(cafile=cacert)
          except AttributeError:
              return cacert
          except IOError:
              raise argparse.ArgumentTypeError('CA Certificate not found')
          try:
              not_after = context.get_ca_certs()[0]['notAfter']
              not_after = ssl.cert_time_to_seconds(not_after)
              not_before = context.get_ca_certs()[0]['notBefore']
              not_before = ssl.cert_time_to_seconds(not_before)
          except (KeyError, IndexError):
              raise argparse.ArgumentTypeError('CA Certificate is erroneous')
          if not_after < int(time.time()):
              raise argparse.ArgumentTypeError('CA Certificate expired')
          if not_before > int(time.time()):
              raise argparse.ArgumentTypeError('CA Certificate not active yet')
          return cacert
      def log_level(string):
          value = getattr(logging, string.upper(), None)
          if not isinstance(value, int):
              raise argparse.ArgumentTypeError(
                  'log level must be one of {debug,info,warning,error,critical}')
          return value
      def filename(string):
          if not os.path.isfile(string):
              raise argparse.ArgumentTypeError(
                  '%s is not a valid file path' % string)
          return string
      parser.add_argument('-p', '--port', default=PORT, type=network_port,
                          help='TCP Port to listen on. Default: {0}'.format(PORT))
      parser.add_argument('-b', '--bind-address', default=ADDRESS,
                          help='Address to listen on. Default: {0}'
                          .format(ADDRESS))
      parser.add_argument('-u', '--unix-socket',
                          help='Unix file socket to listen on.')
      parser.add_argument('-k', '--key-file', type=filename,
                          help='Server key file. Default: {0}'.format(KEY_FILE))
      parser.add_argument('-c', '--cert-file', type=filename,
                          help='Server cert file. Default: {0}'.format(CERT_FILE))
      parser.add_argument('--ca-file', type=cacert_file,
                          help='CA cert file. Default: {0}'.format(CA_FILE))
      parser.add_argument('-L', '--log-level', default='warning', type=log_level,
                          help='Wished level of logging. Default: WARNING')
      parser.add_argument('--foreground', action='store_true',
                          help='Run in foreground and logs all messages to console.')
      parser.add_argument('-l', '--log-file', type=filename,
                          help='Path to the logging file.')
      parser.add_argument('--version', action='store_true',
                          help='Print version then exit.')
      return parser