File: scrapy_zsh_completion

package info (click to toggle)
python-scrapy 2.13.3-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 5,664 kB
  • sloc: python: 52,028; xml: 199; makefile: 25; sh: 7
file content (211 lines) | stat: -rw-r--r-- 6,790 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
#compdef scrapy
_scrapy() {
    local context state state_descr line
    local ret=1
    typeset -A opt_args
    _arguments \
	"(- 1 *)"{-h,--help}"[Help]" \
	"1: :->command" \
	"*:: :->args" && ret=0

    case $state in
	command)
	    _scrapy_cmds
	    ;;
	args)
	    case $words[1] in
		(bench)
		    _scrapy_glb_opts
		    ;;
		(fetch)
		    local options=(
			'--headers[print response HTTP headers instead of body]'
			'--no-redirect[do not handle HTTP 3xx status codes and print response as-is]'
			'--spider=[use this spider]:spider:_scrapy_spiders'
			'1::URL:_httpie_urls'
		    )
		    _scrapy_glb_opts $options
		    ;;
		(genspider)
		    local options=(
			{'(--list)-l','(-l)--list'}'[List available templates]'
			{'(--edit)-e','(-e)--edit'}'[Edit spider after creating it]'
			'--force[If the spider already exists, overwrite it with the template]'
			{'(--dump)-d','(-d)--dump='}'[Dump template to standard output]:template:(basic crawl csvfeed xmlfeed)'
			{'(--template)-t','(-t)--template='}'[Uses a custom template]:template:(basic crawl csvfeed xmlfeed)'
			'1:name:(NAME)'
			'2:domain:_httpie_urls'
		    )
		    _scrapy_glb_opts $options
		    ;;
		(runspider)
		    local options=(
			{'(--output)-o','(-o)--output='}'[dump scraped items into FILE (use - for stdout)]:file:_files'
			'*-a[set spider argument (may be repeated)]:value pair:(NAME=VALUE)'
			'1:spider file:_files -g \*.py'
		    )
		    _scrapy_glb_opts $options
		    ;;
		(settings)
		    local options=(
			'--get=[print raw setting value]:option:(SETTING)'
			'--getbool=[print setting value, interpreted as a boolean]:option:(SETTING)'
			'--getint=[print setting value, interpreted as an integer]:option:(SETTING)'
			'--getfloat=[print setting value, interpreted as a float]:option:(SETTING)'
			'--getlist=[print setting value, interpreted as a list]:option:(SETTING)'
		    )
		    _scrapy_glb_opts $options
		    ;;
		(shell)
		    local options=(
			'-c[evaluate the code in the shell, print the result and exit]:code:(CODE)'
			'--no-redirect[do not handle HTTP 3xx status codes and print response as-is]'
			'--spider=[use this spider]:spider:_scrapy_spiders'
			'::file:_files -g \*.html'
			'::URL:_httpie_urls'
		    )
		    _scrapy_glb_opts $options
		    ;;
		(startproject)
		    local options=(
			'1:name:(NAME)'
			'2:dir:_dir_list'
		    )
		    _scrapy_glb_opts $options
		    ;;
		(version)
		    local options=(
			{'(--verbose)-v','(-v)--verbose'}'[also display twisted/python/platform info (useful for bug reports)]'
		    )
		    _scrapy_glb_opts $options
		    ;;
		(view)
		    local options=(
			'--no-redirect[do not handle HTTP 3xx status codes and print response as-is]'
			'--spider=[use this spider]:spider:_scrapy_spiders'
			'1:URL:_httpie_urls'
		    )
		    _scrapy_glb_opts $options
		    ;;
		(check)
		    local options=(
			{'(--list)-l','(-l)--list'}'[only list contracts, without checking them]'
			{'(--verbose)-v','(-v)--verbose'}'[print contract tests for all spiders]'
			'1:spider:_scrapy_spiders'
		    )
		    _scrapy_glb_opts $options
		    ;;
		(crawl)
		    local options=(
			{'(--output)-o','(-o)--output='}'[dump scraped items into FILE (use - for stdout)]:file:_files'
			'*-a[set spider argument (may be repeated)]:value pair:(NAME=VALUE)'
			'1:spider:_scrapy_spiders'
		    )
		    _scrapy_glb_opts $options
		    ;;
		(edit)
		    local options=(
		      '1:spider:_scrapy_spiders'
		    )
		    _scrapy_glb_opts $options
		    ;;
		(list)
		    _scrapy_glb_opts
		    ;;
		(parse)
		    local options=(
			'*-a[set spider argument (may be repeated)]:value pair:(NAME=VALUE)'
			'--spider=[use this spider without looking for one]:spider:_scrapy_spiders'
			'--pipelines[process items through pipelines]'
			"--nolinks[don't show links to follow (extracted requests)]"
			"--noitems[don't show scraped items]"
			'--nocolour[avoid using pygments to colorize the output]'
			{'(--rules)-r','(-r)--rules'}'[use CrawlSpider rules to discover the callback]'
			{'(--callback)-c','(-c)--callback'}'[use this callback for parsing, instead looking for a callback]:callback:(CALLBACK)'
			{'(--meta)-m','(-m)--meta='}'[inject extra meta into the Request, it must be a valid raw json string]:meta:(META)'
			'--cbkwargs=[inject extra callback kwargs into the Request, it must be a valid raw json string]:arguments:(CBKWARGS)'
			{'(--depth)-d','(-d)--depth='}'[maximum depth for parsing requests (default: 1)]:depth:(DEPTH)'
			{'(--verbose)-v','(-v)--verbose'}'[print each depth level one by one]'
			'1:URL:_httpie_urls'
		    )
		    _scrapy_glb_opts $options
		    ;;
	    esac
	    ;;
    esac

    return ret
}

