cantemo-portal-agent 1.1.1 → 1.2.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: b1a098feb7ef559fc883d25d942ee7f501599684
4
- data.tar.gz: 2b90e43a0ccdd4ad7e2283b8ddb09495a15998e8
3
+ metadata.gz: 6d670e7ef575f0152b7bf5d77d2763de6a64e363
4
+ data.tar.gz: e76ed955968ebd2182b49e29badbbff6e7b606bd
5
5
  SHA512:
6
- metadata.gz: 853bd438e02b10f756fb8524671c2bfa3884bf6d8fe4cfde3b189117d8681deb5f230b290ca28df524b1ce7e9ede16d07ce13044a38ac97d1ac611beea1c57f6
7
- data.tar.gz: '078cc907795490344fa612380e21fc4f240ab6edbbf4118d7d2063ea438796564e908352c525106e865cd215d3d011e5efc7763b78d990793fb503ad2269a855'
6
+ metadata.gz: 4e52761626f536e564d71856e361f16b3d2d1418da3e464723256ffad5459cf512a67b684e9628da912c78031ca520e407748881c1804eb79123cac37846c917
7
+ data.tar.gz: f8a9a3ba1f3621feb3e8958c51a0068bcaf6e81264bca425605e1d2ade8fe75adcf3891a04a2ae353296138401457b330ce59278650a54491d99e93ecc6790af
@@ -0,0 +1 @@
1
+ require_relative('watch_folders')
@@ -51,7 +51,7 @@ args[:config_file_path].map! { |v| File.expand_path(v) } if config_file_path.is_
51
51
 
52
52
  command = ARGV.first.dup
53
53
 
54
- control_command_present = command && begin
54
+ daemon_control_command_present = command && begin
55
55
  command.downcase!
56
56
  %w(start stop restart run zap killall status).include?(command)
57
57
  end
@@ -68,7 +68,7 @@ if command
68
68
  end
69
69
 
70
70
 
71
- daemonize = (control_command_present && %(start restart).include?(command)) || args[:daemonize]
71
+ daemonize = (daemon_control_command_present && %w(start restart).include?(command)) || args[:daemonize]
72
72
 
73
73
  # puts "#{__FILE__}:#{__LINE__ } #{args}"
74
74
  # next_command = ARGV.shift
@@ -76,4 +76,5 @@ daemonize = (control_command_present && %(start restart).include?(command)) || a
76
76
 
77
77
  class Watcher < Envoi::Mam::Cantemo::Agent::WatchFolderManager; end
78
78
  # daemonize ? Watcher.run_as_daemon(args, { force: true }) : Watcher.run(args)
79
- daemonize ? Watcher.run_as_daemon(args) : Watcher.run(args)
79
+ # daemon_control_command_present ? Watcher.run_as_daemon(args) : Watcher.run(args)
80
+ Watcher.run_as_daemon(args)
@@ -1,7 +1,7 @@
1
1
  module Cantemo
2
2
  module Portal
3
3
  class Agent
4
- VERSION = '1.1.1'.freeze
4
+ VERSION = '1.2.0'.freeze
5
5
  end
6
6
  end
7
7
  end
@@ -12,7 +12,7 @@ module Envoi
12
12
 
13
13
  def initialize(args = { })
14
14
  @initial_args = args.clone
15
- @config = args[:config]
15
+ @config = args[:config] || { }
16
16
  @notifiers = args[:notifiers] || [ ]
17
17
 
18
18
  @dry_run = args.fetch(:dry_run, false)
@@ -80,29 +80,36 @@ module Envoi
80
80
  { success: success }
81
81
  end
82
82
 
83
- def self.load_from_config_file(args)
83
+ def self.load_config_from_file(args)
84
84
  config_file_path = args[:config_file_path]
85
+ config_file_path = File.expand_path(config_file_path)
85
86
  config_file_path = config_file_path.find { |v| File.exists?(v) } if config_file_path.is_a?(Array)
86
- abort("Missing Config File. '#{config_file_path}'") unless config_file_path && !config_file_path.empty? && File.exists?(config_file_path)
87
+ raise "Missing Config File. '#{config_file_path}'" unless config_file_path && !config_file_path.empty? && File.exists?(config_file_path)
87
88
 
88
89
  begin
89
90
  config = JSON.parse(File.read(config_file_path))
90
91
  rescue => e
