embulk-input-google_spreadsheets 1.0.0 → 1.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/CHANGELOG.md +5 -0
- data/README.md +1 -0
- data/embulk-input-google_spreadsheets.gemspec +2 -2
- data/example/config_authorized_user_unformatted_value.yml +15 -0
- data/example/config_service_account_unformatted_value.yml +15 -0
- data/lib/embulk/input/google_spreadsheets.rb +3 -0
- data/lib/embulk/input/google_spreadsheets/pager.rb +5 -1
- data/lib/embulk/input/google_spreadsheets/spreadsheets_client.rb +7 -3
- data/test/test_configure.rb +1 -0
- data/test/test_run_examples.rb +22 -2
- data/test/test_spreadsheets_client.rb +0 -2
- metadata +6 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 9f7dd9c3e53a70bcc237da3b46ea67f2ac70c207
|
4
|
+
data.tar.gz: 8cf701fd4cfe2dbef37ea6246517382b6b01f4ec
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 5d2ea9909f5c8f62362715916d7a2fe7096a4f2e51738b52a4573737dfa372bcb7d71dff41b15286618cfea45eee798fb08301178cc83709ca1a421d464e3d4a
|
7
|
+
data.tar.gz: 961a7934ee7b3acf93be1c9ac17265789378a54ff10fe155a07cacf0069b3ca8be9ebb35ea899b17ae60afc2323d823cef12a7af6ef6e9dd33b3cc7bb2f2034d
|
data/CHANGELOG.md
CHANGED
data/README.md
CHANGED
@@ -21,6 +21,7 @@ Embulk input plugin to load records from Google Spreadsheets.
|
|
21
21
|
| end_row | integer | optional | `-1` | `-1` means loading records until an empty record appears. |
|
22
22
|
| max_fetch_rows | integer | optional | `10000` | Load data from a worksheet for each numerical value specified by this option. |
|
23
23
|
| null_string | string | optional | `''` | Replace this value to `NULL` |
|
24
|
+
| value_render_option| string | optional | `'FORMATTED_VALUE'`| `'FORMATTED_VALUE'`, `'UNFORMATTED_VALUE'`, `'FORMULA'` are available. See [the `value_render_option` document](https://developers.google.com/sheets/api/reference/rest/v4/ValueRenderOption).|
|
24
25
|
| stop_on_invalid_record | boolean | optional | `true` | |
|
25
26
|
| default_timestamp_format | string | optional | `'%Y-%m-%d %H:%M:%S.%N %z'` | |
|
26
27
|
| default_timezone | string | optional | `'UTC'` | |
|
@@ -1,6 +1,6 @@
|
|
1
1
|
Gem::Specification.new do |spec|
|
2
2
|
spec.name = 'embulk-input-google_spreadsheets'
|
3
|
-
spec.version = '1.
|
3
|
+
spec.version = '1.1.0'
|
4
4
|
spec.authors = %w(Civitaspo yang-xu)
|
5
5
|
spec.summary = 'Google Spreadsheets input plugin for Embulk'
|
6
6
|
spec.description = 'Load records from Google Spreadsheets.'
|
@@ -19,6 +19,6 @@ Gem::Specification.new do |spec|
|
|
19
19
|
spec.add_development_dependency 'test-unit'
|
20
20
|
spec.add_development_dependency 'test-unit-rr'
|
21
21
|
|
22
|
-
spec.add_dependency 'google-api-client', '>= 0.
|
22
|
+
spec.add_dependency 'google-api-client', '>= 0.11'
|
23
23
|
spec.add_dependency 'time_with_zone'
|
24
24
|
end
|
@@ -0,0 +1,15 @@
|
|
1
|
+
in:
|
2
|
+
type: google_spreadsheets
|
3
|
+
auth_method: authorized_user
|
4
|
+
json_keyfile: example/authorized_user_credentials.json
|
5
|
+
spreadsheets_url: https://docs.google.com/spreadsheets/d/1Cxz-LudQuhRAGZL8mBoHs6mRnpjODpyF4Rwc5UYoV1E/edit#gid=0
|
6
|
+
worksheet_title: UNFORMATTED VALUE
|
7
|
+
start_row: 2
|
8
|
+
default_timezone: Asia/Tokyo
|
9
|
+
null_string: '\N'
|
10
|
+
default_typecast: strict
|
11
|
+
value_render_option: UNFORMATTED_VALUE
|
12
|
+
columns:
|
13
|
+
- {name: _c1, type: long}
|
14
|
+
out:
|
15
|
+
type: stdout
|
@@ -0,0 +1,15 @@
|
|
1
|
+
in:
|
2
|
+
type: google_spreadsheets
|
3
|
+
auth_method: service_account
|
4
|
+
json_keyfile: example/service_account_credentials.json
|
5
|
+
spreadsheets_url: https://docs.google.com/spreadsheets/d/1Cxz-LudQuhRAGZL8mBoHs6mRnpjODpyF4Rwc5UYoV1E/edit#gid=0
|
6
|
+
worksheet_title: UNFORMATTED VALUE
|
7
|
+
start_row: 2
|
8
|
+
default_timezone: Asia/Tokyo
|
9
|
+
null_string: '\N'
|
10
|
+
default_typecast: strict
|
11
|
+
value_render_option: UNFORMATTED_VALUE
|
12
|
+
columns:
|
13
|
+
- {name: _c1, type: long}
|
14
|
+
out:
|
15
|
+
type: stdout
|
@@ -108,6 +108,9 @@ module Embulk
|
|
108
108
|
task['start_row'] = config.param('start_row', :integer, default: 1)
|
109
109
|
task['end_row'] = config.param('end_row', :integer, default: -1)
|
110
110
|
task['max_fetch_rows'] = config.param('max_fetch_rows', :integer, default: 10000)
|
111
|
+
# FORMATTED_VALUE, UNFORMATTED_VALUE, FORMULA are available.
|
112
|
+
# ref. https://developers.google.com/sheets/api/reference/rest/v4/ValueRenderOption
|
113
|
+
task['value_render_option'] = config.param('value_render_option', :string, default: 'FORMATTED_VALUE')
|
111
114
|
task['null_string'] = config.param('null_string', :string, default: '')
|
112
115
|
task['stop_on_invalid_record'] = config.param('stop_on_invalid_record', :bool, default: true)
|
113
116
|
# columns: this option supposes an array of hash has the below structure.
|
@@ -79,7 +79,11 @@ module Embulk
|
|
79
79
|
def empty_record?(record)
|
80
80
|
return true unless record
|
81
81
|
return true if record.empty?
|
82
|
-
record.all?
|
82
|
+
record.all? do |v|
|
83
|
+
next true if v.nil?
|
84
|
+
next true if v.is_a?(String) and v.empty?
|
85
|
+
false
|
86
|
+
end
|
83
87
|
end
|
84
88
|
|
85
89
|
def no_limit?
|
@@ -7,11 +7,12 @@ module Embulk
|
|
7
7
|
|
8
8
|
class SpreadsheetsClient
|
9
9
|
|
10
|
-
attr_accessor :spreadsheets_url, :worksheet_title, :auth, :pager
|
10
|
+
attr_accessor :spreadsheets_url, :worksheet_title, :value_render_option, :auth, :pager
|
11
11
|
|
12
12
|
def initialize(task, auth:, pager:)
|
13
13
|
@spreadsheets_url = task['spreadsheets_url']
|
14
14
|
@worksheet_title = task['worksheet_title']
|
15
|
+
@value_render_option = task['value_render_option']
|
15
16
|
@auth = auth
|
16
17
|
@pager = pager
|
17
18
|
end
|
@@ -54,8 +55,11 @@ module Embulk
|
|
54
55
|
|
55
56
|
def worksheet_values(range)
|
56
57
|
range = "#{worksheet_title}!#{range}"
|
57
|
-
logger.info {
|
58
|
-
|
58
|
+
logger.info {
|
59
|
+
"`embulk-input-google_spreadsheets`: load data from spreadsheet: '#{spreadsheets_url}'," \
|
60
|
+
" range: '#{range}', value_render_option: '#{value_render_option}'"
|
61
|
+
}
|
62
|
+
service.get_spreadsheet_values(spreadsheets_id, range, value_render_option: value_render_option).values
|
59
63
|
end
|
60
64
|
|
61
65
|
def worksheet_each_record(&block)
|
data/test/test_configure.rb
CHANGED
@@ -54,6 +54,7 @@ module Embulk
|
|
54
54
|
assert_equal(-1, task['end_row'])
|
55
55
|
assert_equal(10000, task['max_fetch_rows'])
|
56
56
|
assert_equal('', task['null_string'])
|
57
|
+
assert_equal('FORMATTED_VALUE', task['value_render_option'])
|
57
58
|
assert_equal(true, task['stop_on_invalid_record'])
|
58
59
|
assert_equal('%Y-%m-%d %H:%M:%S.%N %z', task['default_timestamp_format'])
|
59
60
|
assert_equal('UTC', task['default_timezone'])
|
data/test/test_run_examples.rb
CHANGED
@@ -46,7 +46,7 @@ module Embulk
|
|
46
46
|
puts "'#{JSON_KEYFILE_AUTHORIZED_USER}' is not found. Skip case authorized_user"
|
47
47
|
else
|
48
48
|
test 'authorized_user' do
|
49
|
-
omit 'Skip until closing https://github.com/medjed/embulk-input-google_spreadsheets/issues/
|
49
|
+
omit 'Skip until closing https://github.com/medjed/embulk-input-google_spreadsheets/issues/7'
|
50
50
|
assert_true embulk_run(File.join(EXAMPLE_ROOT, 'config_authorized_user_emoji_worksheet.yml'))
|
51
51
|
end
|
52
52
|
end
|
@@ -55,7 +55,7 @@ module Embulk
|
|
55
55
|
puts "'#{JSON_KEYFILE_SERVICE_ACCOUNT}' is not found. Skip case service_account"
|
56
56
|
else
|
57
57
|
test 'service_account' do
|
58
|
-
omit 'Skip until closing https://github.com/medjed/embulk-input-google_spreadsheets/issues/
|
58
|
+
omit 'Skip until closing https://github.com/medjed/embulk-input-google_spreadsheets/issues/7'
|
59
59
|
assert_true embulk_run(File.join(EXAMPLE_ROOT, 'config_service_account_emoji_worksheet.yml'))
|
60
60
|
end
|
61
61
|
end
|
@@ -120,6 +120,26 @@ module Embulk
|
|
120
120
|
end
|
121
121
|
end
|
122
122
|
end
|
123
|
+
|
124
|
+
sub_test_case 'run unformatted value' do
|
125
|
+
unless File.exist?(JSON_KEYFILE_AUTHORIZED_USER)
|
126
|
+
puts "'#{JSON_KEYFILE_AUTHORIZED_USER}' is not found. Skip case authorized_user"
|
127
|
+
else
|
128
|
+
test 'authorized_user' do
|
129
|
+
|
130
|
+
assert_true embulk_run(File.join(EXAMPLE_ROOT, 'config_authorized_user_unformatted_value.yml'))
|
131
|
+
end
|
132
|
+
end
|
133
|
+
|
134
|
+
unless File.exist?(JSON_KEYFILE_SERVICE_ACCOUNT)
|
135
|
+
puts "'#{JSON_KEYFILE_SERVICE_ACCOUNT}' is not found. Skip case service_account"
|
136
|
+
else
|
137
|
+
test 'service_account' do
|
138
|
+
|
139
|
+
assert_true embulk_run(File.join(EXAMPLE_ROOT, 'config_service_account_unformatted_value.yml'))
|
140
|
+
end
|
141
|
+
end
|
142
|
+
end
|
123
143
|
end
|
124
144
|
end
|
125
145
|
end
|
@@ -75,8 +75,6 @@ else
|
|
75
75
|
end
|
76
76
|
|
77
77
|
test 'multi byte worksheet title' do
|
78
|
-
omit 'Skip until closing this issue https://github.com/medjed/embulk-input-google_spreadsheets/issues/6'
|
79
|
-
|
80
78
|
assert_embulk_nothing_raised do
|
81
79
|
client('worksheet_title' => TEST_WORKSHEET_TITLE_MULTI_BYTE).worksheet_values('A1:C1')
|
82
80
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: embulk-input-google_spreadsheets
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Civitaspo
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2017-
|
12
|
+
date: 2017-04-17 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
@@ -100,7 +100,7 @@ dependencies:
|
|
100
100
|
requirements:
|
101
101
|
- - ">="
|
102
102
|
- !ruby/object:Gem::Version
|
103
|
-
version: 0.
|
103
|
+
version: '0.11'
|
104
104
|
name: google-api-client
|
105
105
|
prerelease: false
|
106
106
|
type: :runtime
|
@@ -108,7 +108,7 @@ dependencies:
|
|
108
108
|
requirements:
|
109
109
|
- - ">="
|
110
110
|
- !ruby/object:Gem::Version
|
111
|
-
version: 0.
|
111
|
+
version: '0.11'
|
112
112
|
- !ruby/object:Gem::Dependency
|
113
113
|
requirement: !ruby/object:Gem::Requirement
|
114
114
|
requirements:
|
@@ -145,11 +145,13 @@ files:
|
|
145
145
|
- example/config_authorized_user_empty_rows_appears_at_the_same_as_max_fetch_rows.yml
|
146
146
|
- example/config_authorized_user_large_data.yml
|
147
147
|
- example/config_authorized_user_no_data.yml
|
148
|
+
- example/config_authorized_user_unformatted_value.yml
|
148
149
|
- example/config_service_account.yml
|
149
150
|
- example/config_service_account_emoji_worksheet.yml
|
150
151
|
- example/config_service_account_empty_rows_appears_at_the_same_as_max_fetch_rows.yml
|
151
152
|
- example/config_service_account_large_data.yml
|
152
153
|
- example/config_service_account_no_data.yml
|
154
|
+
- example/config_service_account_unformatted_value.yml
|
153
155
|
- example/setup_authorized_user_credentials.rb
|
154
156
|
- lib/embulk/input/google_spreadsheets.rb
|
155
157
|
- lib/embulk/input/google_spreadsheets/auth.rb
|