embulk-input-http 0.0.5 → 0.0.6
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 +29 -6
- data/build.gradle +1 -1
- data/example/json-example.yml +1 -0
- data/src/main/java/org/embulk/input/BasicAuthConfig.java +39 -0
- data/src/main/java/org/embulk/input/HttpInputPlugin.java +41 -15
- data/src/main/java/org/embulk/input/ParamsConfig.java +9 -9
- data/src/main/java/org/embulk/input/QueryConfig.java +56 -15
- data/src/main/java/org/embulk/input/RetryHandler.java +3 -3
- data/src/test/java/org/embulk/input/TestParamsConfig.java +101 -0
- data/src/test/java/org/embulk/input/TestQueryConfig.java +125 -0
- metadata +16 -13
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: e0fd9d1c50eb1690a68282058341d8dfe47c2706
|
4
|
+
data.tar.gz: e64cca9c2d869cbd0a107331aad8ca91e4187441
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 72182010d6bb889cc86203e466d1cdcf35a64d47e4e38167414b7d204320558e7659aa3c09c0448e679c10a41a6e9884b278e63b545a4271d3b6f10571222760
|
7
|
+
data.tar.gz: cfe7a025c51abc126e4837578815b2139f7c938a0ee41e32f3a5d919589fdb1f03d18c61fa768b299bcd6d2258154dc764ff768c700de6c59c966d14e77bd782
|
data/README.md
CHANGED
@@ -29,11 +29,11 @@ in:
|
|
29
29
|
|
30
30
|
- **type**: specify this plugin as `http`
|
31
31
|
- **url**: base url something like api (required)
|
32
|
-
- **parser**: parser plugin to parse data in response (required)
|
33
32
|
- **params**: pair of name/value to specify query parameter (optional)
|
34
33
|
- **method**: http method, get is used by default (optional)
|
35
34
|
- **user_agent**: the usrr agent to specify request header (optional)
|
36
|
-
- **charset**:
|
35
|
+
- **charset**: charset to specify request header (optional, utf-8 is used by default)
|
36
|
+
- **basic_auth**: username/password for basic authentication (optional)
|
37
37
|
- **open_timeout**: timeout msec to open connection (optional, 2000 is used by default)
|
38
38
|
- **read_timeout**: timeout msec to read content via http (optional, 10000 is used by default)
|
39
39
|
- **max_retries**: max number of retry request if failed (optional, 5 is used by default)
|
@@ -42,15 +42,39 @@ in:
|
|
42
42
|
|
43
43
|
### Brace expansion style in params
|
44
44
|
|
45
|
-
In *params* section, you can specify also multilple
|
45
|
+
In *params* section, you can specify also multilple requests by using **values** or **brace expansion style** with set **expand** true.
|
46
|
+
|
47
|
+
The configuration using **values** is as below:
|
46
48
|
|
47
49
|
```yaml
|
48
|
-
params
|
50
|
+
params:
|
51
|
+
- {name: id, values: [5, 4, 3, 2, 1]}
|
52
|
+
- {name: name, values: ["John", "Paul", "George", "Ringo"], expand: true}
|
53
|
+
```
|
54
|
+
|
55
|
+
Also You can rewrite this configuration by using **brace expansion style** like as follows:
|
56
|
+
|
57
|
+
|
58
|
+
```yaml
|
59
|
+
params:
|
49
60
|
- {name: id, value "{5,4,3,2,1}", expand: true}
|
50
61
|
- {name: name, value "{John,Paul,George,Ringo}", expand: true}
|
51
62
|
```
|
52
63
|
|
53
|
-
|
64
|
+
Then all patterns of query will be called in a defferent request.
|
65
|
+
|
66
|
+
By default, **expand** is false. In this case, all values will be multiple params in one request.
|
67
|
+
|
68
|
+
|
69
|
+
### Use basic authentication
|
70
|
+
|
71
|
+
You can specify username/password for basic authentication.
|
72
|
+
|
73
|
+
```yaml
|
74
|
+
basic_auth:
|
75
|
+
- user: MyUser
|
76
|
+
- password: MyPassword
|
77
|
+
```
|
54
78
|
|
55
79
|
|
56
80
|
## Example
|
@@ -103,7 +127,6 @@ in:
|
|
103
127
|
```
|
104
128
|
|
105
129
|
## TODO
|
106
|
-
- BasicAuth
|
107
130
|
- HTTP-proxy
|
108
131
|
- Custom hedaers
|
109
132
|
- Guess
|
data/build.gradle
CHANGED
data/example/json-example.yml
CHANGED
@@ -0,0 +1,39 @@
|
|
1
|
+
package org.embulk.input;
|
2
|
+
|
3
|
+
import com.fasterxml.jackson.annotation.JsonCreator;
|
4
|
+
import com.fasterxml.jackson.annotation.JsonProperty;
|
5
|
+
import com.google.common.base.Objects;
|
6
|
+
|
7
|
+
public class BasicAuthConfig {
|
8
|
+
|
9
|
+
private final String user;
|
10
|
+
private final String password;
|
11
|
+
|
12
|
+
@JsonCreator
|
13
|
+
public BasicAuthConfig(
|
14
|
+
@JsonProperty("user") String user,
|
15
|
+
@JsonProperty("password") String password) {
|
16
|
+
this.user = user;
|
17
|
+
this.password = password;
|
18
|
+
}
|
19
|
+
|
20
|
+
@JsonProperty("user")
|
21
|
+
public String getUser() {
|
22
|
+
return user;
|
23
|
+
}
|
24
|
+
|
25
|
+
@JsonProperty("password")
|
26
|
+
public String getPassword() {
|
27
|
+
return password;
|
28
|
+
}
|
29
|
+
|
30
|
+
@Override
|
31
|
+
public int hashCode() {
|
32
|
+
return Objects.hashCode(user, password);
|
33
|
+
}
|
34
|
+
|
35
|
+
@Override
|
36
|
+
public String toString() {
|
37
|
+
return String.format("BasicAuthConfig[%s, %s]", getUser(), getPassword());
|
38
|
+
}
|
39
|
+
}
|
@@ -2,13 +2,14 @@ package org.embulk.input;
|
|
2
2
|
|
3
3
|
import com.google.common.base.Optional;
|
4
4
|
import com.google.common.base.Throwables;
|
5
|
+
import com.google.common.collect.Lists;
|
5
6
|
import org.apache.http.Header;
|
6
7
|
import org.apache.http.HttpException;
|
7
8
|
import org.apache.http.HttpResponse;
|
8
|
-
import org.apache.http.conn.HttpClientConnectionManager;
|
9
|
-
import org.apache.http.impl.conn.PoolingHttpClientConnectionManager;
|
10
|
-
import org.apache.http.util.EntityUtils;
|
11
9
|
import org.apache.http.NameValuePair;
|
10
|
+
import org.apache.http.auth.AuthScope;
|
11
|
+
import org.apache.http.auth.UsernamePasswordCredentials;
|
12
|
+
import org.apache.http.client.CredentialsProvider;
|
12
13
|
import org.apache.http.client.HttpClient;
|
13
14
|
import org.apache.http.client.HttpRequestRetryHandler;
|
14
15
|
import org.apache.http.client.config.RequestConfig;
|
@@ -17,6 +18,7 @@ import org.apache.http.client.methods.HttpGet;
|
|
17
18
|
import org.apache.http.client.methods.HttpPost;
|
18
19
|
import org.apache.http.client.methods.HttpRequestBase;
|
19
20
|
import org.apache.http.client.utils.URIBuilder;
|
21
|
+
import org.apache.http.impl.client.BasicCredentialsProvider;
|
20
22
|
import org.apache.http.impl.client.HttpClientBuilder;
|
21
23
|
import org.apache.http.message.BasicHeader;
|
22
24
|
import org.apache.http.message.BasicNameValuePair;
|
@@ -31,7 +33,6 @@ import org.slf4j.Logger;
|
|
31
33
|
|
32
34
|
import java.io.IOException;
|
33
35
|
import java.io.InputStream;
|
34
|
-
import java.io.ByteArrayInputStream;
|
35
36
|
import java.io.UnsupportedEncodingException;
|
36
37
|
import java.net.URISyntaxException;
|
37
38
|
import java.util.ArrayList;
|
@@ -76,19 +77,26 @@ public class HttpInputPlugin implements FileInputPlugin {
|
|
76
77
|
@Config("sleep_before_request")
|
77
78
|
@ConfigDefault("0")
|
78
79
|
public int getSleepBeforeRequest();
|
80
|
+
|
79
81
|
public void setSleepBeforeRequest(int sleepBeforeRequest);
|
80
82
|
|
81
83
|
@Config("params")
|
82
84
|
@ConfigDefault("null")
|
83
85
|
public Optional<ParamsConfig> getParams();
|
84
86
|
|
87
|
+
@Config("basic_auth")
|
88
|
+
@ConfigDefault("null")
|
89
|
+
public Optional<BasicAuthConfig> getBasicAuth();
|
90
|
+
|
85
91
|
@ConfigInject
|
86
92
|
public BufferAllocator getBufferAllocator();
|
87
93
|
|
88
|
-
public List<
|
89
|
-
|
94
|
+
public List<List<QueryConfig.Query>> getQueries();
|
95
|
+
|
96
|
+
public void setQueries(List<List<QueryConfig.Query>> queries);
|
90
97
|
|
91
98
|
public HttpMethod getHttpMethod();
|
99
|
+
|
92
100
|
public void setHttpMethod(HttpMethod httpMethod);
|
93
101
|
}
|
94
102
|
|
@@ -103,11 +111,11 @@ public class HttpInputPlugin implements FileInputPlugin {
|
|
103
111
|
|
104
112
|
int numOfThreads = 1;
|
105
113
|
if (task.getParams().isPresent()) {
|
106
|
-
List<
|
114
|
+
List<List<QueryConfig.Query>> expandedQueries = task.getParams().get().expandQueries();
|
107
115
|
task.setQueries(expandedQueries);
|
108
116
|
numOfThreads = expandedQueries.size();
|
109
117
|
} else {
|
110
|
-
task.setQueries(
|
118
|
+
task.setQueries(Lists.<List<QueryConfig.Query>>newArrayList());
|
111
119
|
}
|
112
120
|
|
113
121
|
if (numOfThreads == 1) {
|
@@ -164,6 +172,11 @@ public class HttpInputPlugin implements FileInputPlugin {
|
|
164
172
|
builder.setRetryHandler(retryHandler);
|
165
173
|
}
|
166
174
|
|
175
|
+
if (task.getBasicAuth().isPresent()) {
|
176
|
+
builder.setDefaultCredentialsProvider(makeCredentialsProvider(task.getBasicAuth().get(),
|
177
|
+
request));
|
178
|
+
}
|
179
|
+
|
167
180
|
HttpClient client = builder.build();
|
168
181
|
|
169
182
|
if (task.getSleepBeforeRequest() > 0) {
|
@@ -190,26 +203,39 @@ public class HttpInputPlugin implements FileInputPlugin {
|
|
190
203
|
}
|
191
204
|
}
|
192
205
|
|
206
|
+
private CredentialsProvider makeCredentialsProvider(BasicAuthConfig config, HttpRequestBase scopeRequest) {
|
207
|
+
final CredentialsProvider credentialsProvider = new BasicCredentialsProvider();
|
208
|
+
final AuthScope authScope = new AuthScope(scopeRequest.getURI().getHost(),
|
209
|
+
scopeRequest.getURI().getPort());
|
210
|
+
credentialsProvider.setCredentials(authScope,
|
211
|
+
new UsernamePasswordCredentials(config.getUser(), config.getPassword()));
|
212
|
+
return credentialsProvider;
|
213
|
+
}
|
214
|
+
|
193
215
|
private HttpRequestBase makeRequest(PluginTask task, int taskIndex)
|
194
216
|
throws URISyntaxException, UnsupportedEncodingException {
|
195
|
-
final
|
217
|
+
final List<QueryConfig.Query> queries = (task.getQueries().isEmpty()) ?
|
196
218
|
null : task.getQueries().get(taskIndex);
|
197
219
|
if (task.getHttpMethod() == HttpMethod.GET) {
|
198
220
|
HttpGet request = new HttpGet(task.getUrl());
|
199
|
-
if (
|
221
|
+
if (queries != null) {
|
200
222
|
URIBuilder builder = new URIBuilder(request.getURI());
|
201
|
-
for (QueryConfig
|
202
|
-
|
223
|
+
for (QueryConfig.Query q : queries) {
|
224
|
+
for (String v : q.getValues()) {
|
225
|
+
builder.addParameter(q.getName(), v);
|
226
|
+
}
|
203
227
|
}
|
204
228
|
request.setURI(builder.build());
|
205
229
|
}
|
206
230
|
return request;
|
207
231
|
} else if (task.getHttpMethod() == HttpMethod.POST) {
|
208
232
|
HttpPost request = new HttpPost(task.getUrl());
|
209
|
-
if (
|
233
|
+
if (queries != null) {
|
210
234
|
List<NameValuePair> pairs = new ArrayList<>();
|
211
|
-
for (QueryConfig
|
212
|
-
|
235
|
+
for (QueryConfig.Query q : queries) {
|
236
|
+
for (String v : q.getValues()) {
|
237
|
+
pairs.add(new BasicNameValuePair(q.getName(), v));
|
238
|
+
}
|
213
239
|
}
|
214
240
|
request.setEntity(new UrlEncodedFormEntity(pairs));
|
215
241
|
}
|
@@ -21,26 +21,26 @@ public class ParamsConfig {
|
|
21
21
|
return queries;
|
22
22
|
}
|
23
23
|
|
24
|
-
public List<
|
25
|
-
List<List<QueryConfig>> base = new ArrayList<>(queries.size());
|
24
|
+
public List<List<QueryConfig.Query>> expandQueries() {
|
25
|
+
List<List<QueryConfig.Query>> base = new ArrayList<>(queries.size());
|
26
26
|
for (QueryConfig p : queries) {
|
27
27
|
base.add(p.expand());
|
28
28
|
}
|
29
29
|
|
30
30
|
int productSize = 1;
|
31
31
|
int baseSize = base.size();
|
32
|
-
for (int i = 0; i < baseSize; productSize *= base.get(i).size(), i++);
|
32
|
+
for (int i = 0; i < baseSize; productSize *= base.get(i).size(), i++) ;
|
33
33
|
|
34
|
-
List<
|
35
|
-
for(int i = 0; i < productSize; i++) {
|
34
|
+
List<List<QueryConfig.Query>> expands = new ArrayList<>(productSize);
|
35
|
+
for (int i = 0; i < productSize; i++) {
|
36
36
|
int j = 1;
|
37
|
-
List<QueryConfig> query = new ArrayList<>();
|
38
|
-
for(List<QueryConfig> list : base) {
|
39
|
-
QueryConfig pc = list.get((i / j) % list.size());
|
37
|
+
List<QueryConfig.Query> query = new ArrayList<>();
|
38
|
+
for (List<QueryConfig.Query> list : base) {
|
39
|
+
QueryConfig.Query pc = list.get((i / j) % list.size());
|
40
40
|
query.add(pc);
|
41
41
|
j *= list.size();
|
42
42
|
}
|
43
|
-
expands.add(
|
43
|
+
expands.add(query);
|
44
44
|
}
|
45
45
|
|
46
46
|
return expands;
|
@@ -1,8 +1,9 @@
|
|
1
1
|
package org.embulk.input;
|
2
2
|
|
3
|
-
import com.google.common.base.Objects;
|
4
3
|
import com.fasterxml.jackson.annotation.JsonCreator;
|
5
4
|
import com.fasterxml.jackson.annotation.JsonProperty;
|
5
|
+
import com.google.common.base.Objects;
|
6
|
+
import com.google.common.base.Optional;
|
6
7
|
|
7
8
|
import java.util.ArrayList;
|
8
9
|
import java.util.List;
|
@@ -10,30 +11,48 @@ import java.util.List;
|
|
10
11
|
public class QueryConfig {
|
11
12
|
|
12
13
|
private final String name;
|
13
|
-
private final String value;
|
14
|
+
private final Optional<String> value;
|
15
|
+
private final Optional<List<String>> values;
|
14
16
|
private final boolean expand;
|
15
17
|
|
16
18
|
@JsonCreator
|
17
19
|
public QueryConfig(
|
18
20
|
@JsonProperty("name") String name,
|
19
|
-
@JsonProperty("value") String value,
|
21
|
+
@JsonProperty("value") Optional<String> value,
|
22
|
+
@JsonProperty("values") Optional<List<String>> values,
|
20
23
|
@JsonProperty("expand") boolean expand) {
|
21
24
|
this.name = name;
|
22
25
|
this.value = value;
|
26
|
+
this.values = values;
|
23
27
|
this.expand = expand;
|
24
28
|
}
|
25
29
|
|
26
|
-
public List<
|
27
|
-
List<
|
28
|
-
if (
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
30
|
+
public List<Query> expand() {
|
31
|
+
List<Query> dest;
|
32
|
+
if (value.isPresent()) {
|
33
|
+
if (expand) {
|
34
|
+
List<String> expanded = BraceExpansion.expand(value.get());
|
35
|
+
dest = new ArrayList<>(expanded.size());
|
36
|
+
for (String s : expanded) {
|
37
|
+
dest.add(new Query(name, s));
|
38
|
+
}
|
39
|
+
} else {
|
40
|
+
dest = new ArrayList<>(1);
|
41
|
+
dest.add(new Query(name, value.get()));
|
36
42
|
}
|
43
|
+
} else if (values.isPresent()) {
|
44
|
+
if (expand) {
|
45
|
+
dest = new ArrayList<>(values.get().size());
|
46
|
+
for (String s : values.get()) {
|
47
|
+
dest.add(new Query(name, s));
|
48
|
+
}
|
49
|
+
} else {
|
50
|
+
dest = new ArrayList<>(1);
|
51
|
+
final String[] valueArr = values.get().toArray(new String[values.get().size()]);
|
52
|
+
dest.add(new Query(name, valueArr));
|
53
|
+
}
|
54
|
+
} else {
|
55
|
+
throw new IllegalArgumentException("value or values must be specified to 'params'");
|
37
56
|
}
|
38
57
|
return dest;
|
39
58
|
}
|
@@ -44,7 +63,7 @@ public class QueryConfig {
|
|
44
63
|
}
|
45
64
|
|
46
65
|
@JsonProperty("value")
|
47
|
-
public String getValue() {
|
66
|
+
public Optional<String> getValue() {
|
48
67
|
return value;
|
49
68
|
}
|
50
69
|
|
@@ -78,6 +97,26 @@ public class QueryConfig {
|
|
78
97
|
getName(), getValue(), isExpand());
|
79
98
|
}
|
80
99
|
|
100
|
+
public static class Query {
|
101
|
+
private final String name;
|
102
|
+
private final String[] values;
|
103
|
+
|
104
|
+
public Query(
|
105
|
+
@JsonProperty("name") String name,
|
106
|
+
@JsonProperty("values") String... values) {
|
107
|
+
this.name = name;
|
108
|
+
this.values = values;
|
109
|
+
}
|
110
|
+
|
111
|
+
public String getName() {
|
112
|
+
return name;
|
113
|
+
}
|
114
|
+
|
115
|
+
public String[] getValues() {
|
116
|
+
return values;
|
117
|
+
}
|
118
|
+
}
|
119
|
+
|
81
120
|
private static class BraceExpansion {
|
82
121
|
|
83
122
|
public static List<String> expand(String s) {
|
@@ -112,7 +151,9 @@ public class QueryConfig {
|
|
112
151
|
if (suffix.length() > 0) {
|
113
152
|
expandRecursive(prefix + s, suffix, "", dest);
|
114
153
|
} else {
|
115
|
-
|
154
|
+
final String out = String.format("%s%s%s", prefix, s, suffix).
|
155
|
+
replaceAll("[\\\\]{2}", "\\").replaceAll("[\\\\]([,}{])", "$1");
|
156
|
+
dest.add(out);
|
116
157
|
}
|
117
158
|
} else {
|
118
159
|
for (String m : sb.substring(i1 + 1, i2).split("\u0000", -1)) {
|
@@ -31,14 +31,14 @@ public class RetryHandler extends DefaultHttpRequestRetryHandler
|
|
31
31
|
public boolean retryRequest(final IOException exception,
|
32
32
|
final int executionCount, final HttpContext context)
|
33
33
|
{
|
34
|
-
final boolean
|
35
|
-
if (
|
34
|
+
final boolean isRetriable = super.retryRequest(exception, executionCount, context);
|
35
|
+
if (isRetriable) {
|
36
36
|
try {
|
37
37
|
logger.info(String.format("Sleep %d msec before retry", interval));
|
38
38
|
Thread.sleep(interval);
|
39
39
|
} catch (InterruptedException e) {}
|
40
40
|
}
|
41
|
-
return
|
41
|
+
return isRetriable;
|
42
42
|
}
|
43
43
|
|
44
44
|
}
|
@@ -0,0 +1,101 @@
|
|
1
|
+
package org.embulk.input;
|
2
|
+
|
3
|
+
import com.google.common.base.Optional;
|
4
|
+
import com.google.common.collect.Lists;
|
5
|
+
import org.junit.Test;
|
6
|
+
|
7
|
+
import java.util.List;
|
8
|
+
|
9
|
+
import static org.junit.Assert.assertEquals;
|
10
|
+
|
11
|
+
public class TestParamsConfig {
|
12
|
+
|
13
|
+
@Test
|
14
|
+
public void testUnexpandQueriesSinglePair() throws Exception {
|
15
|
+
Optional<List<String>> nullValues = Optional.absent();
|
16
|
+
QueryConfig q1 = new QueryConfig("test1", Optional.of("awasome1"), nullValues, false);
|
17
|
+
QueryConfig q2 = new QueryConfig("test2", Optional.of("awasome2"), nullValues, false);
|
18
|
+
ParamsConfig paramsConfig = new ParamsConfig(Lists.newArrayList(q1, q2));
|
19
|
+
List<List<QueryConfig.Query>> dest = paramsConfig.expandQueries();
|
20
|
+
assertEquals(dest.size(), 1);
|
21
|
+
assertEquals(dest.get(0).size(), 2);
|
22
|
+
assertEquals(dest.get(0).get(0).getName(), "test1");
|
23
|
+
assertEquals(dest.get(0).get(0).getValues()[0], "awasome1");
|
24
|
+
assertEquals(dest.get(0).get(1).getName(), "test2");
|
25
|
+
assertEquals(dest.get(0).get(1).getValues()[0], "awasome2");
|
26
|
+
}
|
27
|
+
|
28
|
+
@Test
|
29
|
+
public void testUnexpandQueriesExpandPair() throws Exception {
|
30
|
+
Optional<String> nullValue = Optional.absent();
|
31
|
+
List<String> values1 = Lists.newArrayList("a", "b");
|
32
|
+
List<String> values2 = Lists.newArrayList("c", "d");
|
33
|
+
|
34
|
+
QueryConfig q1 = new QueryConfig("test1", nullValue, Optional.of(values1), false);
|
35
|
+
QueryConfig q2 = new QueryConfig("test2", nullValue, Optional.of(values2), false);
|
36
|
+
|
37
|
+
ParamsConfig paramsConfig = new ParamsConfig(Lists.newArrayList(q1, q2));
|
38
|
+
List<List<QueryConfig.Query>> dest = paramsConfig.expandQueries();
|
39
|
+
assertEquals(dest.size(), 1);
|
40
|
+
assertEquals(dest.get(0).size(), 2);
|
41
|
+
assertEquals(dest.get(0).get(0).getName(), "test1");
|
42
|
+
assertEquals(dest.get(0).get(0).getValues()[0], "a");
|
43
|
+
assertEquals(dest.get(0).get(0).getValues()[1], "b");
|
44
|
+
assertEquals(dest.get(0).get(1).getName(), "test2");
|
45
|
+
assertEquals(dest.get(0).get(1).getValues()[0], "c");
|
46
|
+
assertEquals(dest.get(0).get(1).getValues()[1], "d");
|
47
|
+
}
|
48
|
+
|
49
|
+
@Test
|
50
|
+
public void testExpandQueriesSinglePair() throws Exception {
|
51
|
+
Optional<List<String>> nullValues = Optional.absent();
|
52
|
+
QueryConfig q1 = new QueryConfig("test1", Optional.of("awasome1"), nullValues, true);
|
53
|
+
QueryConfig q2 = new QueryConfig("test2", Optional.of("awasome2"), nullValues, true);
|
54
|
+
ParamsConfig paramsConfig = new ParamsConfig(Lists.newArrayList(q1, q2));
|
55
|
+
List<List<QueryConfig.Query>> dest = paramsConfig.expandQueries();
|
56
|
+
assertEquals(dest.size(), 1);
|
57
|
+
assertEquals(dest.get(0).size(), 2);
|
58
|
+
assertEquals(dest.get(0).get(0).getName(), "test1");
|
59
|
+
assertEquals(dest.get(0).get(0).getValues()[0], "awasome1");
|
60
|
+
assertEquals(dest.get(0).get(1).getName(), "test2");
|
61
|
+
assertEquals(dest.get(0).get(1).getValues()[0], "awasome2");
|
62
|
+
}
|
63
|
+
|
64
|
+
@Test
|
65
|
+
public void testExpandQueriesExpandPair() throws Exception {
|
66
|
+
Optional<String> nullValue = Optional.absent();
|
67
|
+
List<String> values1 = Lists.newArrayList("a", "b");
|
68
|
+
List<String> values2 = Lists.newArrayList("c", "d");
|
69
|
+
|
70
|
+
QueryConfig q1 = new QueryConfig("test1", nullValue, Optional.of(values1), true);
|
71
|
+
QueryConfig q2 = new QueryConfig("test2", nullValue, Optional.of(values2), true);
|
72
|
+
|
73
|
+
ParamsConfig paramsConfig = new ParamsConfig(Lists.newArrayList(q1, q2));
|
74
|
+
List<List<QueryConfig.Query>> dest = paramsConfig.expandQueries();
|
75
|
+
assertEquals(dest.size(), 4);
|
76
|
+
|
77
|
+
assertEquals(dest.get(0).size(), 2);
|
78
|
+
assertEquals(dest.get(0).get(0).getName(), "test1");
|
79
|
+
assertEquals(dest.get(0).get(0).getValues()[0], "a");
|
80
|
+
assertEquals(dest.get(0).get(1).getName(), "test2");
|
81
|
+
assertEquals(dest.get(0).get(1).getValues()[0], "c");
|
82
|
+
|
83
|
+
assertEquals(dest.get(1).size(), 2);
|
84
|
+
assertEquals(dest.get(1).get(0).getName(), "test1");
|
85
|
+
assertEquals(dest.get(1).get(0).getValues()[0], "b");
|
86
|
+
assertEquals(dest.get(1).get(1).getName(), "test2");
|
87
|
+
assertEquals(dest.get(1).get(1).getValues()[0], "c");
|
88
|
+
|
89
|
+
assertEquals(dest.get(2).size(), 2);
|
90
|
+
assertEquals(dest.get(2).get(0).getName(), "test1");
|
91
|
+
assertEquals(dest.get(2).get(0).getValues()[0], "a");
|
92
|
+
assertEquals(dest.get(2).get(1).getName(), "test2");
|
93
|
+
assertEquals(dest.get(2).get(1).getValues()[0], "d");
|
94
|
+
|
95
|
+
assertEquals(dest.get(3).size(), 2);
|
96
|
+
assertEquals(dest.get(3).get(0).getName(), "test1");
|
97
|
+
assertEquals(dest.get(3).get(0).getValues()[0], "b");
|
98
|
+
assertEquals(dest.get(3).get(1).getName(), "test2");
|
99
|
+
assertEquals(dest.get(3).get(1).getValues()[0], "d");
|
100
|
+
}
|
101
|
+
}
|
@@ -0,0 +1,125 @@
|
|
1
|
+
package org.embulk.input;
|
2
|
+
|
3
|
+
import com.google.common.base.Optional;
|
4
|
+
import com.google.common.collect.Lists;
|
5
|
+
import org.junit.Test;
|
6
|
+
|
7
|
+
import java.util.List;
|
8
|
+
|
9
|
+
import static org.junit.Assert.assertEquals;
|
10
|
+
|
11
|
+
public class TestQueryConfig {
|
12
|
+
|
13
|
+
@Test
|
14
|
+
public void testUnexpandSingleValue() throws Exception {
|
15
|
+
Optional<List<String>> nullValues = Optional.absent();
|
16
|
+
QueryConfig config = new QueryConfig("test", Optional.of("awesome"), nullValues, false);
|
17
|
+
List<QueryConfig.Query> dest = config.expand();
|
18
|
+
assertEquals(dest.size(), 1);
|
19
|
+
assertEquals(dest.get(0).getName(), "test");
|
20
|
+
assertEquals(dest.get(0).getValues().length, 1);
|
21
|
+
assertEquals(dest.get(0).getValues()[0], "awesome");
|
22
|
+
}
|
23
|
+
|
24
|
+
@Test
|
25
|
+
public void testUnexpandMultiValue() throws Exception {
|
26
|
+
Optional<String> nullValue = Optional.absent();
|
27
|
+
List<String> values = Lists.newArrayList("a", "b", "c");
|
28
|
+
QueryConfig config = new QueryConfig("test", nullValue, Optional.of(values), false);
|
29
|
+
List<QueryConfig.Query> dest = config.expand();
|
30
|
+
assertEquals(dest.size(), 1);
|
31
|
+
assertEquals(dest.get(0).getName(), "test");
|
32
|
+
|
33
|
+
assertEquals(dest.get(0).getValues().length, 3);
|
34
|
+
assertEquals(dest.get(0).getValues()[0], "a");
|
35
|
+
assertEquals(dest.get(0).getValues()[1], "b");
|
36
|
+
assertEquals(dest.get(0).getValues()[2], "c");
|
37
|
+
}
|
38
|
+
|
39
|
+
@Test
|
40
|
+
public void testExpandSingleValue() throws Exception {
|
41
|
+
Optional<List<String>> nullValues = Optional.absent();
|
42
|
+
QueryConfig config = new QueryConfig("test", Optional.of("awesome"), nullValues, true);
|
43
|
+
List<QueryConfig.Query> dest = config.expand();
|
44
|
+
assertEquals(dest.size(), 1);
|
45
|
+
assertEquals(dest.get(0).getName(), "test");
|
46
|
+
assertEquals(dest.get(0).getValues()[0], "awesome");
|
47
|
+
}
|
48
|
+
|
49
|
+
@Test
|
50
|
+
public void testExpandMultiValue() throws Exception {
|
51
|
+
Optional<String> nullValue = Optional.absent();
|
52
|
+
List<String> values = Lists.newArrayList("a", "b", "c");
|
53
|
+
QueryConfig config = new QueryConfig("test", nullValue, Optional.of(values), true);
|
54
|
+
List<QueryConfig.Query> dest = config.expand();
|
55
|
+
assertEquals(dest.size(), 3);
|
56
|
+
assertEquals(dest.get(0).getName(), "test");
|
57
|
+
assertEquals(dest.get(0).getValues().length, 1);
|
58
|
+
assertEquals(dest.get(0).getValues()[0], "a");
|
59
|
+
|
60
|
+
assertEquals(dest.get(1).getValues().length, 1);
|
61
|
+
assertEquals(dest.get(1).getName(), "test");
|
62
|
+
assertEquals(dest.get(1).getValues()[0], "b");
|
63
|
+
|
64
|
+
assertEquals(dest.get(2).getValues().length, 1);
|
65
|
+
assertEquals(dest.get(2).getName(), "test");
|
66
|
+
assertEquals(dest.get(2).getValues()[0], "c");
|
67
|
+
}
|
68
|
+
|
69
|
+
@Test(expected = IllegalArgumentException.class)
|
70
|
+
public void testExpandRaisesExceptionWhenBothValuesAreNull() throws Exception {
|
71
|
+
Optional<List<String>> nullValues = Optional.absent();
|
72
|
+
Optional<String> nullValue = Optional.absent();
|
73
|
+
QueryConfig config = new QueryConfig("test", nullValue, nullValues, false);
|
74
|
+
config.expand();
|
75
|
+
}
|
76
|
+
|
77
|
+
@Test
|
78
|
+
public void testUnExpandBrace() throws Exception {
|
79
|
+
Optional<List<String>> nullValues = Optional.absent();
|
80
|
+
QueryConfig config = new QueryConfig("test", Optional.of("{awesome1,awesome2,awesome3}"), nullValues, false);
|
81
|
+
List<QueryConfig.Query> dest = config.expand();
|
82
|
+
assertEquals(dest.size(), 1);
|
83
|
+
assertEquals(dest.get(0).getName(), "test");
|
84
|
+
assertEquals(dest.get(0).getValues().length, 1);
|
85
|
+
assertEquals(dest.get(0).getValues()[0], "{awesome1,awesome2,awesome3}");
|
86
|
+
}
|
87
|
+
|
88
|
+
@Test
|
89
|
+
public void testExpandBrace() throws Exception {
|
90
|
+
Optional<List<String>> nullValues = Optional.absent();
|
91
|
+
QueryConfig config = new QueryConfig("test", Optional.of("{awesome1,awesome2,awesome3}"), nullValues, true);
|
92
|
+
List<QueryConfig.Query> dest = config.expand();
|
93
|
+
assertEquals(dest.size(), 3);
|
94
|
+
assertEquals(dest.get(0).getName(), "test");
|
95
|
+
assertEquals(dest.get(0).getValues().length, 1);
|
96
|
+
assertEquals(dest.get(0).getValues()[0], "awesome1");
|
97
|
+
assertEquals(dest.get(1).getName(), "test");
|
98
|
+
|
99
|
+
assertEquals(dest.get(1).getValues().length, 1);
|
100
|
+
assertEquals(dest.get(1).getValues()[0], "awesome2");
|
101
|
+
|
102
|
+
assertEquals(dest.get(2).getValues().length, 1);
|
103
|
+
assertEquals(dest.get(2).getName(), "test");
|
104
|
+
assertEquals(dest.get(2).getValues()[0], "awesome3");
|
105
|
+
}
|
106
|
+
|
107
|
+
@Test
|
108
|
+
public void testExpandEscapedBrace() throws Exception {
|
109
|
+
Optional<List<String>> nullValues = Optional.absent();
|
110
|
+
QueryConfig config = new QueryConfig("test", Optional.of("{awe\\,some1,awes\\{ome2,awes\\}ome3}"), nullValues, true);
|
111
|
+
List<QueryConfig.Query> dest = config.expand();
|
112
|
+
assertEquals(dest.get(0).getName(), "test");
|
113
|
+
assertEquals(dest.get(0).getValues().length, 1);
|
114
|
+
assertEquals(dest.get(0).getValues()[0], "awe,some1");
|
115
|
+
|
116
|
+
assertEquals(dest.get(1).getName(), "test");
|
117
|
+
assertEquals(dest.get(1).getValues().length, 1);
|
118
|
+
assertEquals(dest.get(1).getValues()[0], "awes{ome2");
|
119
|
+
|
120
|
+
assertEquals(dest.get(2).getName(), "test");
|
121
|
+
assertEquals(dest.get(2).getValues().length, 1);
|
122
|
+
assertEquals(dest.get(2).getValues()[0], "awes}ome3");
|
123
|
+
}
|
124
|
+
|
125
|
+
}
|
metadata
CHANGED
@@ -1,43 +1,43 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: embulk-input-http
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.6
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Takuma kanari
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-
|
11
|
+
date: 2015-07-13 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
|
-
name: bundler
|
15
|
-
version_requirements: !ruby/object:Gem::Requirement
|
16
|
-
requirements:
|
17
|
-
- - ~>
|
18
|
-
- !ruby/object:Gem::Version
|
19
|
-
version: '1.0'
|
20
14
|
requirement: !ruby/object:Gem::Requirement
|
21
15
|
requirements:
|
22
16
|
- - ~>
|
23
17
|
- !ruby/object:Gem::Version
|
24
18
|
version: '1.0'
|
19
|
+
name: bundler
|
25
20
|
prerelease: false
|
26
21
|
type: :development
|
27
|
-
- !ruby/object:Gem::Dependency
|
28
|
-
name: rake
|
29
22
|
version_requirements: !ruby/object:Gem::Requirement
|
30
23
|
requirements:
|
31
|
-
- -
|
24
|
+
- - ~>
|
32
25
|
- !ruby/object:Gem::Version
|
33
|
-
version: '
|
26
|
+
version: '1.0'
|
27
|
+
- !ruby/object:Gem::Dependency
|
34
28
|
requirement: !ruby/object:Gem::Requirement
|
35
29
|
requirements:
|
36
30
|
- - '>='
|
37
31
|
- !ruby/object:Gem::Version
|
38
32
|
version: '10.0'
|
33
|
+
name: rake
|
39
34
|
prerelease: false
|
40
35
|
type: :development
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - '>='
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '10.0'
|
41
41
|
description: Fetch data via http
|
42
42
|
email:
|
43
43
|
- chemtrails.t@gmail.com
|
@@ -55,16 +55,19 @@ files:
|
|
55
55
|
- gradlew
|
56
56
|
- gradlew.bat
|
57
57
|
- lib/embulk/input/http.rb
|
58
|
+
- src/main/java/org/embulk/input/BasicAuthConfig.java
|
58
59
|
- src/main/java/org/embulk/input/HttpInputPlugin.java
|
59
60
|
- src/main/java/org/embulk/input/ParamsConfig.java
|
60
61
|
- src/main/java/org/embulk/input/QueryConfig.java
|
61
62
|
- src/main/java/org/embulk/input/RetryHandler.java
|
62
63
|
- src/test/java/org/embulk/input/TestHttpInputPlugin.java
|
63
|
-
-
|
64
|
+
- src/test/java/org/embulk/input/TestParamsConfig.java
|
65
|
+
- src/test/java/org/embulk/input/TestQueryConfig.java
|
64
66
|
- classpath/httpclient-4.4.jar
|
65
67
|
- classpath/commons-logging-1.2.jar
|
66
68
|
- classpath/httpcore-4.4.jar
|
67
69
|
- classpath/commons-codec-1.9.jar
|
70
|
+
- classpath/embulk-input-http-0.0.6.jar
|
68
71
|
homepage: https://github.com/takumakanari/embulk-input-http
|
69
72
|
licenses:
|
70
73
|
- MIT
|