pushmi_pullyu 1.0.5 → 2.0.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +5 -5
- data/.github/CODEOWNERS +2 -0
- data/.github/PULL_REQUEST_TEMPLATE +11 -0
- data/.github/dependabot.yml +12 -0
- data/.github/workflows/ruby.yml +31 -0
- data/.rubocop.yml +21 -1
- data/CHANGELOG.md +25 -0
- data/Dangerfile +7 -3
- data/README.md +4 -5
- data/examples/pushmi_pullyu.yml +6 -6
- data/lib/pushmi_pullyu/aip/downloader.rb +133 -180
- data/lib/pushmi_pullyu/aip.rb +9 -6
- data/lib/pushmi_pullyu/cli.rb +30 -25
- data/lib/pushmi_pullyu/logging.rb +6 -6
- data/lib/pushmi_pullyu/swift_depositer.rb +1 -1
- data/lib/pushmi_pullyu/version.rb +1 -1
- data/lib/pushmi_pullyu.rb +10 -17
- data/pushmi_pullyu.gemspec +18 -14
- metadata +69 -47
- data/.travis.yml +0 -16
- data/lib/pushmi_pullyu/aip/fedora_fetcher.rb +0 -66
- data/lib/pushmi_pullyu/aip/file_list_creator.rb +0 -121
- data/lib/pushmi_pullyu/aip/owner_email_editor.rb +0 -50
- data/lib/pushmi_pullyu/aip/user.rb +0 -2
data/lib/pushmi_pullyu/cli.rb
CHANGED
@@ -4,6 +4,7 @@ require 'optparse'
|
|
4
4
|
require 'rollbar'
|
5
5
|
require 'singleton'
|
6
6
|
require 'yaml'
|
7
|
+
require 'json'
|
7
8
|
|
8
9
|
# CLI runner
|
9
10
|
class PushmiPullyu::CLI
|
@@ -59,13 +60,14 @@ class PushmiPullyu::CLI
|
|
59
60
|
Rollbar.configure do |config|
|
60
61
|
config.enabled = false unless options[:rollbar][:token].present?
|
61
62
|
config.access_token = options[:rollbar][:token]
|
62
|
-
|
63
|
+
config.use_exception_level_filters_default = true
|
64
|
+
config.exception_level_filters['IOError'] = 'ignore'
|
63
65
|
# add a filter after Rollbar has built the error payload but before it is delivered to the API,
|
64
66
|
# in order to strip sensitive information out of certain error messages
|
65
67
|
exception_message_transformer = proc do |payload|
|
66
|
-
clean_message = payload[:exception]
|
67
|
-
|
68
|
-
payload[:exception] =
|
68
|
+
clean_message = payload[:exception][:message].sub(/http:\/\/.+:.+@(.+)\/aip\/v1\/(.*)/,
|
69
|
+
"http://\1/aip/v1/\2")
|
70
|
+
payload[:exception][:message] = clean_message
|
69
71
|
payload[:message] = clean_message
|
70
72
|
end
|
71
73
|
|
@@ -87,7 +89,7 @@ class PushmiPullyu::CLI
|
|
87
89
|
|
88
90
|
def parse_config(config_file)
|
89
91
|
if File.exist?(config_file)
|
90
|
-
YAML.safe_load(ERB.new(
|
92
|
+
YAML.safe_load(ERB.new(File.read(config_file)).result).deep_symbolize_keys || {}
|
91
93
|
else
|
92
94
|
{}
|
93
95
|
end
|
@@ -180,26 +182,29 @@ class PushmiPullyu::CLI
|
|
180
182
|
end
|
181
183
|
|
182
184
|
def run_preservation_cycle
|
183
|
-
|
184
|
-
|
185
|
+
entity_json = JSON.parse(queue.wait_next_item)
|
186
|
+
entity = {
|
187
|
+
type: entity_json['type'],
|
188
|
+
uuid: entity_json['uuid']
|
189
|
+
}
|
190
|
+
return unless entity[:type].present? && entity[:uuid].present?
|
185
191
|
|
186
192
|
# add additional information about the error context to errors that occur while processing this item.
|
187
|
-
Rollbar.scoped(
|
188
|
-
|
189
|
-
|
190
|
-
|
191
|
-
|
192
|
-
|
193
|
-
|
194
|
-
|
195
|
-
end
|
196
|
-
# rubocop:disable Lint/RescueException
|
197
|
-
rescue Exception => e
|
198
|
-
Rollbar.error(e)
|
199
|
-
logger.error(e)
|
200
|
-
# TODO: we could re-raise here and let the daemon die on any preservation error, or just log the issue and
|
201
|
-
# move on to the next item.
|
193
|
+
Rollbar.scoped(entity_uuid: entity[:uuid]) do
|
194
|
+
# Download AIP from Jupiter, bag and tar AIP directory and cleanup after
|
195
|
+
# block code
|
196
|
+
PushmiPullyu::AIP.create(entity) do |aip_filename, aip_directory|
|
197
|
+
# Push tarred AIP to swift API
|
198
|
+
deposited_file = swift.deposit_file(aip_filename, options[:swift][:container])
|
199
|
+
# Log successful preservation event to the log files
|
200
|
+
PushmiPullyu::Logging.log_preservation_event(deposited_file, aip_directory)
|
202
201
|
end
|
202
|
+
# rubocop:disable Lint/RescueException
|
203
|
+
rescue Exception => e
|
204
|
+
Rollbar.error(e)
|
205
|
+
logger.error(e)
|
206
|
+
# TODO: we could re-raise here and let the daemon die on any preservation error, or just log the issue and
|
207
|
+
# move on to the next item.
|
203
208
|
# rubocop:enable Lint/RescueException
|
204
209
|
end
|
205
210
|
end
|
@@ -244,12 +249,12 @@ class PushmiPullyu::CLI
|
|
244
249
|
# On first call of shutdown, this will gracefully close the main run loop
|
245
250
|
# which let's the program exit itself. Calling shutdown again will force shutdown the program
|
246
251
|
def shutdown
|
247
|
-
if
|
248
|
-
exit!(1)
|
249
|
-
else
|
252
|
+
if PushmiPullyu.server_running?
|
250
253
|
# using stderr instead of logger as it uses an underlying mutex which is not allowed inside trap contexts.
|
251
254
|
warn 'Exiting... Interrupt again to force quit.'
|
252
255
|
PushmiPullyu.server_running = false
|
256
|
+
else
|
257
|
+
exit!(1)
|
253
258
|
end
|
254
259
|
end
|
255
260
|
|
@@ -21,7 +21,7 @@ module PushmiPullyu::Logging
|
|
21
21
|
|
22
22
|
attr_writer :logger
|
23
23
|
|
24
|
-
def initialize_logger(log_target =
|
24
|
+
def initialize_logger(log_target = $stdout)
|
25
25
|
@logger = Logger.new(log_target)
|
26
26
|
@logger.level = Logger::INFO
|
27
27
|
@logger
|
@@ -47,11 +47,11 @@ module PushmiPullyu::Logging
|
|
47
47
|
preservation_logger = Logger.new("#{PushmiPullyu.options[:logdir]}/preservation_events.log")
|
48
48
|
|
49
49
|
message = "#{deposited_file.name} was successfully deposited into Swift Storage!\n"\
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
50
|
+
"Here are the details of this preservation event:\n"\
|
51
|
+
"\tUUID: '#{deposited_file.name}'\n"\
|
52
|
+
"\tTimestamp of Completion: '#{deposited_file.last_modified}'\n"\
|
53
|
+
"\tAIP Checksum: '#{deposited_file.etag}'\n"\
|
54
|
+
"\tMetadata: #{deposited_file.metadata}\n"\
|
55
55
|
|
56
56
|
file_details = file_log_details(aip_directory)
|
57
57
|
|
@@ -50,7 +50,7 @@ class PushmiPullyu::SwiftDepositer
|
|
50
50
|
else
|
51
51
|
# for creating new: construct hash with symbols as keys, add metadata as a hash within the header hash
|
52
52
|
headers = { etag: checksum,
|
53
|
-
content_type:
|
53
|
+
content_type: 'application/x-tar',
|
54
54
|
metadata: metadata }
|
55
55
|
deposited_file = era_container.create_object(file_base_name, headers, File.open(file_name))
|
56
56
|
end
|
data/lib/pushmi_pullyu.rb
CHANGED
@@ -1,22 +1,15 @@
|
|
1
|
-
# require 'pushmi_pullyu/version' must be first as it declares the PushmiPullyu
|
2
|
-
# (This fixes a weird NameError bug when using the nested compact syntax
|
3
|
-
# defining modules/classes like `module PushmiPullyu::Logging`)
|
4
|
-
require 'pushmi_pullyu/version'
|
1
|
+
# require 'pushmi_pullyu/version' must be first as it declares the PushmiPullyu
|
2
|
+
# module. (This fixes a weird NameError bug when using the nested compact syntax
|
3
|
+
# for defining modules/classes like `module PushmiPullyu::Logging`)
|
5
4
|
|
5
|
+
require 'pushmi_pullyu/version'
|
6
6
|
require 'pushmi_pullyu/logging'
|
7
|
-
|
8
7
|
require 'pushmi_pullyu/aip'
|
9
8
|
require 'pushmi_pullyu/aip/creator'
|
10
9
|
require 'pushmi_pullyu/aip/downloader'
|
11
|
-
require 'pushmi_pullyu/aip/fedora_fetcher'
|
12
|
-
require 'pushmi_pullyu/aip/file_list_creator'
|
13
|
-
require 'pushmi_pullyu/aip/owner_email_editor'
|
14
|
-
require 'active_record'
|
15
|
-
require 'pushmi_pullyu/aip/user'
|
16
10
|
require 'pushmi_pullyu/cli'
|
17
11
|
require 'pushmi_pullyu/preservation_queue'
|
18
12
|
require 'pushmi_pullyu/swift_depositer'
|
19
|
-
|
20
13
|
require 'active_support'
|
21
14
|
require 'active_support/core_ext'
|
22
15
|
|
@@ -36,12 +29,6 @@ module PushmiPullyu
|
|
36
29
|
redis: {
|
37
30
|
url: 'redis://localhost:6379'
|
38
31
|
},
|
39
|
-
fedora: {
|
40
|
-
url: 'http://localhost:8080/fcrepo/rest',
|
41
|
-
user: 'fedoraAdmin',
|
42
|
-
password: 'fedoraAdmin',
|
43
|
-
base_path: '/dev'
|
44
|
-
},
|
45
32
|
swift: {
|
46
33
|
tenant: 'tester',
|
47
34
|
username: 'test:tester',
|
@@ -58,6 +45,12 @@ module PushmiPullyu
|
|
58
45
|
pool: ENV['RAILS_MAX_THREADS'] || 5,
|
59
46
|
url: ENV['DATABASE_URL'] || ENV['JUPITER_DATABASE_URL'] || 'postgresql://jupiter:mysecretpassword@127.0.0.1',
|
60
47
|
database: 'jupiter_development'
|
48
|
+
},
|
49
|
+
jupiter: {
|
50
|
+
user: ENV['JUPITER_USER'],
|
51
|
+
api_key: ENV['JUPITER_API_KEY'],
|
52
|
+
jupiter_url: ENV['JUPITER_URL'] || 'http://localhost:3000/',
|
53
|
+
aip_api_path: ENV['JUPITER_AIP_API_PATH'] || 'aip/v1'
|
61
54
|
}
|
62
55
|
}.freeze
|
63
56
|
|
data/pushmi_pullyu.gemspec
CHANGED
@@ -5,10 +5,10 @@ require 'pushmi_pullyu/version'
|
|
5
5
|
Gem::Specification.new do |spec|
|
6
6
|
spec.name = 'pushmi_pullyu'
|
7
7
|
spec.version = PushmiPullyu::VERSION
|
8
|
-
spec.authors = ['Shane Murnaghan']
|
9
|
-
spec.email = ['murnagha@ualberta.ca']
|
8
|
+
spec.authors = ['Shane Murnaghan', 'Omar Rodriguez-Arenas']
|
9
|
+
spec.email = ['murnagha@ualberta.ca', 'orodrigu@ualberta.ca']
|
10
10
|
|
11
|
-
spec.summary = 'Ruby application to manage flow of content from
|
11
|
+
spec.summary = 'Ruby application to manage flow of content from Jupiter into Swift for preservation'
|
12
12
|
spec.homepage = 'https://github.com/ualbertalib/pushmi_pullyu'
|
13
13
|
spec.license = 'MIT'
|
14
14
|
|
@@ -19,31 +19,35 @@ Gem::Specification.new do |spec|
|
|
19
19
|
spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
|
20
20
|
spec.require_paths = ['lib']
|
21
21
|
|
22
|
-
spec.required_ruby_version = '>= 2.
|
22
|
+
spec.required_ruby_version = '>= 2.5'
|
23
23
|
|
24
|
-
spec.add_runtime_dependency '
|
25
|
-
spec.add_runtime_dependency 'activesupport', '~> 5.0'
|
24
|
+
spec.add_runtime_dependency 'activesupport', '>= 5', '< 7'
|
26
25
|
spec.add_runtime_dependency 'bagit', '~> 0.4'
|
27
26
|
spec.add_runtime_dependency 'connection_pool', '~> 2.2'
|
28
27
|
spec.add_runtime_dependency 'daemons', '~> 1.2', '>= 1.2.4'
|
29
|
-
spec.add_runtime_dependency 'minitar', '~> 0.
|
28
|
+
spec.add_runtime_dependency 'minitar', '~> 0.7'
|
30
29
|
spec.add_runtime_dependency 'openstack', '~> 3.3', '>= 3.3.10'
|
31
30
|
spec.add_runtime_dependency 'pg', '>= 1.0', '< 1.2'
|
32
31
|
spec.add_runtime_dependency 'rdf', '>= 1.99', '< 4.0'
|
33
32
|
spec.add_runtime_dependency 'rdf-n3', '>= 1.99', '< 4.0'
|
34
33
|
spec.add_runtime_dependency 'redis', '>= 3.3', '< 5.0'
|
35
34
|
spec.add_runtime_dependency 'rest-client', '>= 1.8', '< 3.0'
|
36
|
-
spec.add_runtime_dependency 'rollbar', '
|
35
|
+
spec.add_runtime_dependency 'rollbar', '>= 2.18', '< 4.0'
|
36
|
+
spec.add_runtime_dependency 'uuid', '~> 2.3.9'
|
37
37
|
|
38
|
-
spec.add_development_dependency 'bundler', '~>
|
38
|
+
spec.add_development_dependency 'bundler', '~> 2.0'
|
39
39
|
spec.add_development_dependency 'coveralls', '~> 0.8'
|
40
|
-
spec.add_development_dependency 'danger', '~>
|
40
|
+
spec.add_development_dependency 'danger', '~> 8.0'
|
41
41
|
spec.add_development_dependency 'pry', '~> 0.10', '>= 0.10.4'
|
42
|
-
spec.add_development_dependency '
|
42
|
+
spec.add_development_dependency 'pry-byebug', '~> 3.6'
|
43
|
+
spec.add_development_dependency 'rake', '~> 13.0'
|
43
44
|
spec.add_development_dependency 'rspec', '~> 3.0'
|
44
|
-
spec.add_development_dependency 'rubocop', '~>
|
45
|
-
spec.add_development_dependency 'rubocop-rspec', '~>
|
45
|
+
spec.add_development_dependency 'rubocop', '~> 1.23'
|
46
|
+
spec.add_development_dependency 'rubocop-rspec', '~> 2.6'
|
46
47
|
spec.add_development_dependency 'timecop', '~> 0.8'
|
47
|
-
spec.add_development_dependency 'vcr', '~>
|
48
|
+
spec.add_development_dependency 'vcr', '~> 5.0'
|
48
49
|
spec.add_development_dependency 'webmock', '~> 3.3'
|
50
|
+
spec.metadata = {
|
51
|
+
'rubygems_mfa_required' => 'true'
|
52
|
+
}
|
49
53
|
end
|
metadata
CHANGED
@@ -1,49 +1,36 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: pushmi_pullyu
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
4
|
+
version: 2.0.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Shane Murnaghan
|
8
|
+
- Omar Rodriguez-Arenas
|
8
9
|
autorequire:
|
9
10
|
bindir: exe
|
10
11
|
cert_chain: []
|
11
|
-
date:
|
12
|
+
date: 2021-11-23 00:00:00.000000000 Z
|
12
13
|
dependencies:
|
13
14
|
- !ruby/object:Gem::Dependency
|
14
|
-
name:
|
15
|
+
name: activesupport
|
15
16
|
requirement: !ruby/object:Gem::Requirement
|
16
17
|
requirements:
|
17
18
|
- - ">="
|
18
19
|
- !ruby/object:Gem::Version
|
19
|
-
version: 5
|
20
|
+
version: '5'
|
20
21
|
- - "<"
|
21
22
|
- !ruby/object:Gem::Version
|
22
|
-
version:
|
23
|
+
version: '7'
|
23
24
|
type: :runtime
|
24
25
|
prerelease: false
|
25
26
|
version_requirements: !ruby/object:Gem::Requirement
|
26
27
|
requirements:
|
27
28
|
- - ">="
|
28
29
|
- !ruby/object:Gem::Version
|
29
|
-
version: 5
|
30
|
+
version: '5'
|
30
31
|
- - "<"
|
31
32
|
- !ruby/object:Gem::Version
|
32
|
-
version:
|
33
|
-
- !ruby/object:Gem::Dependency
|
34
|
-
name: activesupport
|
35
|
-
requirement: !ruby/object:Gem::Requirement
|
36
|
-
requirements:
|
37
|
-
- - "~>"
|
38
|
-
- !ruby/object:Gem::Version
|
39
|
-
version: '5.0'
|
40
|
-
type: :runtime
|
41
|
-
prerelease: false
|
42
|
-
version_requirements: !ruby/object:Gem::Requirement
|
43
|
-
requirements:
|
44
|
-
- - "~>"
|
45
|
-
- !ruby/object:Gem::Version
|
46
|
-
version: '5.0'
|
33
|
+
version: '7'
|
47
34
|
- !ruby/object:Gem::Dependency
|
48
35
|
name: bagit
|
49
36
|
requirement: !ruby/object:Gem::Requirement
|
@@ -98,14 +85,14 @@ dependencies:
|
|
98
85
|
requirements:
|
99
86
|
- - "~>"
|
100
87
|
- !ruby/object:Gem::Version
|
101
|
-
version: '0.
|
88
|
+
version: '0.7'
|
102
89
|
type: :runtime
|
103
90
|
prerelease: false
|
104
91
|
version_requirements: !ruby/object:Gem::Requirement
|
105
92
|
requirements:
|
106
93
|
- - "~>"
|
107
94
|
- !ruby/object:Gem::Version
|
108
|
-
version: '0.
|
95
|
+
version: '0.7'
|
109
96
|
- !ruby/object:Gem::Dependency
|
110
97
|
name: openstack
|
111
98
|
requirement: !ruby/object:Gem::Requirement
|
@@ -228,32 +215,52 @@ dependencies:
|
|
228
215
|
version: '3.0'
|
229
216
|
- !ruby/object:Gem::Dependency
|
230
217
|
name: rollbar
|
218
|
+
requirement: !ruby/object:Gem::Requirement
|
219
|
+
requirements:
|
220
|
+
- - ">="
|
221
|
+
- !ruby/object:Gem::Version
|
222
|
+
version: '2.18'
|
223
|
+
- - "<"
|
224
|
+
- !ruby/object:Gem::Version
|
225
|
+
version: '4.0'
|
226
|
+
type: :runtime
|
227
|
+
prerelease: false
|
228
|
+
version_requirements: !ruby/object:Gem::Requirement
|
229
|
+
requirements:
|
230
|
+
- - ">="
|
231
|
+
- !ruby/object:Gem::Version
|
232
|
+
version: '2.18'
|
233
|
+
- - "<"
|
234
|
+
- !ruby/object:Gem::Version
|
235
|
+
version: '4.0'
|
236
|
+
- !ruby/object:Gem::Dependency
|
237
|
+
name: uuid
|
231
238
|
requirement: !ruby/object:Gem::Requirement
|
232
239
|
requirements:
|
233
240
|
- - "~>"
|
234
241
|
- !ruby/object:Gem::Version
|
235
|
-
version:
|
242
|
+
version: 2.3.9
|
236
243
|
type: :runtime
|
237
244
|
prerelease: false
|
238
245
|
version_requirements: !ruby/object:Gem::Requirement
|
239
246
|
requirements:
|
240
247
|
- - "~>"
|
241
248
|
- !ruby/object:Gem::Version
|
242
|
-
version:
|
249
|
+
version: 2.3.9
|
243
250
|
- !ruby/object:Gem::Dependency
|
244
251
|
name: bundler
|
245
252
|
requirement: !ruby/object:Gem::Requirement
|
246
253
|
requirements:
|
247
254
|
- - "~>"
|
248
255
|
- !ruby/object:Gem::Version
|
249
|
-
version: '
|
256
|
+
version: '2.0'
|
250
257
|
type: :development
|
251
258
|
prerelease: false
|
252
259
|
version_requirements: !ruby/object:Gem::Requirement
|
253
260
|
requirements:
|
254
261
|
- - "~>"
|
255
262
|
- !ruby/object:Gem::Version
|
256
|
-
version: '
|
263
|
+
version: '2.0'
|
257
264
|
- !ruby/object:Gem::Dependency
|
258
265
|
name: coveralls
|
259
266
|
requirement: !ruby/object:Gem::Requirement
|
@@ -274,14 +281,14 @@ dependencies:
|
|
274
281
|
requirements:
|
275
282
|
- - "~>"
|
276
283
|
- !ruby/object:Gem::Version
|
277
|
-
version: '
|
284
|
+
version: '8.0'
|
278
285
|
type: :development
|
279
286
|
prerelease: false
|
280
287
|
version_requirements: !ruby/object:Gem::Requirement
|
281
288
|
requirements:
|
282
289
|
- - "~>"
|
283
290
|
- !ruby/object:Gem::Version
|
284
|
-
version: '
|
291
|
+
version: '8.0'
|
285
292
|
- !ruby/object:Gem::Dependency
|
286
293
|
name: pry
|
287
294
|
requirement: !ruby/object:Gem::Requirement
|
@@ -302,20 +309,34 @@ dependencies:
|
|
302
309
|
- - ">="
|
303
310
|
- !ruby/object:Gem::Version
|
304
311
|
version: 0.10.4
|
312
|
+
- !ruby/object:Gem::Dependency
|
313
|
+
name: pry-byebug
|
314
|
+
requirement: !ruby/object:Gem::Requirement
|
315
|
+
requirements:
|
316
|
+
- - "~>"
|
317
|
+
- !ruby/object:Gem::Version
|
318
|
+
version: '3.6'
|
319
|
+
type: :development
|
320
|
+
prerelease: false
|
321
|
+
version_requirements: !ruby/object:Gem::Requirement
|
322
|
+
requirements:
|
323
|
+
- - "~>"
|
324
|
+
- !ruby/object:Gem::Version
|
325
|
+
version: '3.6'
|
305
326
|
- !ruby/object:Gem::Dependency
|
306
327
|
name: rake
|
307
328
|
requirement: !ruby/object:Gem::Requirement
|
308
329
|
requirements:
|
309
330
|
- - "~>"
|
310
331
|
- !ruby/object:Gem::Version
|
311
|
-
version: '
|
332
|
+
version: '13.0'
|
312
333
|
type: :development
|
313
334
|
prerelease: false
|
314
335
|
version_requirements: !ruby/object:Gem::Requirement
|
315
336
|
requirements:
|
316
337
|
- - "~>"
|
317
338
|
- !ruby/object:Gem::Version
|
318
|
-
version: '
|
339
|
+
version: '13.0'
|
319
340
|
- !ruby/object:Gem::Dependency
|
320
341
|
name: rspec
|
321
342
|
requirement: !ruby/object:Gem::Requirement
|
@@ -336,28 +357,28 @@ dependencies:
|
|
336
357
|
requirements:
|
337
358
|
- - "~>"
|
338
359
|
- !ruby/object:Gem::Version
|
339
|
-
version: '
|
360
|
+
version: '1.23'
|
340
361
|
type: :development
|
341
362
|
prerelease: false
|
342
363
|
version_requirements: !ruby/object:Gem::Requirement
|
343
364
|
requirements:
|
344
365
|
- - "~>"
|
345
366
|
- !ruby/object:Gem::Version
|
346
|
-
version: '
|
367
|
+
version: '1.23'
|
347
368
|
- !ruby/object:Gem::Dependency
|
348
369
|
name: rubocop-rspec
|
349
370
|
requirement: !ruby/object:Gem::Requirement
|
350
371
|
requirements:
|
351
372
|
- - "~>"
|
352
373
|
- !ruby/object:Gem::Version
|
353
|
-
version: '
|
374
|
+
version: '2.6'
|
354
375
|
type: :development
|
355
376
|
prerelease: false
|
356
377
|
version_requirements: !ruby/object:Gem::Requirement
|
357
378
|
requirements:
|
358
379
|
- - "~>"
|
359
380
|
- !ruby/object:Gem::Version
|
360
|
-
version: '
|
381
|
+
version: '2.6'
|
361
382
|
- !ruby/object:Gem::Dependency
|
362
383
|
name: timecop
|
363
384
|
requirement: !ruby/object:Gem::Requirement
|
@@ -378,14 +399,14 @@ dependencies:
|
|
378
399
|
requirements:
|
379
400
|
- - "~>"
|
380
401
|
- !ruby/object:Gem::Version
|
381
|
-
version: '
|
402
|
+
version: '5.0'
|
382
403
|
type: :development
|
383
404
|
prerelease: false
|
384
405
|
version_requirements: !ruby/object:Gem::Requirement
|
385
406
|
requirements:
|
386
407
|
- - "~>"
|
387
408
|
- !ruby/object:Gem::Version
|
388
|
-
version: '
|
409
|
+
version: '5.0'
|
389
410
|
- !ruby/object:Gem::Dependency
|
390
411
|
name: webmock
|
391
412
|
requirement: !ruby/object:Gem::Requirement
|
@@ -403,6 +424,7 @@ dependencies:
|
|
403
424
|
description:
|
404
425
|
email:
|
405
426
|
- murnagha@ualberta.ca
|
427
|
+
- orodrigu@ualberta.ca
|
406
428
|
executables:
|
407
429
|
- pushmi_pullyu
|
408
430
|
extensions: []
|
@@ -410,11 +432,15 @@ extra_rdoc_files: []
|
|
410
432
|
files:
|
411
433
|
- ".coveralls.yml"
|
412
434
|
- ".editorconfig"
|
435
|
+
- ".github/CODEOWNERS"
|
436
|
+
- ".github/PULL_REQUEST_TEMPLATE"
|
437
|
+
- ".github/dependabot.yml"
|
438
|
+
- ".github/workflows/ruby.yml"
|
413
439
|
- ".gitignore"
|
414
440
|
- ".hound.yml"
|
415
441
|
- ".rspec"
|
416
442
|
- ".rubocop.yml"
|
417
|
-
-
|
443
|
+
- CHANGELOG.md
|
418
444
|
- Dangerfile
|
419
445
|
- Gemfile
|
420
446
|
- LICENSE.txt
|
@@ -431,10 +457,6 @@ files:
|
|
431
457
|
- lib/pushmi_pullyu/aip.rb
|
432
458
|
- lib/pushmi_pullyu/aip/creator.rb
|
433
459
|
- lib/pushmi_pullyu/aip/downloader.rb
|
434
|
-
- lib/pushmi_pullyu/aip/fedora_fetcher.rb
|
435
|
-
- lib/pushmi_pullyu/aip/file_list_creator.rb
|
436
|
-
- lib/pushmi_pullyu/aip/owner_email_editor.rb
|
437
|
-
- lib/pushmi_pullyu/aip/user.rb
|
438
460
|
- lib/pushmi_pullyu/cli.rb
|
439
461
|
- lib/pushmi_pullyu/logging.rb
|
440
462
|
- lib/pushmi_pullyu/preservation_queue.rb
|
@@ -447,7 +469,8 @@ files:
|
|
447
469
|
homepage: https://github.com/ualbertalib/pushmi_pullyu
|
448
470
|
licenses:
|
449
471
|
- MIT
|
450
|
-
metadata:
|
472
|
+
metadata:
|
473
|
+
rubygems_mfa_required: 'true'
|
451
474
|
post_install_message:
|
452
475
|
rdoc_options: []
|
453
476
|
require_paths:
|
@@ -456,16 +479,15 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
456
479
|
requirements:
|
457
480
|
- - ">="
|
458
481
|
- !ruby/object:Gem::Version
|
459
|
-
version: 2.
|
482
|
+
version: '2.5'
|
460
483
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
461
484
|
requirements:
|
462
485
|
- - ">="
|
463
486
|
- !ruby/object:Gem::Version
|
464
487
|
version: '0'
|
465
488
|
requirements: []
|
466
|
-
|
467
|
-
rubygems_version: 2.6.11
|
489
|
+
rubygems_version: 3.1.6
|
468
490
|
signing_key:
|
469
491
|
specification_version: 4
|
470
|
-
summary: Ruby application to manage flow of content from
|
492
|
+
summary: Ruby application to manage flow of content from Jupiter into Swift for preservation
|
471
493
|
test_files: []
|
data/.travis.yml
DELETED
@@ -1,66 +0,0 @@
|
|
1
|
-
require 'net/http'
|
2
|
-
|
3
|
-
class PushmiPullyu::AIP::FedoraFetcher
|
4
|
-
|
5
|
-
class FedoraFetchError < StandardError; end
|
6
|
-
|
7
|
-
RDF_FORMAT = 'text/rdf+n3'.freeze
|
8
|
-
|
9
|
-
def initialize(noid)
|
10
|
-
@noid = noid
|
11
|
-
end
|
12
|
-
|
13
|
-
def object_url(url_extra = nil)
|
14
|
-
url = "#{PushmiPullyu.options[:fedora][:url]}#{base_path}/#{pairtree}"
|
15
|
-
url += url_extra if url_extra
|
16
|
-
url
|
17
|
-
end
|
18
|
-
|
19
|
-
# Return true on success, raise an error otherwise
|
20
|
-
# (or use 'optional' to return false on 404)
|
21
|
-
def download_object(download_path, url_extra: nil,
|
22
|
-
optional: false, is_rdf: false,
|
23
|
-
should_add_user_email: false)
|
24
|
-
|
25
|
-
uri = URI(object_url(url_extra))
|
26
|
-
|
27
|
-
request = Net::HTTP::Get.new(uri)
|
28
|
-
request.basic_auth(PushmiPullyu.options[:fedora][:user],
|
29
|
-
PushmiPullyu.options[:fedora][:password])
|
30
|
-
|
31
|
-
request['Accept'] = RDF_FORMAT if is_rdf
|
32
|
-
|
33
|
-
response = Net::HTTP.start(uri.hostname, uri.port) do |http|
|
34
|
-
http.request(request)
|
35
|
-
end
|
36
|
-
|
37
|
-
if response.is_a?(Net::HTTPSuccess)
|
38
|
-
body = if should_add_user_email
|
39
|
-
PushmiPullyu::AIP::OwnerEmailEditor.new(response.body).run
|
40
|
-
else
|
41
|
-
response.body
|
42
|
-
end
|
43
|
-
file = File.open(download_path, 'wb')
|
44
|
-
file.write(body)
|
45
|
-
file.close
|
46
|
-
return true
|
47
|
-
elsif response.is_a?(Net::HTTPNotFound)
|
48
|
-
raise FedoraFetchError unless optional
|
49
|
-
|
50
|
-
return false
|
51
|
-
else
|
52
|
-
raise FedoraFetchError
|
53
|
-
end
|
54
|
-
end
|
55
|
-
|
56
|
-
private
|
57
|
-
|
58
|
-
def pairtree
|
59
|
-
"#{@noid[0..1]}/#{@noid[2..3]}/#{@noid[4..5]}/#{@noid[6..7]}/#{@noid}"
|
60
|
-
end
|
61
|
-
|
62
|
-
def base_path
|
63
|
-
PushmiPullyu.options[:fedora][:base_path]
|
64
|
-
end
|
65
|
-
|
66
|
-
end
|