zillabyte-cli 0.1.6 → 0.1.7
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +8 -8
- data/lib/zillabyte-cli/version.rb +1 -1
- data/lib/zillabyte/cli/apps.rb +1 -1
- data/lib/zillabyte/cli/data.rb +33 -13
- data/lib/zillabyte/runner/app_runner.rb +4 -4
- data/lib/zillabyte/runner/component_operation.rb +2 -3
- data/lib/zillabyte/runner/component_runner.rb +16 -6
- data/lib/zillabyte/runner/multilang_operation.rb +53 -7
- data/zillabyte-cli.gemspec +1 -1
- metadata +3 -3
checksums.yaml
CHANGED
@@ -1,15 +1,15 @@
|
|
1
1
|
---
|
2
2
|
!binary "U0hBMQ==":
|
3
3
|
metadata.gz: !binary |-
|
4
|
-
|
4
|
+
MjFiZWM2YzdkZGQwZTI0OWQzOWVlMjViNTM5YmY0NmVlMDM4MjFjMg==
|
5
5
|
data.tar.gz: !binary |-
|
6
|
-
|
6
|
+
OGQ1NjRiYTQ2M2E0MWMyMzFhOTU3Yzg0MTMxZjJhODdiN2YyNzJkNA==
|
7
7
|
!binary "U0hBNTEy":
|
8
8
|
metadata.gz: !binary |-
|
9
|
-
|
10
|
-
|
11
|
-
|
9
|
+
ZWRlMDM0NDc2NDhjODc2MDhiMDllZGQwOTc0YmE5YWRiYjYxMzg3YzZiNmEz
|
10
|
+
ZjMyYWFmNTM0NTE4NmU4ZmM2ODIwMWNlMWYyNjQ4YWE0OTkxMzMxYTczZTMw
|
11
|
+
MzJkMzE3MDc5MDAzMjc4YTU5MDcyYmJkNjY4NzExNjQ0NjIzOGY=
|
12
12
|
data.tar.gz: !binary |-
|
13
|
-
|
14
|
-
|
15
|
-
|
13
|
+
OTY1NjVlYzYxZTQxMmY1MjQ5MjQxNTcyM2ZlNmI3MDFiYTM2YWNmYTA2NjYy
|
14
|
+
ZmYxYTNmOWYwMDZlNTgwMjI1NzBiM2FhNWVlNzk5ZmEyYTk4NTNiZTFjN2Vj
|
15
|
+
N2Q2ZjhlNjUyYzkxNmUxMDQ0ZjNkYWQzNTVhOGY4NTEwODA3Nzk=
|
data/lib/zillabyte/cli/apps.rb
CHANGED
@@ -364,7 +364,7 @@ class Zillabyte::Command::Apps < Zillabyte::Command::Flows
|
|
364
364
|
# List the apps
|
365
365
|
response = api.apps.list_cycles(app_id, options)
|
366
366
|
# TODO List the sequence number for this app.
|
367
|
-
display "Most recent
|
367
|
+
display "Most recent cycles of the app:" if type.nil?
|
368
368
|
headings = ["Cycle_id", "State", "Start", "End"]
|
369
369
|
rows = response["cycles"]
|
370
370
|
rows = rows.map do |row|
|
data/lib/zillabyte/cli/data.rb
CHANGED
@@ -252,11 +252,19 @@ class Zillabyte::Command::Data < Zillabyte::Command::Base
|
|
252
252
|
alias_command "dataset:download", "data:pull"
|
253
253
|
|
254
254
|
|
255
|
-
# data:pull:s3 ID
|
255
|
+
# data:pull:s3 ID S3_PATH
|
256
256
|
#
|
257
|
-
# Pulls dataset to
|
257
|
+
# Pulls dataset to s3_bucket/s3_key/part***.gz using the given s3_access and s3_secret credentials.
|
258
|
+
# S3_PATH may be given in the following forms:
|
259
|
+
# 1) s3://s3_access:s3_secret@s3_bucket/s3_key
|
260
|
+
# 2) s3://s3_bucket/s3_key: also supply --s3_access and --s3_secret OR set the environment variables S3_ACCESS and S3_SECRET
|
261
|
+
# 3) s3_key: also supply --s3_access, --s3_secret and --s3_bucket OR set the environment variables S3_ACCESS and S3_SECRET and supply --s3_bucket
|
258
262
|
#
|
259
263
|
# --cycle_id [cycle_id] # Retrieve data generated during specified cycle if dataset is associated with an app [default: last cycle]
|
264
|
+
# --s3_access [s3_access_key] # S3 access key
|
265
|
+
# --s3_secret [s3_secret_key] # S3 secret key
|
266
|
+
# --s3_bucket [s3_bucket] # S3 bucket to store data at
|
267
|
+
# --s3_key [s3_file_key] # S3 key to store data at
|
260
268
|
# --output_type OUTPUT_TYPE # Specify an output type i.e. json #HIDDEN
|
261
269
|
#
|
262
270
|
def pull_to_s3
|
@@ -265,17 +273,29 @@ class Zillabyte::Command::Data < Zillabyte::Command::Base
|
|
265
273
|
type = options[:output_type]
|
266
274
|
error("no id given", type) if id.nil?
|
267
275
|
|
268
|
-
|
269
|
-
|
270
|
-
|
271
|
-
|
272
|
-
|
273
|
-
|
274
|
-
|
275
|
-
|
276
|
-
|
277
|
-
|
278
|
-
|
276
|
+
s3_path = options[:s3_path] || shift_argument
|
277
|
+
matches = s3_path.match(/^s3:\/\/([A-Z0-9]{20}):([$-\/:-?{-~!"^_`\[\]\w]{40})@([\w\.]*)\/([-\w\/]*)$/)
|
278
|
+
if !matches.nil?
|
279
|
+
s3_access, s3_secret, s3_bucket, s3_key = matches.captures
|
280
|
+
else
|
281
|
+
matches = s3_path.match(/^s3:\/\/([\w\.]*)\/([-\w\/]*)$/)
|
282
|
+
if !matches.nil?
|
283
|
+
s3_bucket, s3_key = matches.captures
|
284
|
+
else
|
285
|
+
s3_key = s3_path
|
286
|
+
end
|
287
|
+
end
|
288
|
+
s3_access = options[:s3_access] || ENV["S3_ACCESS"] if s3_access == "" or s3_access.nil?
|
289
|
+
s3_secret = options[:s3_secret] || ENV["S3_SECRET"] if s3_secret == "" or s3_secret.nil?
|
290
|
+
s3_bucket = options[:s3_bucket] if s3_bucket == "" or s3_bucket.nil?
|
291
|
+
|
292
|
+
error("No s3 access key or invalid access key provided. Please check that you have entered the access key correctly.", type) if s3_access.nil?
|
293
|
+
error("No s3 access secret key or invalid secret key provided. Please check that you have entered the secret key correctly.", type) if s3_secret.nil?
|
294
|
+
error("No s3 access bucket or invalid bucket provided. Please check that you have entered the bucket correctly.", type) if s3_bucket.nil?
|
295
|
+
error("No s3 file key provided. Please check that you have entered the file key correctly.", type) if s3_key.nil?
|
296
|
+
|
297
|
+
s3_params = {:s3_access_key => s3_access, :s3_secret => s3_secret,
|
298
|
+
:s3_bucket => s3_bucket, :s3_file_key => s3_key}
|
279
299
|
s3_params[:cycle_id] = options[:cycle_id] if options[:cycle_id]
|
280
300
|
|
281
301
|
res = self.api.data.pull_to_s3(id, s3_params)
|
@@ -170,8 +170,8 @@ class Zillabyte::Runner::AppRunner < Zillabyte::Command::Base
|
|
170
170
|
end
|
171
171
|
|
172
172
|
|
173
|
-
def cdisplay(name, message)
|
174
|
-
|
173
|
+
def cdisplay(name, message, useName=true)
|
174
|
+
|
175
175
|
color = @colors[name] || :default
|
176
176
|
if message == ""
|
177
177
|
display ""
|
@@ -182,8 +182,8 @@ class Zillabyte::Runner::AppRunner < Zillabyte::Command::Base
|
|
182
182
|
else
|
183
183
|
lines = message.split("\n")
|
184
184
|
end
|
185
|
-
|
186
|
-
prefix = "#{name} - "
|
185
|
+
|
186
|
+
prefix = useName ? "#{name} - " : ""
|
187
187
|
display "#{prefix}#{lines.first}".colorize(color)
|
188
188
|
lines[1..-1].each do |line|
|
189
189
|
display "#{' '*prefix.size}#{line}".colorize(color)
|
@@ -573,9 +573,8 @@ class Zillabyte::Runner::ComponentOperation
|
|
573
573
|
|
574
574
|
|
575
575
|
# Display a colored, formatted message
|
576
|
-
def self.cdisplay(msg)
|
577
|
-
|
578
|
-
@__tester.cdisplay(@__name, msg)
|
576
|
+
def self.cdisplay(msg, useName=true)
|
577
|
+
@__tester.cdisplay(@__name, msg, useName)
|
579
578
|
end
|
580
579
|
|
581
580
|
|
@@ -185,14 +185,24 @@ class Zillabyte::Runner::ComponentRunner < Zillabyte::Command::Base
|
|
185
185
|
end
|
186
186
|
|
187
187
|
|
188
|
-
|
189
|
-
|
190
|
-
|
191
|
-
|
192
|
-
|
188
|
+
def cdisplay(name, message, useName=true)
|
189
|
+
color = @colors[name] || :default
|
190
|
+
if message == ""
|
191
|
+
display ""
|
192
|
+
else
|
193
|
+
|
194
|
+
if message.is_a?(Array)
|
195
|
+
lines = message
|
193
196
|
else
|
194
|
-
|
197
|
+
lines = message.split("\n")
|
198
|
+
end
|
199
|
+
|
200
|
+
prefix = useName ? "#{name} - " : ""
|
201
|
+
display "#{prefix}#{lines.first}".colorize(color)
|
202
|
+
lines[1..-1].each do |line|
|
203
|
+
display "#{' '*prefix.size}#{line}".colorize(color)
|
195
204
|
end
|
205
|
+
end
|
196
206
|
end
|
197
207
|
|
198
208
|
|
@@ -846,8 +846,26 @@ module Zillabyte; module Runner; class MultilangOperation
|
|
846
846
|
|
847
847
|
# Send a message to all consumers of the operation
|
848
848
|
def self.run_sink()
|
849
|
-
|
849
|
+
columns = @__node["columns"]
|
850
|
+
|
851
|
+
type_map = {
|
852
|
+
"string" => String,
|
853
|
+
"double" => Float,
|
854
|
+
"integer" => Integer
|
855
|
+
}
|
856
|
+
|
857
|
+
col_map = {}
|
858
|
+
columns.each do |hash|
|
859
|
+
key = hash.keys[0]
|
860
|
+
type = hash[key]
|
861
|
+
col_map[key] = type_map[type]
|
862
|
+
end
|
863
|
+
|
864
|
+
|
865
|
+
|
850
866
|
messages = []
|
867
|
+
|
868
|
+
output = @__options["output"]
|
851
869
|
loop do
|
852
870
|
# Read messages
|
853
871
|
msg = read_message(@__consumee[:rd_child])
|
@@ -855,8 +873,36 @@ module Zillabyte; module Runner; class MultilangOperation
|
|
855
873
|
|
856
874
|
# Add row
|
857
875
|
if obj['tuple']
|
858
|
-
|
876
|
+
|
877
|
+
tuple = obj['tuple']
|
859
878
|
display_json = Hash[obj['tuple'].map{|k, v| [truncate_message(k), truncate_message(v)]}].to_json
|
879
|
+
|
880
|
+
if col_map.keys.length != tuple.keys.length
|
881
|
+
cdisplay "Error: invalid keys for sink tuple : Expected #{col_map.keys} , got: #{tuple.keys}"
|
882
|
+
cdisplay("\n \nPress Ctrl-C to exit", false)
|
883
|
+
return
|
884
|
+
end
|
885
|
+
|
886
|
+
# Check tuple columns for valid entry
|
887
|
+
columns_to_check = col_map.length
|
888
|
+
tuple.each_pair do |col,value|
|
889
|
+
types = type_map.each_value.map {|t| value.is_a? t}
|
890
|
+
if col_map.include? col
|
891
|
+
if value.is_a? col_map[col]
|
892
|
+
columns_to_check -= 1
|
893
|
+
else
|
894
|
+
break
|
895
|
+
end
|
896
|
+
end
|
897
|
+
end
|
898
|
+
|
899
|
+
if columns_to_check != 0
|
900
|
+
cdisplay "Error: invalid schema for sink tuple #{display_json}"
|
901
|
+
cdisplay("\n \nPress Ctrl-C to exit", false)
|
902
|
+
return
|
903
|
+
end
|
904
|
+
|
905
|
+
messages << msg
|
860
906
|
if @__options[:interactive]
|
861
907
|
cdisplay "received #{display_json}"
|
862
908
|
end
|
@@ -910,7 +956,7 @@ module Zillabyte; module Runner; class MultilangOperation
|
|
910
956
|
|
911
957
|
# Output table
|
912
958
|
cdisplay("\n#{table.to_s}")
|
913
|
-
cdisplay ""
|
959
|
+
cdisplay "#{messages.length} rows"
|
914
960
|
|
915
961
|
# Write file
|
916
962
|
if output
|
@@ -920,7 +966,7 @@ module Zillabyte; module Runner; class MultilangOperation
|
|
920
966
|
f.close()
|
921
967
|
cdisplay("output written to #{filename}")
|
922
968
|
end
|
923
|
-
cdisplay
|
969
|
+
cdisplay("\n \nPress Ctrl-C to exit", false)
|
924
970
|
end
|
925
971
|
|
926
972
|
|
@@ -1134,9 +1180,9 @@ module Zillabyte; module Runner; class MultilangOperation
|
|
1134
1180
|
|
1135
1181
|
|
1136
1182
|
# Display a colored, formatted message
|
1137
|
-
def self.cdisplay(msg)
|
1138
|
-
@__tester.cdisplay(@__name, msg)
|
1183
|
+
def self.cdisplay(msg, useName=true)
|
1184
|
+
@__tester.cdisplay(@__name, msg, useName)
|
1139
1185
|
end
|
1140
1186
|
|
1141
|
-
|
1142
1187
|
end; end; end
|
1188
|
+
|
data/zillabyte-cli.gemspec
CHANGED
@@ -41,7 +41,7 @@ Getting Started with Zillabyte
|
|
41
41
|
|
42
42
|
(1) Register for an auth token at http://zillabyte.com
|
43
43
|
(2) Log in by running 'zillabyte login' in the command line
|
44
|
-
(3) Build an empty app by running 'zillabyte
|
44
|
+
(3) Build an empty app by running 'zillabyte apps:init'
|
45
45
|
Or... check out our Quick Starts by visiting http://docs.zillabyte.com/
|
46
46
|
|
47
47
|
Questions, comments? Please visit us at http://docs.zillabyte.com
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: zillabyte-cli
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.7
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- zillabyte
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-07-
|
11
|
+
date: 2014-07-23 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rake
|
@@ -257,7 +257,7 @@ licenses:
|
|
257
257
|
metadata: {}
|
258
258
|
post_install_message: ! "\nGetting Started with Zillabyte\n==============================\n\n(1)
|
259
259
|
Register for an auth token at http://zillabyte.com\n(2) Log in by running 'zillabyte
|
260
|
-
login' in the command line\n(3) Build an empty app by running 'zillabyte
|
260
|
+
login' in the command line\n(3) Build an empty app by running 'zillabyte apps:init'\n
|
261
261
|
\ Or... check out our Quick Starts by visiting http://docs.zillabyte.com/\n\nQuestions,
|
262
262
|
comments? Please visit us at http://docs.zillabyte.com\n"
|
263
263
|
rdoc_options: []
|