scrapinghub-client 0.0.1 → 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/README.md +2 -2
- data/lib/scrapinghub/jobs.rb +30 -30
- data/lib/scrapinghub/version.rb +1 -1
- data/scrapinghub.gemspec +1 -1
- data/spec/integration/jobs_spec.rb +2 -2
- metadata +5 -5
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 3511f325b2c1cc5ecb3757701a6ff3bc837f57ff
|
4
|
+
data.tar.gz: c32c5d71fe5f8fec373efbe530f3e704ae28d80f
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 9788f21ed29f22d3d65652243a8585f733e5383e5e1bfe7712f1532d10f03269f7759d877c061c9c6957a554cdf776bd3d1f0b35d4f3d21e4371772e93ef2e2d
|
7
|
+
data.tar.gz: 8af726be06460cff06d67db37f245d167a3c97a6de391c6e08a4bd62e3a7ff23e6f2a197e2ee3d77d9699f25fcc338cfedbeee9fa4834cdaa1d9dc4257df72b5
|
data/README.md
CHANGED
@@ -8,7 +8,7 @@ Scrapinghub client
|
|
8
8
|
|
9
9
|
Ruby client for the [Scrapinghub API][api]. So far it only supports the [Jobs API][jobs-api] (pull requests welcome).
|
10
10
|
|
11
|
-
This library tries to take an FP-ish approach. It uses the [contracts gem][contracts] for validating function input and output types (see the [docs][] for the full list of functions and their types) and the [kleisli gem][kleisli] for returning composition-friendly output types. Outputs will be a `
|
11
|
+
This library tries to take an FP-ish approach. It uses the [contracts gem][contracts] for validating function input and output types (see the [docs][] for the full list of functions and their types) and the [kleisli gem][kleisli] for returning composition-friendly output types. Outputs will be a `Left` if the Scrapinghub API returns failure or if an exception was raised (e.g. a network timeout), or a `Right` if the operation was successful.
|
12
12
|
|
13
13
|
The Kleisli gem [introductory blog post][kleisli-blog] gives some great examples on how to work with the output types.
|
14
14
|
|
@@ -32,7 +32,7 @@ require "scrapinghub-client"
|
|
32
32
|
j = Scrapinghub::Jobs.new(api_key: 'abc123')
|
33
33
|
j.schedule(project: 123, spider: "foo", add_tag: "bar", extra: { DOWNLOAD_DELAY: "0.5" })
|
34
34
|
.fmap{|r| puts "Job scheduled! Jobid: #{r['jobid']}"}
|
35
|
-
.or{|f| puts "Failed to schedule job! Reason: #{f.
|
35
|
+
.or{|f| puts "Failed to schedule job! Reason: #{f.value}"}
|
36
36
|
```
|
37
37
|
|
38
38
|
[travis]: https://travis-ci.org/abevoelker/scrapinghub-client
|
data/lib/scrapinghub/jobs.rb
CHANGED
@@ -25,7 +25,7 @@ module Scrapinghub
|
|
25
25
|
:state => Optional[Or["pending", "running", "finished"]],
|
26
26
|
:has_tag => Optional[Or[String, ArrayOf[String]]],
|
27
27
|
:lacks_tag => Optional[Or[String, ArrayOf[String]]],
|
28
|
-
:count => Optional[Nat] ] =>
|
28
|
+
:count => Optional[Nat] ] => Kleisli::Either
|
29
29
|
# Retrieve information about jobs.
|
30
30
|
#
|
31
31
|
# @param project [Fixnum] the project's numeric ID
|
@@ -41,13 +41,13 @@ module Scrapinghub
|
|
41
41
|
# containing the given tag(s)
|
42
42
|
# @param count [Fixnum] (optional) maximum number of jobs to return
|
43
43
|
#
|
44
|
-
# @return [Kleisli::
|
45
|
-
#
|
46
|
-
#
|
47
|
-
#
|
44
|
+
# @return [Kleisli::Left] if validation fails (e.g. bad authentication) or
|
45
|
+
# if there were any low-level exceptions (e.g. the host is down), with a
|
46
|
+
# message detailing the failure.
|
47
|
+
# @return [Kleisli::Right] if the operation was successful.
|
48
48
|
def list(args)
|
49
49
|
options = { query: args, basic_auth: { username: @api_key } }
|
50
|
-
Try { self.class.get("/api/jobs/list.json", options) } >-> response {
|
50
|
+
Try { self.class.get("/api/jobs/list.json", options) }.to_either >-> response {
|
51
51
|
if response.code == 200
|
52
52
|
Right(response)
|
53
53
|
else
|
@@ -60,7 +60,7 @@ module Scrapinghub
|
|
60
60
|
:spider => String,
|
61
61
|
:add_tag => Optional[Or[String, ArrayOf[String]]],
|
62
62
|
:priority => Optional[Or[0, 1, 2, 3, 4]],
|
63
|
-
:extra => Optional[HashOf[Symbol => String]] ] =>
|
63
|
+
:extra => Optional[HashOf[Symbol => String]] ] => Kleisli::Either
|
64
64
|
# Schedule a job.
|
65
65
|
#
|
66
66
|
# @param project [Fixnum] the project's numeric ID
|
@@ -71,14 +71,14 @@ module Scrapinghub
|
|
71
71
|
# @param extra [Hash] (optional) extra parameters passed as spider
|
72
72
|
# arguments
|
73
73
|
#
|
74
|
-
# @return [Kleisli::
|
75
|
-
#
|
76
|
-
#
|
77
|
-
#
|
74
|
+
# @return [Kleisli::Left] if validation fails (e.g. bad authentication) or
|
75
|
+
# if there were any low-level exceptions (e.g. the host is down), with a
|
76
|
+
# message detailing the failure.
|
77
|
+
# @return [Kleisli::Right] if the operation was successful.
|
78
78
|
def schedule(args)
|
79
79
|
extra = args.delete(:extra) || {}
|
80
80
|
options = { body: args.merge(extra), basic_auth: { username: @api_key } }
|
81
|
-
Try { self.class.post("/api/schedule.json", options) } >-> response {
|
81
|
+
Try { self.class.post("/api/schedule.json", options) }.to_either >-> response {
|
82
82
|
if response.code == 200
|
83
83
|
Right(response)
|
84
84
|
else
|
@@ -94,7 +94,7 @@ module Scrapinghub
|
|
94
94
|
:has_tag => Optional[Or[String, ArrayOf[String]]],
|
95
95
|
:lacks_tag => Optional[Or[String, ArrayOf[String]]],
|
96
96
|
:add_tag => Optional[Or[String, ArrayOf[String]]],
|
97
|
-
:remove_tag => Optional[Or[String, ArrayOf[String]]] ] =>
|
97
|
+
:remove_tag => Optional[Or[String, ArrayOf[String]]] ] => Kleisli::Either
|
98
98
|
# Update information about jobs.
|
99
99
|
#
|
100
100
|
# @param project [Fixnum] the project's numeric ID
|
@@ -112,13 +112,13 @@ module Scrapinghub
|
|
112
112
|
# @param remove_tag [String, Array<String>] (optional) tag(s) to remove
|
113
113
|
# from the queried jobs
|
114
114
|
#
|
115
|
-
# @return [Kleisli::
|
116
|
-
#
|
117
|
-
#
|
118
|
-
#
|
115
|
+
# @return [Kleisli::Left] if validation fails (e.g. bad authentication) or
|
116
|
+
# if there were any low-level exceptions (e.g. the host is down), with a
|
117
|
+
# message detailing the failure.
|
118
|
+
# @return [Kleisli::Right] if the operation was successful.
|
119
119
|
def update(args)
|
120
120
|
options = { body: args, basic_auth: { username: @api_key } }
|
121
|
-
Try { self.class.post("/api/jobs/update.json", options) } >-> response {
|
121
|
+
Try { self.class.post("/api/jobs/update.json", options) }.to_either >-> response {
|
122
122
|
if response.code == 200
|
123
123
|
Right(response)
|
124
124
|
else
|
@@ -128,19 +128,19 @@ module Scrapinghub
|
|
128
128
|
end
|
129
129
|
|
130
130
|
Contract KeywordArgs[:project => Nat,
|
131
|
-
:job => Or[String, ArrayOf[String]] ] =>
|
131
|
+
:job => Or[String, ArrayOf[String]] ] => Kleisli::Either
|
132
132
|
# Delete one or more jobs.
|
133
133
|
#
|
134
134
|
# @param project [Fixnum] the project's numeric ID
|
135
135
|
# @param job [String, Array<String>] the ID of a specific job to delete
|
136
136
|
#
|
137
|
-
# @return [Kleisli::
|
138
|
-
#
|
139
|
-
#
|
140
|
-
#
|
137
|
+
# @return [Kleisli::Left] if validation fails (e.g. bad authentication) or
|
138
|
+
# if there were any low-level exceptions (e.g. the host is down), with a
|
139
|
+
# message detailing the failure.
|
140
|
+
# @return [Kleisli::Right] if the operation was successful.
|
141
141
|
def delete(args)
|
142
142
|
options = { body: args, basic_auth: { username: @api_key } }
|
143
|
-
Try { self.class.post("/api/jobs/delete.json", options) } >-> response {
|
143
|
+
Try { self.class.post("/api/jobs/delete.json", options) }.to_either >-> response {
|
144
144
|
if response.code == 200
|
145
145
|
Right(response)
|
146
146
|
else
|
@@ -150,19 +150,19 @@ module Scrapinghub
|
|
150
150
|
end
|
151
151
|
|
152
152
|
Contract KeywordArgs[:project => Nat,
|
153
|
-
:job => String ] =>
|
153
|
+
:job => String ] => Kleisli::Either
|
154
154
|
# Stop one or more running jobs.
|
155
155
|
#
|
156
156
|
# @param project [Fixnum] the project's numeric ID
|
157
157
|
# @param job [String] the ID of a job to stop
|
158
158
|
#
|
159
|
-
# @return [Kleisli::
|
160
|
-
#
|
161
|
-
#
|
162
|
-
#
|
159
|
+
# @return [Kleisli::Left] if validation fails (e.g. bad authentication) or
|
160
|
+
# if there were any low-level exceptions (e.g. the host is down), with a
|
161
|
+
# message detailing the failure.
|
162
|
+
# @return [Kleisli::Right] if the operation was successful.
|
163
163
|
def stop(args)
|
164
164
|
options = { body: args, basic_auth: { username: @api_key } }
|
165
|
-
Try { self.class.post("/api/jobs/stop.json", options) } >-> response {
|
165
|
+
Try { self.class.post("/api/jobs/stop.json", options) }.to_either >-> response {
|
166
166
|
if response.code == 200
|
167
167
|
Right(response)
|
168
168
|
else
|
data/lib/scrapinghub/version.rb
CHANGED
data/scrapinghub.gemspec
CHANGED
@@ -16,7 +16,7 @@ Gem::Specification.new do |s|
|
|
16
16
|
s.test_files = `git ls-files -- {spec}/*`.split("\n")
|
17
17
|
|
18
18
|
s.add_dependency "contracts", "~> 0.11"
|
19
|
-
s.add_dependency "kleisli"
|
19
|
+
s.add_dependency "kleisli", ">= 0.2.7"
|
20
20
|
s.add_dependency "httparty"
|
21
21
|
|
22
22
|
s.add_development_dependency "rake"
|
@@ -5,8 +5,8 @@ shared_examples "connection_refused_returns_try" do
|
|
5
5
|
stub_request(:any, "dash.scrapinghub.com").to_timeout
|
6
6
|
end
|
7
7
|
|
8
|
-
it "returns a
|
9
|
-
expect(jobs.send(action, args)).to be_a Kleisli::
|
8
|
+
it "returns a Kleisli::Either::Left when host is down" do
|
9
|
+
expect(jobs.send(action, args)).to be_a Kleisli::Either::Left
|
10
10
|
end
|
11
11
|
end
|
12
12
|
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: scrapinghub-client
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0
|
4
|
+
version: 0.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Abe Voelker
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-
|
11
|
+
date: 2015-12-19 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: contracts
|
@@ -30,14 +30,14 @@ dependencies:
|
|
30
30
|
requirements:
|
31
31
|
- - ">="
|
32
32
|
- !ruby/object:Gem::Version
|
33
|
-
version:
|
33
|
+
version: 0.2.7
|
34
34
|
type: :runtime
|
35
35
|
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
38
|
- - ">="
|
39
39
|
- !ruby/object:Gem::Version
|
40
|
-
version:
|
40
|
+
version: 0.2.7
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
42
|
name: httparty
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
@@ -193,7 +193,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
193
193
|
version: '0'
|
194
194
|
requirements: []
|
195
195
|
rubyforge_project:
|
196
|
-
rubygems_version: 2.4.5
|
196
|
+
rubygems_version: 2.4.5.1
|
197
197
|
signing_key:
|
198
198
|
specification_version: 4
|
199
199
|
summary: Ruby client for Scrapinghub API
|