91
- abort("Config File Failed to Load. '#{$!}'")
92
+ raise "Failed to Load Config File. '#{config_file_path}' '#{e.message}'"
92
93
  end
93
- args[:config] = config
94
-
95
- self.new(args.merge({ :config => config }))
94
+ config
96
95
  end
97
96
 
98
- def self.load_from_config_service(args)
97
+ def self.load_config_from_service(args)
99
98
  args_out = { }
100
99
  args_out[:app_id] = args[:config_service_app_id]
101
100
  args_out[:token] = args[:config_service_app_token]
102
101
  args_out[:api_url] = args[:config_service_app_url]
103
102
  config = Envoi::Mam::Agent::ConfigServiceClient.config_get(args_out)
104
- args[:config] = config
103
+ config
104
+ end
105
105
 
106
+ def self.load_from_config_file(args)
107
+ config = load_config_from_file(args)
108
+ self.new(args.merge({ :config => config }))
109
+ end
110
+
111
+ def self.load_from_config_service(args)
112
+ config = load_config_from_service(args)
106
113
  self.new(args.merge({ :config => config }))
107
114
  end
108
115
 
@@ -57,6 +57,4 @@ args[:file_path] ||= ARGV.shift
57
57
  args[:destination_path] ||= ARGV.shift unless ARGV.empty?
58
58
 
59
59
  agent = Envoi::Mam::Cantemo::Agent.load_config_and_init(args)
60
-
61
- exit
62
60
  agent.run_operation
@@ -1,4 +1,4 @@
1
- if (ARGV.first || '').tr('_-', '') == 'watchfolders'
1
+ if [ 'watchfolder', 'watchfolders'].include?((ARGV.first || '').tr('_-', ''))
2
2
  require 'cantemo/portal/agent/cli/commands/watch_folders'
3
3
  else
4
4
  require 'envoi/mam/agent/cli/commands/cantemo-agent'
@@ -6,83 +6,89 @@ require 'vidispine/api/utilities'
6
6
  module Envoi
7
7
 
8
8
  module Mam
9
-
9
+
10
10
  module Cantemo
11
11
 
12
12
  class Agent < Envoi::Mam::Agent
13
-
14
- DEFAULT_SHAPE_TAG = 'original'
15
- DEFAULT_DESTINATION_PATH = '.'
13
+
14
+ DEFAULT_SHAPE_TAG = 'original'
15
+ DEFAULT_DESTINATION_PATH = '.'
16
16
  DEFAULT_PRESERVE_FILE_PATH = true
17
17
 
18
18
  attr_accessor :default_aspera_ascp_args,
19
19
  :default_aspera_ascp_path,
20
20
  :default_vidispine_shape_tag,
21
21
  :default_preserve_file_path
22
-
22
+
23
23
  def after_initialize
24
- args = initial_args
25
- @default_aspera_ascp_path = args[:default_aspera_ascp_path]
26
- @default_aspera_args = args.fetch(:default_ascp_args, Envoi::Mam::Agent::TransferClient::Aspera::DEFAULT_ASCP_ARGS)
24
+ args = initial_args
25
+ @default_aspera_ascp_path = args[:default_aspera_ascp_path]
26
+ @default_aspera_args = args.fetch(:default_ascp_args, Envoi::Mam::Agent::TransferClient::Aspera::DEFAULT_ASCP_ARGS)
27
27
  @default_preserve_file_path = args.fetch(:default_preserve_file_path, DEFAULT_PRESERVE_FILE_PATH)
28
28
  end
29
-
30
- def dry_run?; @dry_run end
31
-
29
+
30
+ def dry_run?;
31
+ @dry_run
32
+ end
33
+
32
34
  def agent_config
33
- @agent_config ||= config['cantemo'] || config['vidispine'] || { }
35
+ @agent_config ||= config['cantemo'] || config || {}
34
36
  end
35
-
36
- def initialize_api_client(args = { })
37
- api_config = agent_config
37
+
38
+ def agent_config_storages
39
+ agent_config['storages']
40
+ end
41
+
42
+ def initialize_api_client(args = {})
43
+ api_config = agent_config
38
44
  @api_client = args[:api_client] || begin
