pushmi_pullyu 1.0.5 → 2.0.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 +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
|