embulk 0.6.17 → 0.6.18
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/build.gradle +1 -1
- data/embulk-core/build.gradle +2 -2
- data/embulk-core/src/main/java/org/embulk/config/ConfigLoader.java +52 -30
- data/embulk-core/src/main/java/org/embulk/spi/util/Filters.java +3 -3
- data/embulk-core/src/test/java/org/embulk/config/TestConfigLoader.java +66 -0
- data/embulk-docs/src/release.rst +1 -0
- data/embulk-docs/src/release/release-0.6.18.rst +14 -0
- data/lib/embulk/data/new/README.md.erb +1 -1
- data/lib/embulk/data/new/java/filter.java.erb +1 -1
- data/lib/embulk/version.rb +1 -1
- metadata +8 -6
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: ff085042dbecce04ca4a8095c59802bc4336a67e
|
4
|
+
data.tar.gz: aab28c9c0d9ae11a758ba6148baa12a8973e7903
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: bace1db62e73980869cbf11118be290cdcacda974473bb6e334fbb0075bbbdcf8dec7096cff6f35c8de185baa67b6f5efee498e13d974183a5ec15a7ab9bf0db
|
7
|
+
data.tar.gz: 2d1e67648bc4eec548433c69f147e70647fe958d53c15234af3df6289e562a2aaa2e1d49bc9342204f83f6718f2965fa9b7713e5a415bb3e733d3a32e9fcdeac
|
data/build.gradle
CHANGED
data/embulk-core/build.gradle
CHANGED
@@ -22,14 +22,14 @@ dependencies {
|
|
22
22
|
compile 'com.fasterxml.jackson.datatype:jackson-datatype-joda:2.5.3'
|
23
23
|
compile 'com.fasterxml.jackson.module:jackson-module-guice:2.5.3'
|
24
24
|
compile 'ch.qos.logback:logback-classic:1.1.3'
|
25
|
-
compile 'org.slf4j:slf4j-api:1.7.
|
25
|
+
compile 'org.slf4j:slf4j-api:1.7.12'
|
26
26
|
compile 'org.jruby:jruby-complete:' + project.jrubyVersion
|
27
27
|
compile 'com.google.code.findbugs:annotations:3.0.0'
|
28
28
|
compile 'org.yaml:snakeyaml:1.14'
|
29
29
|
compile 'javax.validation:validation-api:1.1.0.Final'
|
30
30
|
compile 'org.apache.bval:bval-jsr303:0.5'
|
31
31
|
compile 'io.airlift:slice:0.9'
|
32
|
-
compile 'joda-time:joda-time:2.
|
32
|
+
compile 'joda-time:joda-time:2.8.1'
|
33
33
|
compile 'io.netty:netty-buffer:5.0.0.Alpha1'
|
34
34
|
compile 'org.fusesource.jansi:jansi:1.11'
|
35
35
|
|
@@ -2,12 +2,14 @@ package org.embulk.config;
|
|
2
2
|
|
3
3
|
import java.io.File;
|
4
4
|
import java.io.FileInputStream;
|
5
|
+
import java.io.InputStream;
|
5
6
|
import java.io.IOException;
|
6
7
|
import java.util.Properties;
|
7
8
|
import com.google.inject.Inject;
|
8
9
|
import com.fasterxml.jackson.databind.ObjectMapper;
|
9
10
|
import com.fasterxml.jackson.core.JsonParser;
|
10
11
|
import com.fasterxml.jackson.databind.JsonNode;
|
12
|
+
import com.fasterxml.jackson.databind.RuntimeJsonMappingException;
|
11
13
|
import com.fasterxml.jackson.databind.node.ObjectNode;
|
12
14
|
import com.fasterxml.jackson.databind.node.JsonNodeFactory;
|
13
15
|
import org.yaml.snakeyaml.Yaml;
|
@@ -22,47 +24,77 @@ public class ConfigLoader
|
|
22
24
|
this.model = model;
|
23
25
|
}
|
24
26
|
|
25
|
-
public ConfigSource
|
27
|
+
public ConfigSource fromJsonFile(File file) throws IOException
|
26
28
|
{
|
27
|
-
|
28
|
-
|
29
|
-
|
29
|
+
try (FileInputStream is = new FileInputStream(file)) {
|
30
|
+
return fromJson(is);
|
31
|
+
}
|
32
|
+
}
|
33
|
+
|
34
|
+
public ConfigSource fromJson(InputStream stream) throws IOException
|
35
|
+
{
|
36
|
+
JsonNode node = new ObjectMapper().readTree(stream);
|
37
|
+
if (!node.isObject()) {
|
38
|
+
throw new RuntimeJsonMappingException("Expected object to load ConfigSource but got: "+node.getNodeType());
|
39
|
+
}
|
40
|
+
return new DataSourceImpl(model, (ObjectNode) node);
|
41
|
+
}
|
42
|
+
|
43
|
+
public ConfigSource fromYamlFile(File file) throws IOException
|
44
|
+
{
|
45
|
+
try (FileInputStream stream = new FileInputStream(file)) {
|
46
|
+
return fromYaml(stream);
|
47
|
+
}
|
30
48
|
}
|
31
49
|
|
32
|
-
public ConfigSource
|
50
|
+
public ConfigSource fromYaml(InputStream stream) throws IOException
|
33
51
|
{
|
34
52
|
Yaml yaml = new Yaml();
|
35
|
-
Object
|
36
|
-
|
37
|
-
|
53
|
+
Object object = yaml.load(stream);
|
54
|
+
JsonNode node = objectToJson(object);
|
55
|
+
if (!node.isObject()) {
|
56
|
+
throw new RuntimeJsonMappingException("Expected object to load ConfigSource but got "+node);
|
38
57
|
}
|
39
|
-
|
58
|
+
return new DataSourceImpl(model, (ObjectNode) node);
|
59
|
+
}
|
60
|
+
|
61
|
+
@Deprecated
|
62
|
+
public ConfigSource fromJson(JsonParser parser) throws IOException
|
63
|
+
{
|
64
|
+
// TODO check parsed.isObject()
|
65
|
+
ObjectNode source = (ObjectNode) new ObjectMapper().readTree(parser);
|
40
66
|
return new DataSourceImpl(model, source);
|
41
67
|
}
|
42
68
|
|
43
69
|
public ConfigSource fromPropertiesYamlLiteral(Properties props, String keyPrefix)
|
44
70
|
{
|
45
|
-
// TODO exception handling
|
46
71
|
ObjectNode source = new ObjectNode(JsonNodeFactory.instance);
|
72
|
+
DataSource ds = new DataSourceImpl(model, source);
|
47
73
|
Yaml yaml = new Yaml();
|
48
|
-
for (String
|
49
|
-
|
50
|
-
// in.parser.type=csv => {"in": {"parser": {"type": "csv"}}}
|
51
|
-
if (!key.startsWith(keyPrefix)) {
|
74
|
+
for (String propName : props.stringPropertyNames()) {
|
75
|
+
if (!propName.startsWith(keyPrefix)) {
|
52
76
|
continue;
|
53
77
|
}
|
54
|
-
String
|
55
|
-
String
|
56
|
-
Object parsedValue = yaml.load(yamlValue);
|
57
|
-
JsonNode
|
58
|
-
|
78
|
+
String keyName = propName.substring(keyPrefix.length());
|
79
|
+
String yamlValue = props.getProperty(propName);
|
80
|
+
Object parsedValue = yaml.load(yamlValue); // TODO exception handling
|
81
|
+
JsonNode node = objectToJson(parsedValue);
|
82
|
+
|
83
|
+
// handle "." as a map acccessor. for example:
|
84
|
+
// in.parser.type=csv => {"in": {"parser": {"type": "csv"}}}
|
85
|
+
// TODO handle "[]" as array index
|
86
|
+
String[] fragments = keyName.split("\\.");
|
87
|
+
DataSource key = ds;
|
88
|
+
for (int i=0; i < fragments.length - 1; i++) {
|
89
|
+
key = key.getNestedOrSetEmpty(fragments[i]); // TODO exception handling
|
90
|
+
}
|
91
|
+
key.set(fragments[fragments.length - 1], node);
|
59
92
|
}
|
60
93
|
return new DataSourceImpl(model, source);
|
61
94
|
}
|
62
95
|
|
63
96
|
private JsonNode objectToJson(Object object)
|
64
97
|
{
|
65
|
-
// TODO exception
|
66
98
|
ObjectMapper objectMapper = new ObjectMapper();
|
67
99
|
try {
|
68
100
|
return objectMapper.readTree(objectMapper.writeValueAsString(object));
|
@@ -70,14 +102,4 @@ public class ConfigLoader
|
|
70
102
|
throw new RuntimeException(ex);
|
71
103
|
}
|
72
104
|
}
|
73
|
-
|
74
|
-
private ObjectNode objectToJsonObject(Object object)
|
75
|
-
{
|
76
|
-
// TODO exception
|
77
|
-
JsonNode json = objectToJson(object);
|
78
|
-
if (!json.isObject()) {
|
79
|
-
throw new RuntimeException("Expected object to deserialize ConfigSource but got "+json);
|
80
|
-
}
|
81
|
-
return (ObjectNode) json;
|
82
|
-
}
|
83
105
|
}
|
@@ -54,10 +54,10 @@ public abstract class Filters
|
|
54
54
|
List<Schema> filterSchemas, PageOutput output)
|
55
55
|
{
|
56
56
|
PageOutput out = output;
|
57
|
-
int pos =
|
58
|
-
while (pos
|
57
|
+
int pos = plugins.size() - 1;
|
58
|
+
while (pos >= 0) {
|
59
59
|
out = plugins.get(pos).open(taskSources.get(pos), filterSchemas.get(pos), filterSchemas.get(pos + 1), out);
|
60
|
-
pos
|
60
|
+
pos--;
|
61
61
|
}
|
62
62
|
return out;
|
63
63
|
}
|
@@ -0,0 +1,66 @@
|
|
1
|
+
package org.embulk.config;
|
2
|
+
|
3
|
+
import java.util.Properties;
|
4
|
+
import java.io.InputStream;
|
5
|
+
import java.io.ByteArrayInputStream;
|
6
|
+
import java.io.IOException;
|
7
|
+
import java.nio.charset.StandardCharsets;
|
8
|
+
import com.fasterxml.jackson.databind.ObjectMapper;
|
9
|
+
import org.junit.Before;
|
10
|
+
import org.junit.Test;
|
11
|
+
import static org.junit.Assert.assertEquals;
|
12
|
+
import com.google.inject.Inject;
|
13
|
+
import org.embulk.spi.Exec;
|
14
|
+
import org.embulk.EmbulkTestRuntime;
|
15
|
+
|
16
|
+
public class TestConfigLoader
|
17
|
+
{
|
18
|
+
private ConfigLoader loader;
|
19
|
+
|
20
|
+
@Before
|
21
|
+
public void setup() throws Exception
|
22
|
+
{
|
23
|
+
this.loader = new ConfigLoader(new ModelManager(null, new ObjectMapper()));
|
24
|
+
}
|
25
|
+
|
26
|
+
@Test
|
27
|
+
public void testFromEmptyJson() throws IOException
|
28
|
+
{
|
29
|
+
ConfigSource config = loader.fromJson(newInputStream("{\"type\":\"test\",\"data\":1}"));
|
30
|
+
assertEquals("test", config.get(String.class, "type"));
|
31
|
+
assertEquals(1, (int) config.get(Integer.class, "data"));
|
32
|
+
}
|
33
|
+
|
34
|
+
@Test
|
35
|
+
public void testFromYamlProperties() throws IOException
|
36
|
+
{
|
37
|
+
Properties props = new Properties();
|
38
|
+
props.setProperty("type", "test");
|
39
|
+
props.setProperty("data", "1");
|
40
|
+
|
41
|
+
ConfigSource config = loader.fromPropertiesYamlLiteral(props, "");
|
42
|
+
assertEquals("test", config.get(String.class, "type"));
|
43
|
+
assertEquals(1, (int) config.get(Integer.class, "data"));
|
44
|
+
}
|
45
|
+
|
46
|
+
@Test
|
47
|
+
public void testFromYamlPropertiesNested() throws IOException
|
48
|
+
{
|
49
|
+
Properties props = new Properties();
|
50
|
+
props.setProperty("type", "test");
|
51
|
+
props.setProperty("columns.k1", "1");
|
52
|
+
props.setProperty("values.myval.data", "2");
|
53
|
+
|
54
|
+
ConfigSource config = loader.fromPropertiesYamlLiteral(props, "");
|
55
|
+
System.out.println("config: "+config);
|
56
|
+
assertEquals("test", config.get(String.class, "type"));
|
57
|
+
assertEquals(1, (int) config.getNested("columns").get(Integer.class, "k1"));
|
58
|
+
assertEquals(2, (int) config.getNested("values").getNested("myval").get(Integer.class, "data"));
|
59
|
+
}
|
60
|
+
|
61
|
+
private static InputStream newInputStream(String string)
|
62
|
+
{
|
63
|
+
byte[] bytes = string.getBytes(StandardCharsets.UTF_8);
|
64
|
+
return new ByteArrayInputStream(bytes);
|
65
|
+
}
|
66
|
+
}
|
data/embulk-docs/src/release.rst
CHANGED
@@ -0,0 +1,14 @@
|
|
1
|
+
Release 0.6.18
|
2
|
+
==================================
|
3
|
+
|
4
|
+
General Changes
|
5
|
+
------------------
|
6
|
+
|
7
|
+
* Upgraded slf4j-api from 1.7.10 to 1.7.12
|
8
|
+
* Upgraded joda-time from 2.7 to 2.8.1
|
9
|
+
* Fixed broken plugin template generation of java-filter and ruby (@sakama++)
|
10
|
+
* Fixed stacking order of filter plugins. This fixes broken behavior when we use multiple filter plugins.
|
11
|
+
|
12
|
+
Release Date
|
13
|
+
------------------
|
14
|
+
2015-07-22
|
@@ -2,7 +2,7 @@
|
|
2
2
|
|
3
3
|
%case language
|
4
4
|
%when :ruby
|
5
|
-
TODO: Write short description here and <%=
|
5
|
+
TODO: Write short description here and <%= full_project_name %>.gemspec file.
|
6
6
|
%when :java
|
7
7
|
TODO: Write short description here and build.gradle file.
|
8
8
|
%else
|
data/lib/embulk/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: embulk
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.6.
|
4
|
+
version: 0.6.18
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Sadayuki Furuhashi
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-07-
|
11
|
+
date: 2015-07-22 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -265,6 +265,7 @@ files:
|
|
265
265
|
- embulk-core/src/test/java/org/embulk/RandomManager.java
|
266
266
|
- embulk-core/src/test/java/org/embulk/TestPluginSourceModule.java
|
267
267
|
- embulk-core/src/test/java/org/embulk/TestUtilityModule.java
|
268
|
+
- embulk-core/src/test/java/org/embulk/config/TestConfigLoader.java
|
268
269
|
- embulk-core/src/test/java/org/embulk/config/TestConfigSource.java
|
269
270
|
- embulk-core/src/test/java/org/embulk/config/TestTaskSource.java
|
270
271
|
- embulk-core/src/test/java/org/embulk/plugin/MockPluginSource.java
|
@@ -333,6 +334,7 @@ files:
|
|
333
334
|
- embulk-docs/src/release/release-0.6.15.rst
|
334
335
|
- embulk-docs/src/release/release-0.6.16.rst
|
335
336
|
- embulk-docs/src/release/release-0.6.17.rst
|
337
|
+
- embulk-docs/src/release/release-0.6.18.rst
|
336
338
|
- embulk-docs/src/release/release-0.6.2.rst
|
337
339
|
- embulk-docs/src/release/release-0.6.3.rst
|
338
340
|
- embulk-docs/src/release/release-0.6.4.rst
|
@@ -449,8 +451,8 @@ files:
|
|
449
451
|
- classpath/bval-jsr303-0.5.jar
|
450
452
|
- classpath/commons-beanutils-core-1.8.3.jar
|
451
453
|
- classpath/commons-lang3-3.1.jar
|
452
|
-
- classpath/embulk-core-0.6.
|
453
|
-
- classpath/embulk-standards-0.6.
|
454
|
+
- classpath/embulk-core-0.6.18.jar
|
455
|
+
- classpath/embulk-standards-0.6.18.jar
|
454
456
|
- classpath/guava-18.0.jar
|
455
457
|
- classpath/guice-4.0.jar
|
456
458
|
- classpath/guice-multibindings-4.0.jar
|
@@ -463,13 +465,13 @@ files:
|
|
463
465
|
- classpath/jackson-module-guice-2.5.3.jar
|
464
466
|
- classpath/jansi-1.11.jar
|
465
467
|
- classpath/javax.inject-1.jar
|
466
|
-
- classpath/joda-time-2.
|
468
|
+
- classpath/joda-time-2.8.1.jar
|
467
469
|
- classpath/jruby-complete-1.7.19.jar
|
468
470
|
- classpath/logback-classic-1.1.3.jar
|
469
471
|
- classpath/logback-core-1.1.3.jar
|
470
472
|
- classpath/netty-buffer-5.0.0.Alpha1.jar
|
471
473
|
- classpath/netty-common-5.0.0.Alpha1.jar
|
472
|
-
- classpath/slf4j-api-1.7.
|
474
|
+
- classpath/slf4j-api-1.7.12.jar
|
473
475
|
- classpath/slice-0.9.jar
|
474
476
|
- classpath/snakeyaml-1.14.jar
|
475
477
|
- classpath/validation-api-1.1.0.Final.jar
|