sdr-client 0.26.1 → 0.27.0
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
- data/bin/console +1 -1
- data/exe/sdr +16 -28
- data/lib/sdr_client.rb +0 -1
- data/lib/sdr_client/cli.rb +69 -5
- data/lib/sdr_client/deposit.rb +14 -0
- data/lib/sdr_client/version.rb +1 -1
- data/sdr-client.gemspec +1 -1
- metadata +4 -5
- data/lib/sdr_client/model_deposit.rb +0 -22
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 0b57004bc33af516fb892a3d1cd317c1549319e97e4ca4ccc7c9ea82a00f81c0
|
4
|
+
data.tar.gz: 808661eb382c5a6f3098a96a473fa8396f29d413e290d822d32739f9fe34db49
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 343d5374e9e2b12731ff06111d71646fcca815c030e67e4fd29b65477440b9bc1fde6a04b2d597ccb17c37ec56ff5a6cdc4010ad05bfaba30c7eed569ecf94b3
|
7
|
+
data.tar.gz: 356c88775241392487f41a31733169625f43f745e6e0c9e432a464e581b6c366a13148cd22495877972db75808e402efbf5929761adac1ad4445b35c12bc3fa9
|
data/bin/console
CHANGED
data/exe/sdr
CHANGED
@@ -6,37 +6,13 @@ require 'optparse'
|
|
6
6
|
require 'sdr_client'
|
7
7
|
|
8
8
|
options = {}
|
9
|
+
|
9
10
|
global = OptionParser.new do |opts|
|
10
11
|
opts.on('--service-url URL', 'Connect to the host at this URL') do |url|
|
11
12
|
options[:url] = url
|
12
13
|
end
|
13
14
|
opts.on('-h', '--help', 'Display this screen') do
|
14
|
-
|
15
|
-
DESCRIPTION:
|
16
|
-
The SDR Command Line Interface is a tool to interact with the Stanford Digital Repository.
|
17
|
-
|
18
|
-
SYNOPSIS:
|
19
|
-
sdr [options] <command>
|
20
|
-
|
21
|
-
OPTIONS:
|
22
|
-
--service-url (string)
|
23
|
-
Override the command's default URL with the given URL.
|
24
|
-
|
25
|
-
-h, --help
|
26
|
-
Displays this screen
|
27
|
-
|
28
|
-
COMMANDS
|
29
|
-
deposit
|
30
|
-
accession object into the SDR
|
31
|
-
|
32
|
-
register
|
33
|
-
create a draft object in SDR
|
34
|
-
|
35
|
-
login
|
36
|
-
Will prompt for email & password and exchange it for an login token, which it saves in ~/.sdr/token
|
37
|
-
|
38
|
-
HELP
|
39
|
-
exit
|
15
|
+
SdrClient::CLI.help
|
40
16
|
end
|
41
17
|
end
|
42
18
|
|
@@ -44,6 +20,7 @@ global.order!
|
|
44
20
|
command = ARGV.shift
|
45
21
|
|
46
22
|
deposit_options = OptionParser.new do |opts|
|
23
|
+
opts.banner = "Usage: sdr #{command} [options]"
|
47
24
|
opts.on('--label LABEL', 'The object label') do |label|
|
48
25
|
options[:label] = label
|
49
26
|
end
|
@@ -114,6 +91,8 @@ deposit_options = OptionParser.new do |opts|
|
|
114
91
|
end
|
115
92
|
end
|
116
93
|
|
94
|
+
SdrClient::CLI.help unless command
|
95
|
+
|
117
96
|
subcommands = {
|
118
97
|
'deposit' => deposit_options,
|
119
98
|
'register' => deposit_options,
|
@@ -122,10 +101,19 @@ subcommands = {
|
|
122
101
|
|
123
102
|
unless subcommands.key?(command)
|
124
103
|
puts "unknown command '#{command}'"
|
125
|
-
|
104
|
+
SdrClient::CLI.help
|
126
105
|
end
|
127
106
|
|
128
107
|
subcommands[command].order!
|
129
108
|
|
130
109
|
options[:files] = ARGV unless ARGV.empty?
|
131
|
-
|
110
|
+
options[:url] ||= 'https://sdr-api-prod.stanford.edu'
|
111
|
+
|
112
|
+
begin
|
113
|
+
SdrClient::CLI.start(command, options)
|
114
|
+
rescue StandardError => e
|
115
|
+
warn "There was a problem making your request:\n\n"
|
116
|
+
warn e.message
|
117
|
+
puts
|
118
|
+
puts subcommands[command].help
|
119
|
+
end
|
data/lib/sdr_client.rb
CHANGED
data/lib/sdr_client/cli.rb
CHANGED
@@ -3,15 +3,46 @@
|
|
3
3
|
module SdrClient
|
4
4
|
# The command line interface
|
5
5
|
module CLI
|
6
|
+
HELP = <<~HELP
|
7
|
+
DESCRIPTION:
|
8
|
+
The SDR Command Line Interface is a tool to interact with the Stanford Digital Repository.
|
9
|
+
|
10
|
+
SYNOPSIS:
|
11
|
+
sdr [options] <command>
|
12
|
+
|
13
|
+
To see help text for each command you can run:
|
14
|
+
|
15
|
+
sdr [options] <command> help
|
16
|
+
|
17
|
+
OPTIONS:
|
18
|
+
--service-url (string)
|
19
|
+
Override the command's default URL with the given URL.
|
20
|
+
|
21
|
+
-h, --help
|
22
|
+
Displays this screen
|
23
|
+
|
24
|
+
|
25
|
+
COMMANDS:
|
26
|
+
deposit
|
27
|
+
Accession an object into the SDR
|
28
|
+
|
29
|
+
register
|
30
|
+
Create a draft object in SDR and retrieve a Druid identifier.
|
31
|
+
|
32
|
+
login
|
33
|
+
Will prompt for email & password and exchange it for an login token, which it saves in ~/.sdr/token
|
34
|
+
|
35
|
+
HELP
|
36
|
+
|
6
37
|
def self.start(command, options)
|
7
38
|
case command
|
8
|
-
when 'deposit'
|
9
|
-
|
10
|
-
|
11
|
-
|
39
|
+
when 'deposit', 'register'
|
40
|
+
display_errors(validate_deposit_options(options))
|
41
|
+
job_id = SdrClient::Deposit.run(accession: command == 'deposit', **options)
|
42
|
+
poll_for_job_complete(job_id: job_id, url: options[:url]) # TODO: add an option that skips this
|
12
43
|
when 'login'
|
13
44
|
status = SdrClient::Login.run(options)
|
14
|
-
puts status.
|
45
|
+
puts status.failure if status.failure?
|
15
46
|
else
|
16
47
|
raise "Unknown command #{command}"
|
17
48
|
end
|
@@ -19,5 +50,38 @@ module SdrClient
|
|
19
50
|
puts 'Log in first'
|
20
51
|
exit(1)
|
21
52
|
end
|
53
|
+
|
54
|
+
def self.display_errors(errors)
|
55
|
+
return if errors.empty?
|
56
|
+
|
57
|
+
raise errors.map { |k, v| "#{k} #{v}" }.join("\n")
|
58
|
+
end
|
59
|
+
|
60
|
+
def self.validate_deposit_options(options)
|
61
|
+
{}.tap do |errors|
|
62
|
+
errors['admin-policy'] = 'is a required argument' unless options[:apo]
|
63
|
+
errors['source-id'] = 'is a required argument' unless options[:source_id]
|
64
|
+
end
|
65
|
+
end
|
66
|
+
|
67
|
+
def self.help
|
68
|
+
puts HELP
|
69
|
+
exit
|
70
|
+
end
|
71
|
+
|
72
|
+
def self.poll_for_job_complete(job_id:, url:)
|
73
|
+
result = nil
|
74
|
+
1.upto(5) do |_n|
|
75
|
+
result = SdrClient::BackgroundJobResults.show(url: url, job_id: job_id)
|
76
|
+
break unless %w[pending processing].include? result['status']
|
77
|
+
|
78
|
+
sleep 5
|
79
|
+
end
|
80
|
+
if result['status'] == 'complete'
|
81
|
+
puts result.dig('output', 'druid')
|
82
|
+
else
|
83
|
+
warn "Job #{job_id} did not complete\n#{result.inspect}"
|
84
|
+
end
|
85
|
+
end
|
22
86
|
end
|
23
87
|
end
|
data/lib/sdr_client/deposit.rb
CHANGED
@@ -51,6 +51,19 @@ module SdrClient
|
|
51
51
|
end
|
52
52
|
# rubocop:enable Metrics/MethodLength
|
53
53
|
# rubocop:enable Metrics/ParameterLists
|
54
|
+
|
55
|
+
def self.model_run(request_dro:,
|
56
|
+
files: [],
|
57
|
+
url:,
|
58
|
+
accession:,
|
59
|
+
logger: Logger.new(STDOUT))
|
60
|
+
connection = Connection.new(url: url)
|
61
|
+
ModelProcess.new(request_dro: request_dro,
|
62
|
+
connection: connection,
|
63
|
+
files: files,
|
64
|
+
logger: logger,
|
65
|
+
accession: accession).run
|
66
|
+
end
|
54
67
|
end
|
55
68
|
end
|
56
69
|
require 'json'
|
@@ -63,6 +76,7 @@ require 'sdr_client/deposit/file_metadata_builder'
|
|
63
76
|
require 'sdr_client/deposit/file_set'
|
64
77
|
require 'sdr_client/deposit/request'
|
65
78
|
require 'sdr_client/deposit/metadata_builder'
|
79
|
+
require 'sdr_client/deposit/model_process'
|
66
80
|
require 'sdr_client/deposit/process'
|
67
81
|
require 'sdr_client/deposit/upload_files'
|
68
82
|
require 'sdr_client/deposit/upload_resource'
|
data/lib/sdr_client/version.rb
CHANGED
data/sdr-client.gemspec
CHANGED
@@ -28,7 +28,7 @@ Gem::Specification.new do |spec|
|
|
28
28
|
spec.require_paths = ['lib']
|
29
29
|
|
30
30
|
spec.add_dependency 'activesupport'
|
31
|
-
spec.add_dependency 'cocina-models', '~> 0.
|
31
|
+
spec.add_dependency 'cocina-models', '~> 0.33.0'
|
32
32
|
spec.add_dependency 'dry-monads'
|
33
33
|
spec.add_dependency 'faraday', '>= 0.16'
|
34
34
|
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: sdr-client
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.27.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Justin Coyne
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2020-06-
|
11
|
+
date: 2020-06-11 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activesupport
|
@@ -30,14 +30,14 @@ dependencies:
|
|
30
30
|
requirements:
|
31
31
|
- - "~>"
|
32
32
|
- !ruby/object:Gem::Version
|
33
|
-
version: 0.
|
33
|
+
version: 0.33.0
|
34
34
|
type: :runtime
|
35
35
|
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
38
|
- - "~>"
|
39
39
|
- !ruby/object:Gem::Version
|
40
|
-
version: 0.
|
40
|
+
version: 0.33.0
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
42
|
name: dry-monads
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
@@ -211,7 +211,6 @@ files:
|
|
211
211
|
- lib/sdr_client/deposit/upload_resource.rb
|
212
212
|
- lib/sdr_client/login.rb
|
213
213
|
- lib/sdr_client/login_prompt.rb
|
214
|
-
- lib/sdr_client/model_deposit.rb
|
215
214
|
- lib/sdr_client/version.rb
|
216
215
|
- sdr-client.gemspec
|
217
216
|
homepage: https://github.com/sul-dlss/sdr-client
|
@@ -1,22 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
require 'logger'
|
4
|
-
|
5
|
-
module SdrClient
|
6
|
-
# The namespace for the "deposit" command
|
7
|
-
module Deposit
|
8
|
-
def self.model_run(request_dro:,
|
9
|
-
files: [],
|
10
|
-
url:,
|
11
|
-
accession:,
|
12
|
-
logger: Logger.new(STDOUT))
|
13
|
-
connection = Connection.new(url: url)
|
14
|
-
ModelProcess.new(request_dro: request_dro,
|
15
|
-
connection: connection,
|
16
|
-
files: files,
|
17
|
-
logger: logger,
|
18
|
-
accession: accession).run
|
19
|
-
end
|
20
|
-
end
|
21
|
-
end
|
22
|
-
require 'sdr_client/deposit/model_process'
|