39
-
40
- api_host = api_config['host']
41
- api_port = api_config['port']
42
- api_host_use_ssl = api_config['ssl']
43
- api_username = api_config['username']
44
- api_password = api_config['password']
45
- api_auth_token = api_config['api_auth_token']
46
- api_base_path = api_config['api_base_path']
45
+
46
+ api_host = api_config['host']
47
+ api_port = api_config['port']
48
+ api_host_use_ssl = api_config['ssl']
49
+ api_username = api_config['username']
50
+ api_password = api_config['password']
51
+ api_auth_token = api_config['api_auth_token']
52
+ api_base_path = api_config['api_base_path']
47
53
  api_default_query_data = api_config['default_query_data']
48
54
 
49
55
  api_url = api_config['url'] || api_config['uri']
50
56
  if api_url
51
- api_uri = URI(api_url)
52
- api_host ||= api_uri.host
53
- api_port ||= api_uri.port
57
+ api_uri = URI(api_url)
58
+ api_host ||= api_uri.host
59
+ api_port ||= api_uri.port
54
60
  api_userinfo = api_uri.userinfo
55
61
  if api_userinfo
56
62
  _api_username, _api_password = api_userinfo.split(':')
57
- api_username ||= _api_username
58
- api_password ||= _api_password
63
+ api_username ||= _api_username
64
+ api_password ||= _api_password
59
65
  end
60
- api_host_use_ssl = api_uri.scheme == 'https' if api_host_use_ssl.nil?
61
- api_uri_query = api_uri.query
66
+ api_host_use_ssl = api_uri.scheme == 'https' if api_host_use_ssl.nil?
67
+ api_uri_query = api_uri.query
62
68
  api_default_query_data ||= Hash[api_uri_query.split('&').map { |kp| kp.split('=') }]
63
- api_base_path ||= api_uri.path
69
+ api_base_path ||= api_uri.path
64
70
  end
65
71
 
66
- api_port ||= (api_host_use_ssl ? 443 : 80)
72
+ api_port ||= (api_host_use_ssl ? 443 : 80)
67
73
  api_base_path ||= '/'
68
74
 
69
- api_endpoint_prefix = 'VSAPI'
75
+ api_endpoint_prefix = 'VSAPI'
70
76
  api_noauth_endpoint_prefix = 'APInoauth'
71
77
 
72
- client_args = { }
73
- client_args[:http_host_address] = api_host if api_host
74
- client_args[:http_host_port] = api_port if api_port
75
- client_args[:http_host_use_ssl] = api_host_use_ssl if api_host_use_ssl
76
- client_args[:username] = api_username if api_username
77
- client_args[:password] = api_password if api_password
78
- client_args[:default_base_path] = api_base_path if api_base_path
79
- client_args[:default_query_data] = api_default_query_data if api_default_query_data
80
- client_args[:api_endpoint_prefix] = api_endpoint_prefix
78
+ client_args = {}
79
+ client_args[:http_host_address] = api_host if api_host
80
+ client_args[:http_host_port] = api_port if api_port
81
+ client_args[:http_host_use_ssl] = api_host_use_ssl if api_host_use_ssl
82
+ client_args[:username] = api_username if api_username
83
+ client_args[:password] = api_password if api_password
84
+ client_args[:default_base_path] = api_base_path if api_base_path
85
+ client_args[:default_query_data] = api_default_query_data if api_default_query_data
86
+ client_args[:api_endpoint_prefix] = api_endpoint_prefix
81
87
  client_args[:api_noauth_endpoint_prefix] = api_noauth_endpoint_prefix
82
88
 
83
89
  if api_auth_token
84
90
  # Cantemo Portal supports an auth token for authentication, replace basic auth with auth-token
85
- client_args[:authorization_header_key] = 'Auth-Token'
91
+ client_args[:authorization_header_key] = 'Auth-Token'
86
92
  client_args[:authorization_header_value] = api_auth_token
87
93
  end
88
94
 
@@ -91,39 +97,38 @@ module Envoi
91
97
  begin
92
98
  _client.version
93
99
  rescue => e
94
- e.message = "Error connecting to Portal: #{e.message}"
95
- raise e
100
+ raise "Error connecting to Portal: #{e.message}"
96
101
  end
97
102
 
98
103
  _client
99
104
  end
100
105
 
101
106
  @default_vidispine_shape_tag = args[:default_shape_tag] || api_config['default_shape_tag'] || api_config['shape_tag'] || DEFAULT_SHAPE_TAG
102
-
107
+
103
108
  end
104
-
109
+
105
110
  def item_get_shape_by_tag(item_id, shape_tag)
106
111
  item_shapes_get_response = api_client.item_shapes_get(:item_id => item_id, :tag => shape_tag)
