Merge branch 'httpie'
This commit is contained in:
		
						commit
						918b318cc5
					
				
							
								
								
									
										159
									
								
								src/_httpie
								
								
								
								
							
							
						
						
									
										159
									
								
								src/_httpie
								
								
								
								
							| 
						 | 
					@ -10,50 +10,143 @@
 | 
				
			||||||
# -------
 | 
					# -------
 | 
				
			||||||
#
 | 
					#
 | 
				
			||||||
#  * Akira Maeda <https://github.com/glidenote>
 | 
					#  * Akira Maeda <https://github.com/glidenote>
 | 
				
			||||||
 | 
					#  * Valodim <https://github.com/Valodim>
 | 
				
			||||||
#
 | 
					#
 | 
				
			||||||
# ------------------------------------------------------------------------------
 | 
					# ------------------------------------------------------------------------------
 | 
				
			||||||
# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*-
 | 
					# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*-
 | 
				
			||||||
# vim: ft=zsh sw=2 ts=2 et
 | 
					# vim: ft=zsh sw=2 ts=2 et
 | 
				
			||||||
# ------------------------------------------------------------------------------
 | 
					# ------------------------------------------------------------------------------
 | 
				
			||||||
 | 
					
 | 
				
			||||||
local -a _method
 | 
					_httpie_params () {
 | 
				
			||||||
_method=(GET POST PUT DELETE HEAD OPTIONS TRACE CONNECT PATCH LINK UNLINK)
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
_describe -t commands 'METHOD' _method || compadd "$@"
 | 
					    local ret=1 expl
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    # or a url
 | 
				
			||||||
 | 
					    if (( CURRENT <= NORMARG+1 )) && [[ $words[NORMARG] != *:* ]] ; then
 | 
				
			||||||
 | 
					        _httpie_urls && ret=0
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    # regular param, if we already have a url
 | 
				
			||||||
 | 
					    elif (( CURRENT > NORMARG )); then
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        # if the suffix is precisely : this is shorthand for a header
 | 
				
			||||||
 | 
					        if [[ -prefix ':' ]]; then
 | 
				
			||||||
 | 
					            PREFIX=
 | 
				
			||||||
 | 
					            SUFFIX=:
 | 
				
			||||||
 | 
					        fi
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        # if we are in front of a : (possibly due to the PREFIX move before)
 | 
				
			||||||
 | 
					        if [[ -suffix ':' ]]; then
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            # this is rather buggy with normal tab behavior :\
 | 
				
			||||||
 | 
					            compstate[insert]=menu
 | 
				
			||||||
 | 
					            _wanted http_header expl 'HTTP Header' \
 | 
				
			||||||
 | 
					                compadd -s ':' -S '' -- Content-Type Cookie && return 0
 | 
				
			||||||
 | 
					        fi
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        # ignore all prefix stuff
 | 
				
			||||||
 | 
					        compset -P '(#b)([^:@=]#)'
 | 
				
			||||||
 | 
					        local name=$match[1]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        if compset -P ':'; then
 | 
				
			||||||
 | 
					            _message "$name header content"
 | 
				
			||||||
 | 
					        elif compset -P '@'; then
 | 
				
			||||||
 | 
					            _files
 | 
				
			||||||
 | 
					        elif compset -P ':='; then
 | 
				
			||||||
 | 
					            _message "$name raw json data"
 | 
				
			||||||
 | 
					        elif compset -P '=='; then
 | 
				
			||||||
 | 
					            _message "$name url parameter value"
 | 
				
			||||||
 | 
					        elif compset -P '='; then
 | 
				
			||||||
 | 
					            _message "$name data field value"
 | 
				
			||||||
 | 
					        else
 | 
				
			||||||
 | 
					            typeset -a ops
 | 
				
			||||||
 | 
					            ops=(
 | 
				
			||||||
 | 
					                '=:data field'
 | 
				
			||||||
 | 
					                '\::header'
 | 
				
			||||||
 | 
					                '==:request parameter'
 | 
				
			||||||
 | 
					                '@:data file field'
 | 
				
			||||||
 | 
					                '\:=:raw json field'
 | 
				
			||||||
 | 
					            )
 | 
				
			||||||
 | 
					            _describe -t httpparams "parameter types" ops -Q -S ''
 | 
				
			||||||
 | 
					        fi
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        ret=0
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    fi
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    # first arg may be a request method
 | 
				
			||||||
 | 
					    (( CURRENT == NORMARG )) &&
 | 
				
			||||||
 | 
					        _wanted http_method expl 'Request Method' \
 | 
				
			||||||
 | 
					            compadd GET POST PUT DELETE HEAD OPTIONS TRACE CONNECT PATCH LINK UNLINK && ret=0
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    return $ret
 | 
				
			||||||
 | 
					
 | 
				
			||||||
_httpie_urls() {
 | 
					 | 
				
			||||||
  local expl
 | 
					 | 
				
			||||||
  compset -S '[^:]*'
 | 
					 | 
				
			||||||
  _wanted url-schemas expl 'URL schema' compadd -S '' - \
 | 
					 | 
				
			||||||
    http:// https://
 | 
					 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
_arguments -C -s \
 | 
					_httpie_urls() {
 | 
				
			||||||
  {-j,--json}'[Data items from the command line are serialized as a JSON object.]' \
 | 
					
 | 
				
			||||||
  {-f,--form}'[Data items from the command line are serialized as form fields.]' \
 | 
					  local ret=1
 | 
				
			||||||
  '--pretty[Controls output processing.]:PRETTY:(all colors format none)' \
 | 
					
 | 
				
			||||||
  {-s,--style}'[Output coloring style]:STYLE:(autumn borland bw colorful default emacs friendly fruity manni monokai murphy native pastie perldoc ttr solarized tango trac vim vs)' \
 | 
					  if ! [[ -prefix [-+.a-z0-9]#:// ]]; then
 | 
				
			||||||
  {-p,--print}'[String specifying what the output should contain]:OUTPUT_OPTIONS:(H B h b)' \
 | 
					    local expl
 | 
				
			||||||
  {-v,--verbose}'[Print the whole request as well as the response.]' \
 | 
					    compset -S '[^:/]*' && compstate[to_end]=''
 | 
				
			||||||
  {-h,--headers}'[Print only the response headers.]' \
 | 
					    _wanted url-schemas expl 'URL schema' compadd -S '' http:// https:// && ret=0
 | 
				
			||||||
  {-b,--body}'[Print only the response body.]' \
 | 
					  else
 | 
				
			||||||
  {-S,--stream}'[Always stream the output by line, i.e., behave like `tail -f`.]' \
 | 
					    _urls && ret=0
 | 
				
			||||||
  {-o,--output}'[Save output to FILE.]:FILE:_files' \
 | 
					  fi
 | 
				
			||||||
  {-d,--download}'[Do not print the response body to stdout.]' \
 | 
					
 | 
				
			||||||
  {-c,--continue}'[Resume an interrupted download.]' \
 | 
					  return $ret
 | 
				
			||||||
  '--session[Create, or reuse and update a session.]:SESSION_NAME_OR_PATH' \
 | 
					
 | 
				
			||||||
  '--session-read-only[Create or read a session without updating it form the request/response exchange.]:SESSION_NAME_OR_PATH' \
 | 
					}
 | 
				
			||||||
  {-a,--auth}'[If only the username is provided (-a username)]:USER\:PASS' \
 | 
					
 | 
				
			||||||
  '--auth-type[The authentication mechanism to be used. Defaults to "basic".]:AUTH-TYPE:(basic digest)' \
 | 
					_httpie_printflags () {
 | 
				
			||||||
  '--proxy[String mapping protocol to the URL of the proxy (e.g.http:foo.bar:3128).]:PROXY' \
 | 
					
 | 
				
			||||||
  '--follow[Set this flag if full redirects are allowed]' \
 | 
					    local ret=1
 | 
				
			||||||
  "--verify[Set to \"no\" to skip checking the host's SSL certificate.]:VERIFY:(yes no)" \
 | 
					
 | 
				
			||||||
 | 
					    # not sure why this is necessary, but it will complete "-pH" style without it
 | 
				
			||||||
 | 
					    [[ $IPREFIX == "-p" ]] && IPREFIX+=" "
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    compset -P '(#b)([a-zA-Z]#)'
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    local -a flags
 | 
				
			||||||
 | 
					    [[ $match[1] != *H* ]] && flags+=( "H:request headers" )
 | 
				
			||||||
 | 
					    [[ $match[1] != *B* ]] && flags+=( "B:request body" )
 | 
				
			||||||
 | 
					    [[ $match[1] != *h* ]] && flags+=( "h:response headers" )
 | 
				
			||||||
 | 
					    [[ $match[1] != *b* ]] && flags+=( "b:response body" )
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    _describe -t printflags "print flags" flags -S '' && ret=0
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    return $ret
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					integer NORMARG
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					_arguments -n -C -s \
 | 
				
			||||||
 | 
					  '(-j --json -f)'{-j,--json}'[Data items from the command line are serialized as a JSON object.]' \
 | 
				
			||||||
 | 
					  '(-f --form -j)'{-f,--form}'[Data items from the command line are serialized as form fields.]' \
 | 
				
			||||||
 | 
					  '--pretty=[Controls output processing.]:output format:(all colors format none)' \
 | 
				
			||||||
 | 
					  '(-s --style)'{-s,--style}'=[Output coloring style]:STYLE:(autumn borland bw colorful default emacs friendly fruity manni monokai murphy native pastie perldoc ttr solarized tango trac vim vs)' \
 | 
				
			||||||
 | 
					  '(-p --print)'{-p,--print}'=[String specifying what the output should contain]:print flags:_httpie_printflags' \
 | 
				
			||||||
 | 
					  '(-v --verbose)'{-v,--verbose}'[Print the whole request as well as the response.]' \
 | 
				
			||||||
 | 
					  '(-p -h --headers)'{-h,--headers}'[Print only the response headers.]' \
 | 
				
			||||||
 | 
					  '(-p -b --body)'{-b,--body}'[Print only the response body.]' \
 | 
				
			||||||
 | 
					  '(-S --stream)'{-S,--stream}'[Always stream the output by line, i.e., behave like `tail -f`.]' \
 | 
				
			||||||
 | 
					  '(-o --output)'{-o,--output}'=[Save output to FILE.]:output file:_files' \
 | 
				
			||||||
 | 
					  '(-d --download)'{-d,--download}'=[Do not print the response body to stdout.]' \
 | 
				
			||||||
 | 
					  '(-c --continue)'{-c,--continue}'[Resume an interrupted download.]' \
 | 
				
			||||||
 | 
					  '(--session-read-only)--session=[Create, or reuse and update a session.]:session name (or path)' \
 | 
				
			||||||
 | 
					  '(--session)--session-read-only=[Create or read a session without updating it form the request/response exchange.]:session name (or path)' \
 | 
				
			||||||
 | 
					  '(-a --auth)'{-a,--auth}'=[If only the username is provided (-a username)]:USER\:PASS' \
 | 
				
			||||||
 | 
					  '--auth-type=[The authentication mechanism to be used. Defaults to "basic".]:AUTH-TYPE:(basic digest)' \
 | 
				
			||||||
 | 
					  '--proxy=[String mapping protocol to the URL of the proxy.]:PROXY' \
 | 
				
			||||||
 | 
					  '--follow[Allow full redirects.]' \
 | 
				
			||||||
 | 
					  "--verify=[Enable or disable verification of ssl certificates.]:verify certificate:(yes no)" \
 | 
				
			||||||
  '--allow-redirects[Set this flag if full redirects are allowed (e.g. re-POST-ing of data at new ``Location``)]' \
 | 
					  '--allow-redirects[Set this flag if full redirects are allowed (e.g. re-POST-ing of data at new ``Location``)]' \
 | 
				
			||||||
  '--timeout[Float describes the timeout of the request (Use socket.setdefaulttimeout() as fallback).]:SECONDS' \
 | 
					  '--timeout=[Float describes the timeout of the request (Use socket.setdefaulttimeout() as fallback).]:timeout (seconds)' \
 | 
				
			||||||
  '--check-status[This flag instructs HTTPie to also check the HTTP status code and exit with an error if the status indicates one.  ]' \
 | 
					  '--check-status[This flag instructs HTTPie to also check the HTTP status code and exit with an error if the status indicates one.]' \
 | 
				
			||||||
  '--ignore-stdin[Do not attempt to read stdin.]' \
 | 
					  '--ignore-stdin[Do not attempt to read stdin.]' \
 | 
				
			||||||
  '--help[show help message.]' \
 | 
					  '(- *)--help[show help message.]' \
 | 
				
			||||||
  "--version[show program's version number and exit.]" \
 | 
					  "(- *)--version[show program's version number and exit.]" \
 | 
				
			||||||
  '--traceback[Prints exception traceback should one occur.]' \
 | 
					  '--traceback[Prints exception traceback should one occur.]' \
 | 
				
			||||||
  '--debug[Prints exception traceback should one occur and other information useful for debugging HTTPie itself.]' \
 | 
					  '--debug[Prints exception traceback should one occur and other information useful for debugging HTTPie itself.]' \
 | 
				
			||||||
 '*:URL:_httpie_urls' && return 0
 | 
					  '*:args:_httpie_params' && return 0
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in New Issue