aspera-cli 4.26.0 → 4.26.2
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
- checksums.yaml.gz.sig +0 -0
- data/CHANGELOG.md +36 -4
- data/CONTRIBUTING.md +2 -5
- data/bin/ascli +2 -2
- data/lib/aspera/agent/direct.rb +1 -1
- data/lib/aspera/agent/factory.rb +4 -0
- data/lib/aspera/agent/httpgw.rb +1 -1
- data/lib/aspera/agent/node.rb +2 -2
- data/lib/aspera/api/aoc.rb +45 -37
- data/lib/aspera/api/cos_node.rb +1 -1
- data/lib/aspera/api/faspex.rb +7 -6
- data/lib/aspera/api/node.rb +9 -9
- data/lib/aspera/ascmd.rb +4 -4
- data/lib/aspera/ascp/installation.rb +13 -6
- data/lib/aspera/assert.rb +17 -13
- data/lib/aspera/cli/context.rb +58 -0
- data/lib/aspera/cli/extended_value.rb +9 -4
- data/lib/aspera/cli/formatter.rb +91 -187
- data/lib/aspera/cli/http.rb +167 -0
- data/lib/aspera/cli/manager.rb +132 -77
- data/lib/aspera/cli/options.schema.yaml +82 -0
- data/lib/aspera/cli/plugins/alee.rb +2 -2
- data/lib/aspera/cli/plugins/aoc.rb +113 -77
- data/lib/aspera/cli/plugins/ats.rb +16 -16
- data/lib/aspera/cli/plugins/base.rb +64 -49
- data/lib/aspera/cli/plugins/config.rb +172 -444
- data/lib/aspera/cli/plugins/console.rb +7 -7
- data/lib/aspera/cli/plugins/cos.rb +2 -2
- data/lib/aspera/cli/plugins/factory.rb +3 -0
- data/lib/aspera/cli/plugins/faspex.rb +22 -22
- data/lib/aspera/cli/plugins/faspex5.rb +68 -49
- data/lib/aspera/cli/plugins/faspio.rb +1 -1
- data/lib/aspera/cli/plugins/httpgw.rb +2 -2
- data/lib/aspera/cli/plugins/node.rb +80 -80
- data/lib/aspera/cli/plugins/orchestrator.rb +21 -26
- data/lib/aspera/cli/plugins/preview.rb +9 -9
- data/lib/aspera/cli/plugins/server.rb +7 -7
- data/lib/aspera/cli/plugins/shares.rb +2 -2
- data/lib/aspera/cli/preset_manager.rb +235 -0
- data/lib/aspera/cli/result.rb +310 -0
- data/lib/aspera/cli/{main.rb → runner.rb} +48 -130
- data/lib/aspera/cli/sync_actions.rb +15 -11
- data/lib/aspera/cli/terminal_formatter.rb +65 -0
- data/lib/aspera/cli/transfer_agent.rb +17 -15
- data/lib/aspera/cli/transfer_progress.rb +6 -6
- data/lib/aspera/cli/version.rb +1 -1
- data/lib/aspera/cli/wizard.rb +5 -6
- data/lib/aspera/command_line_builder.rb +22 -18
- data/lib/aspera/data_repository.rb +4 -0
- data/lib/aspera/dot_container.rb +1 -1
- data/lib/aspera/environment.rb +25 -6
- data/lib/aspera/faspex_gw.rb +1 -1
- data/lib/aspera/formatter_interface.rb +14 -0
- data/lib/aspera/hash_ext.rb +6 -0
- data/lib/aspera/json_rpc.rb +6 -5
- data/lib/aspera/keychain/base.rb +1 -1
- data/lib/aspera/keychain/encrypted_hash.rb +1 -1
- data/lib/aspera/keychain/factory.rb +1 -1
- data/lib/aspera/keychain/macos_security.rb +1 -1
- data/lib/aspera/log.rb +10 -5
- data/lib/aspera/markdown.rb +4 -1
- data/lib/aspera/nagios.rb +2 -2
- data/lib/aspera/oauth/base.rb +5 -5
- data/lib/aspera/oauth/boot.rb +43 -0
- data/lib/aspera/oauth/factory.rb +38 -14
- data/lib/aspera/oauth/web.rb +2 -2
- data/lib/aspera/oauth.rb +1 -0
- data/lib/aspera/persistency_action_once.rb +2 -2
- data/lib/aspera/preview/file_types.rb +4 -0
- data/lib/aspera/products/connect.rb +3 -0
- data/lib/aspera/products/transferd.rb +2 -2
- data/lib/aspera/proxy_auto_config.rb +6 -3
- data/lib/aspera/rest.rb +9 -5
- data/lib/aspera/rest_error_analyzer.rb +4 -0
- data/lib/aspera/rest_list.rb +10 -3
- data/lib/aspera/schema/IBM Aspera Faspex API-5.0-enhanced.yaml +62811 -0
- data/lib/aspera/schema/IBM Aspera on Cloud API-0.2.6-enhanced.yaml +9637 -0
- data/lib/aspera/schema/async_tables.yaml +361 -0
- data/lib/aspera/schema/documentation.rb +107 -0
- data/lib/aspera/schema/reader.rb +75 -0
- data/lib/aspera/schema/registry.rb +70 -0
- data/lib/aspera/secret_hider.rb +4 -0
- data/lib/aspera/sync/conf.schema.yaml +0 -26
- data/lib/aspera/sync/database.rb +14 -10
- data/lib/aspera/sync/operations.rb +14 -10
- data/lib/aspera/temp_file_manager.rb +4 -0
- data/lib/aspera/transfer/faux_file.rb +1 -1
- data/lib/aspera/transfer/parameters.rb +4 -4
- data/lib/aspera/transfer/resumer.rb +2 -2
- data/lib/aspera/transfer/spec.rb +3 -3
- data/lib/aspera/transfer/spec.schema.yaml +18 -9
- data/lib/aspera/transfer/uri.rb +1 -1
- data/lib/aspera/uri_reader.rb +1 -1
- data/lib/aspera/yaml.rb +4 -2
- data.tar.gz.sig +0 -0
- metadata +28 -15
- metadata.gz.sig +1 -1
- data/lib/aspera/transfer/spec_doc.rb +0 -76
|
@@ -29,7 +29,7 @@ module Aspera
|
|
|
29
29
|
|
|
30
30
|
# @return the path to folder where SDK is or should be installed
|
|
31
31
|
def sdk_directory
|
|
32
|
-
Aspera.assert(!@sdk_dir.nil
|
|
32
|
+
Aspera.assert(!@sdk_dir.nil?, 'SDK path was not initialized')
|
|
33
33
|
@sdk_dir
|
|
34
34
|
end
|
|
35
35
|
|
|
@@ -52,7 +52,7 @@ module Aspera
|
|
|
52
52
|
end
|
|
53
53
|
end
|
|
54
54
|
end
|
|
55
|
-
Aspera.assert(!result.nil
|
|
55
|
+
Aspera.assert(!result.nil?, 'Port not found in daemon logs')
|
|
56
56
|
Log.log.debug{"Got port #{result} from log"}
|
|
57
57
|
return result
|
|
58
58
|
end
|
|
@@ -10,8 +10,11 @@ module URI
|
|
|
10
10
|
# save original method that finds proxy in URI::Generic, it uses env var http_proxy
|
|
11
11
|
alias_method :find_proxy_orig, :find_proxy
|
|
12
12
|
class << self
|
|
13
|
+
# Register a custom proxy finder block
|
|
14
|
+
# @yieldparam url [String] The URL to find proxy for
|
|
15
|
+
# @yieldreturn [String, nil] Proxy URL or nil to fallback to original method
|
|
13
16
|
def register_proxy_finder
|
|
14
|
-
Aspera.assert(block_given
|
|
17
|
+
Aspera.assert(block_given?, 'block required for register_proxy_finder')
|
|
15
18
|
# overload the method in URI : call user's provided block and fallback to original method
|
|
16
19
|
define_method(:find_proxy){ |env_vars = ENV| yield(to_s) || find_proxy_orig(env_vars)}
|
|
17
20
|
end
|
|
@@ -113,12 +116,12 @@ END_OF_JAVASCRIPT
|
|
|
113
116
|
parts = item.strip.split
|
|
114
117
|
case parts.shift
|
|
115
118
|
when 'DIRECT'
|
|
116
|
-
Aspera.assert(parts.empty
|
|
119
|
+
Aspera.assert(parts.empty?, 'DIRECT has no param')
|
|
117
120
|
Log.log.debug('ignoring proxy DIRECT')
|
|
118
121
|
when 'PROXY'
|
|
119
122
|
addr_port = parts.shift
|
|
120
123
|
Aspera.assert_type(addr_port, String)
|
|
121
|
-
Aspera.assert(parts.empty
|
|
124
|
+
Aspera.assert(parts.empty?, 'PROXY shall have one param')
|
|
122
125
|
begin
|
|
123
126
|
# PAC proxy addresses are <host>:<port>
|
|
124
127
|
if /:[0-9]+$/.match?(addr_port)
|
data/lib/aspera/rest.rb
CHANGED
|
@@ -30,6 +30,10 @@ module Aspera
|
|
|
30
30
|
# @param download_partial_suffix [String] suffix for partial download
|
|
31
31
|
# @param session_cb [lambda] lambda called on new HTTP session. Takes the Net::HTTP as arg. Used to change parameters on creation.
|
|
32
32
|
# @param progress_bar [Object] progress bar object called for file transfer
|
|
33
|
+
#
|
|
34
|
+
# @!method self.instance
|
|
35
|
+
# Returns the singleton instance of RestParameters
|
|
36
|
+
# @return [RestParameters] the singleton instance
|
|
33
37
|
class RestParameters
|
|
34
38
|
include Singleton
|
|
35
39
|
|
|
@@ -102,7 +106,7 @@ module Aspera
|
|
|
102
106
|
when Hash
|
|
103
107
|
URI.encode_www_form(h_to_query_array(query))
|
|
104
108
|
when Array
|
|
105
|
-
Aspera.assert(query.all?{ |i| i.is_a?(Array) && i.length.eql?(2)}
|
|
109
|
+
Aspera.assert(query.all?{ |i| i.is_a?(Array) && i.length.eql?(2)}, 'Query must be array of arrays of 2 elements')
|
|
106
110
|
URI.encode_www_form(query) # remove nil values
|
|
107
111
|
else Aspera.error_unexpected_value(query.class){'query type'}
|
|
108
112
|
end.gsub('%5B%5D=', '[]=')
|
|
@@ -166,7 +170,7 @@ module Aspera
|
|
|
166
170
|
next unless url_match
|
|
167
171
|
url = url_match[1]
|
|
168
172
|
# Extract parameters after the URL
|
|
169
|
-
params_str = link_part[url_match.end(0)
|
|
173
|
+
params_str = link_part[url_match.end(0)..]
|
|
170
174
|
# Check if this link has the specified rel (with or without quotes, case insensitive)
|
|
171
175
|
next unless /;\s*rel\s*=\s*"?#{Regexp.escape(rel)}"?/i.match?(params_str)
|
|
172
176
|
return url
|
|
@@ -316,7 +320,7 @@ module Aspera
|
|
|
316
320
|
# default is no auth
|
|
317
321
|
@auth_params = auth
|
|
318
322
|
Aspera.assert_type(@auth_params, Hash)
|
|
319
|
-
Aspera.assert(@auth_params.key?(:type)
|
|
323
|
+
Aspera.assert(@auth_params.key?(:type), 'no auth type defined')
|
|
320
324
|
@not_auth_codes = not_auth_codes
|
|
321
325
|
Aspera.assert_type(@not_auth_codes, Array)
|
|
322
326
|
# persistent session
|
|
@@ -333,7 +337,7 @@ module Aspera
|
|
|
333
337
|
# @return the OAuth object (create, or cached if already created)
|
|
334
338
|
def oauth
|
|
335
339
|
if @oauth.nil?
|
|
336
|
-
Aspera.assert(@auth_params[:type].eql?(:oauth2)
|
|
340
|
+
Aspera.assert(@auth_params[:type].eql?(:oauth2), 'no OAuth defined')
|
|
337
341
|
oauth_parameters = @auth_params.reject{ |k, _v| k.eql?(:type)}
|
|
338
342
|
Log.dump(:oauth_parameters, oauth_parameters)
|
|
339
343
|
@oauth = OAuth::Factory.instance.create(**oauth_parameters)
|
|
@@ -374,7 +378,7 @@ module Aspera
|
|
|
374
378
|
Log.dump(:headers, headers, level: :trace1)
|
|
375
379
|
Aspera.assert_type(subpath, String)
|
|
376
380
|
# We must have a way to check return code
|
|
377
|
-
Aspera.assert(exception || !ret.eql?(:data))
|
|
381
|
+
Aspera.assert(exception || !ret.eql?(:data), 'ret: :data requires exception handler')
|
|
378
382
|
if headers.nil?
|
|
379
383
|
headers = @headers.clone
|
|
380
384
|
else
|
|
@@ -7,6 +7,10 @@ require 'net/http'
|
|
|
7
7
|
|
|
8
8
|
module Aspera
|
|
9
9
|
# analyze error codes returned by REST calls and raise ruby exception
|
|
10
|
+
#
|
|
11
|
+
# @!method self.instance
|
|
12
|
+
# Returns the singleton instance of RestErrorAnalyzer
|
|
13
|
+
# @return [RestErrorAnalyzer] the singleton instance
|
|
10
14
|
class RestErrorAnalyzer
|
|
11
15
|
include Singleton
|
|
12
16
|
|
data/lib/aspera/rest_list.rb
CHANGED
|
@@ -50,6 +50,7 @@ module Aspera
|
|
|
50
50
|
# @return [Array<(Array<Hash>, Integer)>] items, total_count
|
|
51
51
|
def list_entities_limit_offset_total_count(
|
|
52
52
|
entity:,
|
|
53
|
+
operation: 'GET',
|
|
53
54
|
items_key: nil,
|
|
54
55
|
query: nil
|
|
55
56
|
)
|
|
@@ -67,9 +68,15 @@ module Aspera
|
|
|
67
68
|
# Merge default parameters, by default 100 per page
|
|
68
69
|
query = {'limit'=> PER_PAGE_DEFAULT}.merge(query)
|
|
69
70
|
total_count = nil
|
|
71
|
+
call_args = {
|
|
72
|
+
operation: operation,
|
|
73
|
+
subpath: entity,
|
|
74
|
+
query: query,
|
|
75
|
+
headers: {'Accept' => Mime::JSON}
|
|
76
|
+
}
|
|
70
77
|
loop do
|
|
71
78
|
query['offset'] = offset
|
|
72
|
-
page_result =
|
|
79
|
+
page_result = call(**call_args)
|
|
73
80
|
Aspera.assert_type(page_result[items_key], Array)
|
|
74
81
|
result.concat(page_result[items_key])
|
|
75
82
|
# Reach the limit set by user ?
|
|
@@ -97,7 +104,7 @@ module Aspera
|
|
|
97
104
|
# @param query [Hash] Additional query parameters (Default: `:default`)
|
|
98
105
|
def lookup_entity_by_field(entity:, value:, field: 'name', items_key: nil, query: :default)
|
|
99
106
|
if query.eql?(:default)
|
|
100
|
-
Aspera.
|
|
107
|
+
Aspera.assert_values(field, ['name']){'Default query field'}
|
|
101
108
|
query = {'q'=> value}
|
|
102
109
|
end
|
|
103
110
|
lookup_entity_generic(entity: entity, field: field, value: value){list_entities_limit_offset_total_count(entity: entity, items_key: items_key, query: query).first}
|
|
@@ -113,7 +120,7 @@ module Aspera
|
|
|
113
120
|
# @return [Hash] The unique matching object.
|
|
114
121
|
# @raise [Cli::BadIdentifier] If 0 or >1 matches are found.
|
|
115
122
|
def lookup_entity_generic(entity:, value:, field: 'name')
|
|
116
|
-
Aspera.assert(block_given
|
|
123
|
+
Aspera.assert(block_given?, 'block required for lookup_entity_generic')
|
|
117
124
|
found = yield
|
|
118
125
|
Aspera.assert_array_all(found, Hash)
|
|
119
126
|
found = found.select{ |i| i[field].eql?(value)}
|