embulk-input-jira 0.2.8 → 0.2.9
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.travis.yml +2 -0
- data/CHANGELOG.md +4 -0
- data/README.md +1 -1
- data/build.gradle +5 -5
- data/src/main/java/org/embulk/input/jira/JiraInputPlugin.java +1 -1
- data/src/main/java/org/embulk/input/jira/util/JiraUtil.java +40 -40
- data/src/test/java/org/embulk/input/jira/JiraPluginTestRuntime.java +12 -13
- metadata +3 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 871da4fb82630f92834e2b00784c8e7ccd8b06b6
|
4
|
+
data.tar.gz: 96b6ced1eef2d43a1c258b1d985da224506e2b23
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: c9aab03ff69b21824422a998039c2f0d17eae69d85b59c3aed382acbeb6b940f2b1152b54eb3218c7f252d1360ca2f2cbd92288d8b412fe1c724999ea3a438a8
|
7
|
+
data.tar.gz: e7fd609dc219332b64a9c0a67ffb529b0d65b32b439cce67c506ba986ac2b9cfa26c069e84634a146a9b8afbabb58d962ad2f9ea5b1ac7ddbee70be34a653183
|
data/.travis.yml
CHANGED
@@ -2,6 +2,8 @@ language: java
|
|
2
2
|
|
3
3
|
jdk: oraclejdk8
|
4
4
|
|
5
|
+
dist: trusty
|
6
|
+
|
5
7
|
env:
|
6
8
|
global:
|
7
9
|
secure: "NCkU3f60cn5Gmzq+NwDmKdQSq+ApF/rPqSHPirk1+ZPW9n+H9912meUuJr9qyn03MPdc6wAQinsl3skdPNh1Qz02TI/WZGMiCQTLh3nKIMzaaxx6I+OZ1TV7A4MoJMQ7oYQdXdbvRYXpOVRnfVDxpUC+BDk2T8xmjfm9cht+PGTzM6RxpmSL842hiudkcyxHxgEf66EGpi6h2G2PqYNfQrksqiVMWlLiTO5a2ee+iw9qTMhgKrhEKLCb+dFB56gtKIOpd3MxieLwf3PDcsjM+TSaWo6Bp+mjdA3zGJNz5wbWRVSdrIvKvxmf3eRqAGssBhBDO/LUN3LnI+/T/7J9XZZd7WXNudo/t6HQXhJkUIvOucCxSg8/uRsxrMAmF2zkJOnYGSvN3HNqdzyz86TK4/Xckl+gX51b0uYncHfZYSojn4py1RWPYpX/L2RHbzMn1MJ7B3/VZ21vY97aHhDgNyyAMxPnTAuR1IZicEgA8y8AmZkkK9tWq5wvAOKI91V+W8iBEaO2dZIib+KdJSUUj/Q3TM3i4wX9O/AU7tknsnCApvxQeveELJ4SxfFd/Z2imqmQWM0wIgp1u7Vjguf8kSaxcuQHonZNdwvvYOkbYxHvUqltzlmE1qFC/kQe6o9fS3NuiugHCYVeFs+LXVVW+nl0pWztFYMicUmQq7T781w="
|
data/CHANGELOG.md
CHANGED
@@ -1,3 +1,7 @@
|
|
1
|
+
## 0.2.9 - 2019-11-17
|
2
|
+
|
3
|
+
* [enhancement] Remove usage of `ConfigSource#getObjectNode` [#57](https://github.com/treasure-data/embulk-input-jira/pull/57)
|
4
|
+
|
1
5
|
## 0.2.8 - 2019-04-08
|
2
6
|
|
3
7
|
* [fixed] Process is hang forever when validate task [#56](https://github.com/treasure-data/embulk-input-jira/pull/56)
|
data/README.md
CHANGED
data/build.gradle
CHANGED
@@ -14,21 +14,21 @@ configurations {
|
|
14
14
|
provided
|
15
15
|
}
|
16
16
|
|
17
|
-
version = "0.2.
|
17
|
+
version = "0.2.9"
|
18
18
|
|
19
19
|
sourceCompatibility = 1.8
|
20
20
|
targetCompatibility = 1.8
|
21
21
|
|
22
22
|
dependencies {
|
23
|
-
compile "org.embulk:embulk-core:0.9.
|
24
|
-
provided "org.embulk:embulk-core:0.9.
|
23
|
+
compile "org.embulk:embulk-core:0.9.20"
|
24
|
+
provided "org.embulk:embulk-core:0.9.20"
|
25
25
|
compile group: 'org.apache.httpcomponents', name: 'httpclient', version: '4.5.6'
|
26
26
|
compile group: 'org.glassfish.jersey.core', name: 'jersey-client', version: '2.27'
|
27
27
|
compile group: 'com.google.code.gson', name: 'gson', version: '2.8.5'
|
28
28
|
testCompile "junit:junit:4.+"
|
29
29
|
testCompile "org.mockito:mockito-core:2.+"
|
30
|
-
testCompile "org.embulk:embulk-test:0.9.
|
31
|
-
testCompile "org.embulk:embulk-core:0.9.
|
30
|
+
testCompile "org.embulk:embulk-test:0.9.20"
|
31
|
+
testCompile "org.embulk:embulk-core:0.9.20:tests"
|
32
32
|
}
|
33
33
|
|
34
34
|
task classpath(type: Copy, dependsOn: ["jar"]) {
|
@@ -162,7 +162,7 @@ public class JiraInputPlugin
|
|
162
162
|
Buffer sample = Buffer.copyOf(createSamples(issues, getUniqueAttributes(issues)).toString().getBytes());
|
163
163
|
JsonNode columns = Exec.getInjector().getInstance(GuessExecutor.class)
|
164
164
|
.guessParserConfig(sample, Exec.newConfigSource(), createGuessConfig())
|
165
|
-
.
|
165
|
+
.get(JsonNode.class, "columns");
|
166
166
|
return Exec.newConfigDiff().set("columns", columns);
|
167
167
|
}
|
168
168
|
|
@@ -9,6 +9,7 @@ import org.apache.http.client.methods.HttpGet;
|
|
9
9
|
import org.apache.http.impl.client.CloseableHttpClient;
|
10
10
|
import org.apache.http.impl.client.HttpClientBuilder;
|
11
11
|
import org.embulk.config.ConfigException;
|
12
|
+
import org.embulk.config.ConfigSource;
|
12
13
|
import org.embulk.input.jira.Issue;
|
13
14
|
import org.embulk.input.jira.JiraInputPlugin.PluginTask;
|
14
15
|
import org.embulk.spi.Column;
|
@@ -37,32 +38,32 @@ public final class JiraUtil
|
|
37
38
|
{
|
38
39
|
private JiraUtil() {}
|
39
40
|
|
40
|
-
public static int calculateTotalPage(int totalCount, int resultPerPage)
|
41
|
+
public static int calculateTotalPage(final int totalCount, final int resultPerPage)
|
41
42
|
{
|
42
43
|
return (int) Math.ceil((double) totalCount / resultPerPage);
|
43
44
|
}
|
44
45
|
|
45
|
-
public static String buildPermissionUrl(String url)
|
46
|
+
public static String buildPermissionUrl(final String url)
|
46
47
|
{
|
47
48
|
return UriBuilder.fromUri(url).path(CREDENTIAL_URI_PATH).build().toString();
|
48
49
|
}
|
49
50
|
|
50
|
-
public static String buildSearchUrl(String url)
|
51
|
+
public static String buildSearchUrl(final String url)
|
51
52
|
{
|
52
53
|
return UriBuilder.fromUri(url).path(SEARCH_URI_PATH).build().toString();
|
53
54
|
}
|
54
55
|
|
55
56
|
public static void validateTaskConfig(final PluginTask task)
|
56
57
|
{
|
57
|
-
String username = task.getUsername();
|
58
|
+
final String username = task.getUsername();
|
58
59
|
if (isNullOrEmpty(username)) {
|
59
60
|
throw new ConfigException("Username or email could not be empty");
|
60
61
|
}
|
61
|
-
String password = task.getPassword();
|
62
|
+
final String password = task.getPassword();
|
62
63
|
if (isNullOrEmpty(password)) {
|
63
64
|
throw new ConfigException("Password could not be empty");
|
64
65
|
}
|
65
|
-
String uri = task.getUri();
|
66
|
+
final String uri = task.getUri();
|
66
67
|
if (isNullOrEmpty(uri)) {
|
67
68
|
throw new ConfigException("JIRA API endpoint could not be empty");
|
68
69
|
}
|
@@ -74,7 +75,7 @@ public final class JiraUtil
|
|
74
75
|
.setCookieSpec(CookieSpecs.STANDARD)
|
75
76
|
.build())
|
76
77
|
.build()) {
|
77
|
-
HttpGet request = new HttpGet(uri);
|
78
|
+
final HttpGet request = new HttpGet(uri);
|
78
79
|
try (CloseableHttpResponse response = client.execute(request)) {
|
79
80
|
response.getStatusLine().getStatusCode();
|
80
81
|
}
|
@@ -82,11 +83,11 @@ public final class JiraUtil
|
|
82
83
|
catch (IOException | IllegalArgumentException e) {
|
83
84
|
throw new ConfigException("JIRA API endpoint is incorrect or not available");
|
84
85
|
}
|
85
|
-
int retryInitialWaitSec = task.getInitialRetryIntervalMillis();
|
86
|
+
final int retryInitialWaitSec = task.getInitialRetryIntervalMillis();
|
86
87
|
if (retryInitialWaitSec < 1) {
|
87
88
|
throw new ConfigException("Initial retry delay should be equal or greater than 1");
|
88
89
|
}
|
89
|
-
int retryLimit = task.getRetryLimit();
|
90
|
+
final int retryLimit = task.getRetryLimit();
|
90
91
|
if (retryLimit < 0 || retryLimit > 10) {
|
91
92
|
throw new ConfigException("Retry limit should between 0 and 10");
|
92
93
|
}
|
@@ -96,26 +97,25 @@ public final class JiraUtil
|
|
96
97
|
* For getting the timestamp value of the node
|
97
98
|
* Sometime if the parser could not parse the value then return null
|
98
99
|
* */
|
99
|
-
private static Timestamp getTimestampValue(PluginTask task, Column column, String value)
|
100
|
+
private static Timestamp getTimestampValue(final PluginTask task, final Column column, final String value)
|
100
101
|
{
|
101
|
-
List<ColumnConfig> columnConfigs = task.getColumns().getColumns();
|
102
|
+
final List<ColumnConfig> columnConfigs = task.getColumns().getColumns();
|
102
103
|
String pattern = DEFAULT_TIMESTAMP_PATTERN;
|
103
|
-
for (ColumnConfig
|
104
|
-
|
105
|
-
|
106
|
-
&&
|
107
|
-
&&
|
108
|
-
|
109
|
-
pattern = config.getConfigSource().getObjectNode().get("format").asText();
|
104
|
+
for (final ColumnConfig columnConfig : columnConfigs) {
|
105
|
+
final ConfigSource columnConfigSource = columnConfig.getConfigSource();
|
106
|
+
if (columnConfig.getName().equals(column.getName())
|
107
|
+
&& columnConfigSource != null
|
108
|
+
&& columnConfigSource.has("format")) {
|
109
|
+
pattern = columnConfigSource.get(String.class, "format");
|
110
110
|
break;
|
111
111
|
}
|
112
112
|
}
|
113
|
-
TimestampParser parser = TimestampParser.of(pattern, "UTC");
|
113
|
+
final TimestampParser parser = TimestampParser.of(pattern, "UTC");
|
114
114
|
Timestamp result = null;
|
115
115
|
try {
|
116
116
|
result = parser.parse(value);
|
117
117
|
}
|
118
|
-
catch (Exception e) {
|
118
|
+
catch (final Exception e) {
|
119
119
|
}
|
120
120
|
return result;
|
121
121
|
}
|
@@ -124,13 +124,13 @@ public final class JiraUtil
|
|
124
124
|
* For getting the Long value of the node
|
125
125
|
* Sometime if error occurs (i.e a JSON value but user modified it as long) then return null
|
126
126
|
* */
|
127
|
-
private static Long getLongValue(JsonElement value)
|
127
|
+
private static Long getLongValue(final JsonElement value)
|
128
128
|
{
|
129
129
|
Long result = null;
|
130
130
|
try {
|
131
131
|
result = value.getAsLong();
|
132
132
|
}
|
133
|
-
catch (Exception e) {
|
133
|
+
catch (final Exception e) {
|
134
134
|
}
|
135
135
|
return result;
|
136
136
|
}
|
@@ -139,13 +139,13 @@ public final class JiraUtil
|
|
139
139
|
* For getting the Double value of the node
|
140
140
|
* Sometime if error occurs (i.e a JSON value but user modified it as double) then return null
|
141
141
|
* */
|
142
|
-
private static Double getDoubleValue(JsonElement value)
|
142
|
+
private static Double getDoubleValue(final JsonElement value)
|
143
143
|
{
|
144
144
|
Double result = null;
|
145
145
|
try {
|
146
146
|
result = value.getAsDouble();
|
147
147
|
}
|
148
|
-
catch (Exception e) {
|
148
|
+
catch (final Exception e) {
|
149
149
|
}
|
150
150
|
return result;
|
151
151
|
}
|
@@ -154,24 +154,24 @@ public final class JiraUtil
|
|
154
154
|
* For getting the Boolean value of the node
|
155
155
|
* Sometime if error occurs (i.e a JSON value but user modified it as boolean) then return null
|
156
156
|
* */
|
157
|
-
private static Boolean getBooleanValue(JsonElement value)
|
157
|
+
private static Boolean getBooleanValue(final JsonElement value)
|
158
158
|
{
|
159
159
|
Boolean result = null;
|
160
160
|
try {
|
161
161
|
result = value.getAsBoolean();
|
162
162
|
}
|
163
|
-
catch (Exception e) {
|
163
|
+
catch (final Exception e) {
|
164
164
|
}
|
165
165
|
return result;
|
166
166
|
}
|
167
167
|
|
168
|
-
public static void addRecord(Issue issue, Schema schema, PluginTask task, PageBuilder pageBuilder)
|
168
|
+
public static void addRecord(final Issue issue, final Schema schema, final PluginTask task, final PageBuilder pageBuilder)
|
169
169
|
{
|
170
170
|
schema.visitColumns(new ColumnVisitor() {
|
171
171
|
@Override
|
172
|
-
public void jsonColumn(Column column)
|
172
|
+
public void jsonColumn(final Column column)
|
173
173
|
{
|
174
|
-
JsonElement data = issue.getValue(column.getName());
|
174
|
+
final JsonElement data = issue.getValue(column.getName());
|
175
175
|
if (data.isJsonNull() || data.isJsonPrimitive()) {
|
176
176
|
pageBuilder.setNull(column);
|
177
177
|
}
|
@@ -181,9 +181,9 @@ public final class JiraUtil
|
|
181
181
|
}
|
182
182
|
|
183
183
|
@Override
|
184
|
-
public void stringColumn(Column column)
|
184
|
+
public void stringColumn(final Column column)
|
185
185
|
{
|
186
|
-
JsonElement data = issue.getValue(column.getName());
|
186
|
+
final JsonElement data = issue.getValue(column.getName());
|
187
187
|
if (data.isJsonNull()) {
|
188
188
|
pageBuilder.setNull(column);
|
189
189
|
}
|
@@ -208,14 +208,14 @@ public final class JiraUtil
|
|
208
208
|
}
|
209
209
|
|
210
210
|
@Override
|
211
|
-
public void timestampColumn(Column column)
|
211
|
+
public void timestampColumn(final Column column)
|
212
212
|
{
|
213
|
-
JsonElement data = issue.getValue(column.getName());
|
213
|
+
final JsonElement data = issue.getValue(column.getName());
|
214
214
|
if (data.isJsonNull() || data.isJsonObject() || data.isJsonArray()) {
|
215
215
|
pageBuilder.setNull(column);
|
216
216
|
}
|
217
217
|
else {
|
218
|
-
Timestamp value = getTimestampValue(task, column, data.getAsString());
|
218
|
+
final Timestamp value = getTimestampValue(task, column, data.getAsString());
|
219
219
|
if (value == null) {
|
220
220
|
pageBuilder.setNull(column);
|
221
221
|
}
|
@@ -226,9 +226,9 @@ public final class JiraUtil
|
|
226
226
|
}
|
227
227
|
|
228
228
|
@Override
|
229
|
-
public void booleanColumn(Column column)
|
229
|
+
public void booleanColumn(final Column column)
|
230
230
|
{
|
231
|
-
Boolean value = getBooleanValue(issue.getValue(column.getName()));
|
231
|
+
final Boolean value = getBooleanValue(issue.getValue(column.getName()));
|
232
232
|
if (value == null) {
|
233
233
|
pageBuilder.setNull(column);
|
234
234
|
}
|
@@ -238,9 +238,9 @@ public final class JiraUtil
|
|
238
238
|
}
|
239
239
|
|
240
240
|
@Override
|
241
|
-
public void longColumn(Column column)
|
241
|
+
public void longColumn(final Column column)
|
242
242
|
{
|
243
|
-
Long value = getLongValue(issue.getValue(column.getName()));
|
243
|
+
final Long value = getLongValue(issue.getValue(column.getName()));
|
244
244
|
if (value == null) {
|
245
245
|
pageBuilder.setNull(column);
|
246
246
|
}
|
@@ -250,9 +250,9 @@ public final class JiraUtil
|
|
250
250
|
}
|
251
251
|
|
252
252
|
@Override
|
253
|
-
public void doubleColumn(Column column)
|
253
|
+
public void doubleColumn(final Column column)
|
254
254
|
{
|
255
|
-
Double value = getDoubleValue(issue.getValue(column.getName()));
|
255
|
+
final Double value = getDoubleValue(issue.getValue(column.getName()));
|
256
256
|
if (value == null) {
|
257
257
|
pageBuilder.setNull(column);
|
258
258
|
}
|
@@ -19,7 +19,6 @@ import org.embulk.exec.SystemConfigModule;
|
|
19
19
|
import org.embulk.jruby.JRubyScriptingModule;
|
20
20
|
import org.embulk.plugin.BuiltinPluginSourceModule;
|
21
21
|
import org.embulk.plugin.PluginClassLoaderFactory;
|
22
|
-
import org.embulk.plugin.PluginClassLoaderModule;
|
23
22
|
import org.embulk.spi.BufferAllocator;
|
24
23
|
import org.embulk.spi.Exec;
|
25
24
|
import org.embulk.spi.ExecAction;
|
@@ -37,7 +36,7 @@ public class JiraPluginTestRuntime extends GuiceBinder
|
|
37
36
|
{
|
38
37
|
private static ConfigSource getSystemConfig()
|
39
38
|
{
|
40
|
-
ObjectNode configNode = JsonNodeFactory.instance.objectNode();
|
39
|
+
final ObjectNode configNode = JsonNodeFactory.instance.objectNode();
|
41
40
|
configNode.set("jruby_load_path", JsonNodeFactory.instance.arrayNode().add("lib"));
|
42
41
|
|
43
42
|
return new DataSourceImpl(new ModelManager(null, new ObjectMapper()), configNode);
|
@@ -46,27 +45,26 @@ public class JiraPluginTestRuntime extends GuiceBinder
|
|
46
45
|
public static class TestRuntimeModule implements Module
|
47
46
|
{
|
48
47
|
@Override
|
49
|
-
public void configure(Binder binder)
|
48
|
+
public void configure(final Binder binder)
|
50
49
|
{
|
51
|
-
ConfigSource systemConfig = getSystemConfig();
|
50
|
+
final ConfigSource systemConfig = getSystemConfig();
|
52
51
|
new SystemConfigModule(systemConfig).configure(binder);
|
53
|
-
new ExecModule().configure(binder);
|
52
|
+
new ExecModule(systemConfig).configure(binder);
|
54
53
|
new ExtensionServiceLoaderModule(systemConfig).configure(binder);
|
55
54
|
new BuiltinPluginSourceModule().configure(binder);
|
56
55
|
new JRubyScriptingModule(systemConfig).configure(binder);
|
57
|
-
new PluginClassLoaderModule(systemConfig).configure(binder);
|
58
56
|
new TestUtilityModule().configure(binder);
|
59
57
|
new TestPluginSourceModule().configure(binder);
|
60
58
|
}
|
61
59
|
}
|
62
60
|
|
63
|
-
private ExecSession exec;
|
61
|
+
private final ExecSession exec;
|
64
62
|
|
65
63
|
public JiraPluginTestRuntime()
|
66
64
|
{
|
67
65
|
super(new TestRuntimeModule());
|
68
|
-
Injector injector = getInjector();
|
69
|
-
ConfigSource execConfig = new DataSourceImpl(injector.getInstance(ModelManager.class));
|
66
|
+
final Injector injector = getInjector();
|
67
|
+
final ConfigSource execConfig = new DataSourceImpl(injector.getInstance(ModelManager.class));
|
70
68
|
this.exec = ExecSession.builder(injector).fromExecConfig(execConfig).build();
|
71
69
|
}
|
72
70
|
|
@@ -96,10 +94,11 @@ public class JiraPluginTestRuntime extends GuiceBinder
|
|
96
94
|
}
|
97
95
|
|
98
96
|
@Override
|
99
|
-
public Statement apply(Statement base, Description description)
|
97
|
+
public Statement apply(final Statement base, final Description description)
|
100
98
|
{
|
101
99
|
final Statement superStatement = JiraPluginTestRuntime.super.apply(base, description);
|
102
100
|
return new Statement() {
|
101
|
+
@Override
|
103
102
|
public void evaluate() throws Throwable
|
104
103
|
{
|
105
104
|
try {
|
@@ -107,13 +106,13 @@ public class JiraPluginTestRuntime extends GuiceBinder
|
|
107
106
|
try {
|
108
107
|
superStatement.evaluate();
|
109
108
|
}
|
110
|
-
catch (Throwable ex) {
|
109
|
+
catch (final Throwable ex) {
|
111
110
|
throw new RuntimeExecutionException(ex);
|
112
111
|
}
|
113
112
|
return null;
|
114
113
|
});
|
115
114
|
}
|
116
|
-
catch (RuntimeException ex) {
|
115
|
+
catch (final RuntimeException ex) {
|
117
116
|
throw ex.getCause();
|
118
117
|
}
|
119
118
|
finally {
|
@@ -125,7 +124,7 @@ public class JiraPluginTestRuntime extends GuiceBinder
|
|
125
124
|
|
126
125
|
private static class RuntimeExecutionException extends RuntimeException
|
127
126
|
{
|
128
|
-
public RuntimeExecutionException(Throwable cause)
|
127
|
+
public RuntimeExecutionException(final Throwable cause)
|
129
128
|
{
|
130
129
|
super(cause);
|
131
130
|
}
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: embulk-input-jira
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.2.
|
4
|
+
version: 0.2.9
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- uu59
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2019-
|
12
|
+
date: 2019-11-13 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
@@ -56,7 +56,7 @@ files:
|
|
56
56
|
- build.gradle
|
57
57
|
- classpath/commons-codec-1.10.jar
|
58
58
|
- classpath/commons-logging-1.2.jar
|
59
|
-
- classpath/embulk-input-jira-0.2.
|
59
|
+
- classpath/embulk-input-jira-0.2.9.jar
|
60
60
|
- classpath/gson-2.8.5.jar
|
61
61
|
- classpath/httpclient-4.5.6.jar
|
62
62
|
- classpath/httpcore-4.4.10.jar
|