107
- shape_id = item_shapes_get_response['uri'].first
112
+ shape_id = item_shapes_get_response['uri'].first
108
113
  end
109
114
 
110
- def download(args = { })
115
+ def download(args = {})
111
116
 
112
- item_id = args[:item_id]
117
+ item_id = args[:item_id]
113
118
  shape_id = args[:shape_id]
114
119
  unless shape_id && !shape_id.empty?
115
120
  shape_tag = args[:shape_tag] || default_vidispine_shape_tag
116
- shape_id = item_get_shape_by_tag(item_id, shape_tag)
121
+ shape_id = item_get_shape_by_tag(item_id, shape_tag)
117
122
  end
118
123
 
119
- logger.info { "Getting file path for Item ID: #{item_id} Shape ID: #{shape_id}"}
124
+ logger.info { "Getting file path for Item ID: #{item_id} Shape ID: #{shape_id}" }
120
125
  item_shape_get_response = api_client.item_shape_get(:item_id => item_id, :shape_id => shape_id)
121
126
 
122
127
  files = item_shape_get_response['containerComponent']['file']
123
- logger.debug { "Files: #{files}"}
128
+ logger.debug { "Files: #{files}" }
124
129
 
125
130
  # file = files.first
126
- files = [ files.first ] # just do the first file for now
131
+ files = [files.first] # just do the first file for now
127
132
  files.each do |file|
128
133
  begin
129
134
  download_file(args, file)
@@ -135,13 +140,13 @@ module Envoi
135
140
  end
136
141
 
137
142
  def download_file(args, file)
138
- logger.debug { "File: #{file}"}
143
+ logger.debug { "File: #{file}" }
139
144
  transfer_type = args[:transfer_type]
140
145
 
141
146
  file_storage_id = file['storage']
142
- file_path = file['path']
147
+ file_path = file['path']
143
148
 
144
- file_storage_config = agent_config['storages'][file_storage_id]
149
+ file_storage_config = agent_config_storages[file_storage_id]
145
150
 
146
151
  unless file_storage_config && !file_storage_config.empty?
147
152
  raise Exception, "No configuration found for storage '#{file_storage_id}'"
@@ -151,8 +156,8 @@ module Envoi
151
156
  preserve_path = args.fetch(:preserve_path, file_storage_config.fetch('preserve_path', default_preserve_file_path))
152
157
 
153
158
  destination_path = args[:destination_path] || file_storage_config['destination_path'] || DEFAULT_DESTINATION_PATH
154
- relative_path = preserve_path ? File.dirname(file_path) : nil
155
- relative_path = nil if relative_path == '.'
159
+ relative_path = preserve_path ? File.dirname(file_path) : nil
160
+ relative_path = nil if relative_path == '.'
156
161
 
157
162
  target_path = relative_path ? File.join(destination_path, relative_path) : destination_path
158
163
  target_path = target_path[0..-1] if target_path.start_with?('/') && !destination_path.start_with?('/')
@@ -168,15 +173,15 @@ module Envoi
168
173
  if (transfer_type.empty? || transfer_type == :s3) && (s3_config && !s3_config.empty?)
169
174
  target_path = File.expand_path(target_path) if target_path == '.'
170
175
  target_path = File.join(target_path, File.basename(file_path))
171
- client = Envoi::Mam::Agent::TransferClient::S3.new(agent: self)
176
+ client = Envoi::Mam::Agent::TransferClient::S3.new(agent: self)
172
177
  return client.download(s3_config, file_path, target_path)
173
178
  end
174
179
 
175
180
  logger.warn { "No Supported TransferClient Configuration#{transfer_type && !transfer_type.empty? ? " for transfer type '#{transfer_type}' " : ''}Found in Storage Configuration." }
176
181
  end
177
182
 
178
- def upload(args = { })
179
- _response = { }
183
+ def upload(args = {})
184
+ _response = {}
180
185
 
181
186
  file_path = args[:file_path]
182
187
  raise ArgumentError, "Path not found: '#{file_path}'" unless File.exists?(file_path)
@@ -184,16 +189,16 @@ module Envoi
184
189
  if File.directory?(file_path)
185
190
  # Non-recursive directory upload
186
191
  file_paths = Dir.glob(File.join(file_path, '*.*'))