_scrapy_cmds() {
    local -a commands project_commands
    commands=(
        'bench:Run quick benchmark test'
        'fetch:Fetch a URL using the Scrapy downloader'
        'genspider:Generate new spider using pre-defined templates'
        'runspider:Run a self-contained spider (without creating a project)'
        'settings:Get settings values'
        'shell:Interactive scraping console'
        'startproject:Create new project'
        'version:Print Scrapy version'
        'view:Open URL in browser, as seen by Scrapy'
    )
    project_commands=(
	'check:Check spider contracts'
	'crawl:Run a spider'
        'edit:Edit spider'
        'list:List available spiders'
        'parse:Parse URL (using its spider) and print the results'
    )
    if [[ $(scrapy -h | grep -s "no active project") == "" ]]; then
	commands=(${commands[@]} ${project_commands[@]})
    fi
    _describe -t common-commands 'common commands' commands && ret=0
}

_scrapy_glb_opts() {
    local -a options
    options=(
	'(- *)'{-h,--help}'[show this help message and exit]'
	'(--nolog)--logfile=[log file. if omitted stderr will be used]:file:_files'
	'--pidfile=[write process ID to FILE]:file:_files'
	'--profile=[write python cProfile stats to FILE]:file:_files'
	{'(--loglevel --nolog)-L','(-L --nolog)--loglevel='}'[log level (default: INFO)]:log level:(DEBUG INFO WARN ERROR)'
	'(-L --loglevel --logfile)--nolog[disable logging completely]'
	'--pdb[enable pdb on failure]'
	'*'{-s,--set=}'[set/override setting (may be repeated)]:value pair:(NAME=VALUE)'
    )
    options=(${options[@]} "$@")
    _arguments -A "-*" $options && ret=0
}

_httpie_urls() {

  local ret=1

  if ! [[ -prefix [-+.a-z0-9]#:// ]]; then
    local expl
    compset -S '[^:/]*' && compstate[to_end]=''
    _wanted url-schemas expl 'URL schema' compadd -S '' http:// https:// && ret=0
  else
    _urls && ret=0
  fi

  return $ret

}

_scrapy_spiders() {

  local ret=1

  if [[ $(scrapy -h | grep -s "no active project") == "" ]]; then
      compadd -S '' $(scrapy list) && ret=0
  else
      compadd -S '' SPIDER && ret=0
  fi

  return $ret
}

_scrapy $@