187
- logger.debug { "File Paths: #{file_paths}"}
188
- file_paths.map { |fp| upload(args.merge(file_path: fp))}
192
+ logger.debug { "File Paths: #{file_paths}" }
193
+ file_paths.map { |fp| upload(args.merge(file_path: fp)) }
189
194
  return file_paths
190
195
  end
191
196
  logger.debug { "Preparing to upload '#{file_path}'" }
192
197
 
193
- transfer_type = args[:transfer_type] || ''
194
- storage_id = args[:storage_id]
195
- vidispine_storage_config = agent_config['storages'][storage_id]
196
-
198
+ transfer_type = args[:transfer_type] || ''
199
+ storage_id = args[:storage_id]
200
+ vidispine_storage_config = agent_config_storages[storage_id]
201
+
197
202
  unless vidispine_storage_config && !vidispine_storage_config.empty?
198
203
  raise "No configuration found for storage '#{storage_id}'"
199
204
  end
@@ -201,37 +206,37 @@ module Envoi
201
206
  should_import_file = args.fetch(:import_file, vidispine_storage_config.fetch('import', true))
202
207
 
203
208
  should_preserve_path = args.fetch(:preserve_path, vidispine_storage_config.fetch('preserve_path', default_preserve_file_path))
204
-
209
+
205
210
  destination_path = args[:destination_path] || vidispine_storage_config['destination_path'] || '/'
206
- relative_path = should_preserve_path ? File.dirname(file_path) : nil
207
- relative_path = File.expand_path(relative_path) if relative_path == '.'
208
-
211
+ relative_path = should_preserve_path ? File.dirname(file_path) : nil
212
+ relative_path = File.expand_path(relative_path) if relative_path == '.'
213
+
209
214
  target_path = relative_path ? File.join(destination_path, relative_path) : destination_path
210
215
  target_path = target_path[0..-1] if target_path.start_with?('/') && !destination_path.start_with?('/')
211
-
212
-
216
+
217
+
213
218
  # upload file
214
219
 
215
220
  transfer_response = begin
216
- response = nil
221
+ response = nil
217
222
  aspera_config = vidispine_storage_config['aspera']
218
223
  begin
219
224
  if (transfer_type.empty? || transfer_type == :aspera) && (aspera_config && !aspera_config.empty?)
220
- client = Envoi::Mam::Agent::TransferClient::Aspera.new(agent: self)
225
+ client = Envoi::Mam::Agent::TransferClient::Aspera.new(agent: self)
221
226
  response = client.upload(aspera_config, file_path, target_path)
222
227
  end
223
228
  rescue => e
224
229
  logger.error { "Aspera Transfer Failed. '#{e.message}'\n#{e.backtrace.first}" }
225
230
  end
226
-
231
+
227
232
  s3_config = vidispine_storage_config['s3']
228
233
  begin
229
234
  if !response && (transfer_type.empty? || transfer_type == :s3) && (s3_config && !s3_config.empty?)
230
235
  _target_path = target_path
231
236
  _target_path = File.expand_path(_target_path) if target_path == '.'
232
237
  _target_path = File.join(_target_path, File.basename(file_path))
233
- client = Envoi::Mam::Agent::TransferClient::S3.new(agent: self)
234
- response = client.upload(s3_config, file_path, _target_path)
238
+ client = Envoi::Mam::Agent::TransferClient::S3.new(agent: self)
239
+ response = client.upload(s3_config, file_path, _target_path)
235
240
  end
236
241
  rescue => e
237
242
  logger.error { "S3 Transfer Failed. '#{e.message}'" }
@@ -263,9 +268,9 @@ module Envoi
263
268
 
264
269
 
265
270
  ### IMPORT - START
266
- import_file_args = args.dup
271
+ import_file_args = args.dup
267
272
  import_file_args[:response_object] = _response
268
- import_file_args[:target_path] = target_path
273
+ import_file_args[:target_path] = target_path
269
274
  import_file(import_file_args)
270
275
  _response[:success] = true unless _response[:success] === false
271
276
  ### IMPORT - END
@@ -277,31 +282,46 @@ module Envoi
277
282
  return _response
278
283
  end
279
284
 
280
- def import_file(args = { })
281
- _response = args[:response_object] || { }
282
-
283
- file_path = args[:file_path]
285
+ # @param [Hash] args
286
+ # @option args [String] :file_path
287
+ # @option args [Hash] :import_args ({})
288
+ # @option args [Hash] :import_options ({})
289
+ # @option args [String] :item_id
290
+ # @option args [Hash] :response_object ({})
291
+ # @option args [String] :shape_id (@default_vidispine_shape_tag)
292
+ # @option args [String] :storage_id
293
+ # @option args [String] :target_path
294
+ #
295
+ # @return [Hash{ :success->Boolean, :file_create_response->{}, :import_response->{} }]
296
+ def import_file(args = {})
297
+ _response = args[:response_object] || {}
298
+
299
+ file_path = args[:file_path]
284
300
  storage_id = args[:storage_id]
285
301
 
286
302
  target_path = args[:target_path]
287
303
 
288
- item_id = args[:item_id]
304
+ item_id = args[:item_id]
289
305
  shape_tag = args[:shape_tag] || default_vidispine_shape_tag
290
306
 
307
+ import_args_in = args[:import_args]
308
+ import_options = args[:import_options] || {}
309
+
310
+
291
311
  # attach file to item as shape
292
312
  path_on_storage = File.join(target_path, File.basename(file_path))
293
313
  path_on_storage = path_on_storage[1..-1] if path_on_storage.start_with?('/')
294
314
  # file_create_response = api_client.storage_file_create(storage_id: storage_id,
295
315
  # path: path_on_storage, state: 'CLOSED')
296
- file_create_response = api_client.storage_file_get_or_create(storage_id, path_on_storage, { :extended_response => true })
316
+ file_create_response = api_client.storage_file_get_or_create(storage_id, path_on_storage, { :extended_response => true })
297
317
  _response[:file_create_response] = file_create_response
298
- file = file_create_response[:file]
318
+ file = file_create_response[:file]
299
319
 
300
320
  file_id = file['id']
301
321
 
302
322
  unless file_id
303
323
  _file = file.dup
304
- _file.keep_if { |k,v| v }
324
+ _file.keep_if { |k, v| v }
305
325
  logger.error { "Failed to create file. #{_file}" }
306
326
  _response[:success] = false
307
327
  return _response
@@ -311,23 +331,28 @@ module Envoi
311
331
 
312
332
  if item
313
333
  shape = (item['shape'] || []).first
314
- msg = "File already exist and is associated to item #{item['id']} as shape #{shape['id']}."
334
+ msg = "File already exist and is associated to item #{item['id']} as shape #{shape['id']}."
315
335
  logger.warn { "#{msg} #{file}" }
316
- _response[:error] = { :message => msg }
336
+ _response[:error] = { :message => msg }
317
337
  _response[:success] = false
318
338
  return _response
319
339
  end
320
340
 
321
341
  if item_id
322
342
  item_shape_import_response = api_client.item_shape_import(item_id: item_id,
323
- tag: shape_tag, fileId: file_id)
343
+ tag: shape_tag, fileId: file_id)
324
344
 
325
345
 
326
346
  else
327
- item_shape_import_response = api_client.item_add_using_file_path(storage_id: storage_id,
328
- file_path: path_on_storage,
329
- fileId: file_id,
330
- storage_path_map: { '/' => storage_id })
347
+ import_args = {
348
+ storage_id: storage_id,
349
+ file_path: path_on_storage,
350
+ fileId: file_id,
351
+ storage_path_map: { '/' => storage_id }
352
+ }
353
+ import_args.merge!(import_args_in) if import_args_in
354
+
355
+ item_shape_import_response = api_client.item_add_using_file_path(import_args, import_options)
331
356
  end
332
357
  _response[:import_response] = item_shape_import_response
333
358
 
@@ -339,7 +364,6 @@ module Envoi
339
364
  end
340
365
 
341
366
 
342
-
343
367
  def ingest_file
344
368
  # 1) export ASPERA_SCP_TOKEN="ATB3_AEA9dUI5dd2u1k8XBMVD0qInR-Lyylkz8AylTXLVt5_SMVGR8SO7Sdc0lj6RkoHK_DvAAEWac8bllF_Yan1NbbDTyPj_3BTA"
345
369
  # 2) ascp -i asperaweb_id_dsa.openssh -P 33001 -l 20m /Users/nicholasstokes/Desktop/CantemoAgent.mov xfer@ats-aws-us-west-2.aspera.io:
@@ -363,10 +387,10 @@ module Envoi
363
387
 
364
388
  # Agent
365
389
  end
366
-
390
+
367
391
  # Cantemo
368
392
  end
369
-
393
+
370
394
  end
371
395
 
372
396
  end