sdr-client 1.0.0 → 2.0.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/Gemfile.lock +39 -13
- data/config/settings.yml +4 -0
- data/exe/sdr +1 -0
- data/lib/sdr_client/cli/config.rb +30 -0
- data/lib/sdr_client/cli.rb +72 -37
- data/lib/sdr_client/deposit.rb +0 -1
- data/lib/sdr_client/find.rb +4 -9
- data/lib/sdr_client/unexpected_response.rb +27 -0
- data/lib/sdr_client/version.rb +1 -1
- data/lib/sdr_client.rb +1 -1
- data/sdr-client.gemspec +2 -0
- metadata +37 -7
- data/lib/sdr_client/deposit/unexpected_response.rb +0 -25
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 1889b3e5a4bda3ce260dd4a0d9671f8ce3ab0db9ae7f05584d18f9f556e7bd0a
|
|
4
|
+
data.tar.gz: aa6ad237bd7febc4c74d40fdff148faa9ede2c0a560b010bce7d42b3cb295589
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 9d5f381820d655416d1c8da19db0911af0a016d83fe4970f1a64d03bc8f9f2709f93c05ff0f367ad9bcb1e94f44fed86ef61798312a98660e3bf0e8ca2f1dfbc
|
|
7
|
+
data.tar.gz: 8b5dadcc030463318a87444611294571af60c18bd35d52fe5d0c89ddf7dbd71e4ecf66ec9df3bb21a60a4846cedf3f9e3b6d77835a14a959ec7268d75a17f618
|
data/Gemfile.lock
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
PATH
|
|
2
2
|
remote: .
|
|
3
3
|
specs:
|
|
4
|
-
sdr-client (
|
|
4
|
+
sdr-client (2.0.0)
|
|
5
5
|
activesupport
|
|
6
6
|
cocina-models (~> 0.86.0)
|
|
7
7
|
dry-monads
|
|
@@ -37,17 +37,25 @@ GEM
|
|
|
37
37
|
zeitwerk (~> 2.1)
|
|
38
38
|
commonmarker (0.23.6)
|
|
39
39
|
concurrent-ruby (1.1.10)
|
|
40
|
+
config (4.1.0)
|
|
41
|
+
deep_merge (~> 1.2, >= 1.2.1)
|
|
42
|
+
dry-validation (~> 1.0, >= 1.0.0)
|
|
40
43
|
crack (0.4.5)
|
|
41
44
|
rexml
|
|
45
|
+
deep_merge (1.2.2)
|
|
42
46
|
deprecation (1.1.0)
|
|
43
47
|
activesupport
|
|
44
48
|
diff-lcs (1.5.0)
|
|
45
49
|
docile (1.4.0)
|
|
50
|
+
dry-configurable (1.0.1)
|
|
51
|
+
dry-core (~> 1.0, < 2)
|
|
52
|
+
zeitwerk (~> 2.6)
|
|
46
53
|
dry-core (1.0.0)
|
|
47
54
|
concurrent-ruby (~> 1.0)
|
|
48
55
|
zeitwerk (~> 2.6)
|
|
49
56
|
dry-inflector (1.0.0)
|
|
50
|
-
dry-
|
|
57
|
+
dry-initializer (3.1.1)
|
|
58
|
+
dry-logic (1.5.0)
|
|
51
59
|
concurrent-ruby (~> 1.0)
|
|
52
60
|
dry-core (~> 1.0, < 2)
|
|
53
61
|
zeitwerk (~> 2.6)
|
|
@@ -55,6 +63,14 @@ GEM
|
|
|
55
63
|
concurrent-ruby (~> 1.0)
|
|
56
64
|
dry-core (~> 1.0, < 2)
|
|
57
65
|
zeitwerk (~> 2.6)
|
|
66
|
+
dry-schema (1.13.0)
|
|
67
|
+
concurrent-ruby (~> 1.0)
|
|
68
|
+
dry-configurable (~> 1.0, >= 1.0.1)
|
|
69
|
+
dry-core (~> 1.0, < 2)
|
|
70
|
+
dry-initializer (~> 3.0)
|
|
71
|
+
dry-logic (>= 1.5, < 2)
|
|
72
|
+
dry-types (>= 1.7, < 2)
|
|
73
|
+
zeitwerk (~> 2.6)
|
|
58
74
|
dry-struct (1.6.0)
|
|
59
75
|
dry-core (~> 1.0, < 2)
|
|
60
76
|
dry-types (>= 1.7, < 2)
|
|
@@ -66,11 +82,17 @@ GEM
|
|
|
66
82
|
dry-inflector (~> 1.0, < 2)
|
|
67
83
|
dry-logic (>= 1.4, < 2)
|
|
68
84
|
zeitwerk (~> 2.6)
|
|
85
|
+
dry-validation (1.10.0)
|
|
86
|
+
concurrent-ruby (~> 1.0)
|
|
87
|
+
dry-core (~> 1.0, < 2)
|
|
88
|
+
dry-initializer (~> 3.0)
|
|
89
|
+
dry-schema (>= 1.12, < 2)
|
|
90
|
+
zeitwerk (~> 2.6)
|
|
69
91
|
edtf (3.1.0)
|
|
70
92
|
activesupport (>= 3.0, < 8.0)
|
|
71
93
|
equivalent-xml (0.6.0)
|
|
72
94
|
nokogiri (>= 1.4.3)
|
|
73
|
-
faraday (2.7.
|
|
95
|
+
faraday (2.7.1)
|
|
74
96
|
faraday-net_http (>= 2.0, < 3.1)
|
|
75
97
|
ruby2_keywords (>= 0.0.4)
|
|
76
98
|
faraday-net_http (3.0.2)
|
|
@@ -78,29 +100,31 @@ GEM
|
|
|
78
100
|
i18n (1.12.0)
|
|
79
101
|
concurrent-ruby (~> 1.0)
|
|
80
102
|
ice_nine (0.11.2)
|
|
81
|
-
json (2.6.
|
|
103
|
+
json (2.6.3)
|
|
82
104
|
jsonpath (1.1.2)
|
|
83
105
|
multi_json
|
|
106
|
+
launchy (2.5.0)
|
|
107
|
+
addressable (~> 2.7)
|
|
84
108
|
minitest (5.16.3)
|
|
85
109
|
multi_json (1.15.0)
|
|
86
|
-
nokogiri (1.13.
|
|
110
|
+
nokogiri (1.13.10-x86_64-darwin)
|
|
87
111
|
racc (~> 1.4)
|
|
88
|
-
nokogiri (1.13.
|
|
112
|
+
nokogiri (1.13.10-x86_64-linux)
|
|
89
113
|
racc (~> 1.4)
|
|
90
114
|
openapi3_parser (0.9.2)
|
|
91
115
|
commonmarker (~> 0.17)
|
|
92
116
|
openapi_parser (0.15.0)
|
|
93
117
|
optimist (3.0.1)
|
|
94
118
|
parallel (1.22.1)
|
|
95
|
-
parser (3.1.
|
|
119
|
+
parser (3.1.3.0)
|
|
96
120
|
ast (~> 2.4.1)
|
|
97
121
|
patience_diff (1.2.0)
|
|
98
122
|
optimist (~> 3.0)
|
|
99
|
-
public_suffix (5.0.
|
|
100
|
-
racc (1.6.
|
|
123
|
+
public_suffix (5.0.1)
|
|
124
|
+
racc (1.6.1)
|
|
101
125
|
rainbow (3.1.1)
|
|
102
126
|
rake (13.0.6)
|
|
103
|
-
regexp_parser (2.6.
|
|
127
|
+
regexp_parser (2.6.1)
|
|
104
128
|
rexml (3.2.5)
|
|
105
129
|
rspec (3.12.0)
|
|
106
130
|
rspec-core (~> 3.12.0)
|
|
@@ -111,7 +135,7 @@ GEM
|
|
|
111
135
|
rspec-expectations (3.12.0)
|
|
112
136
|
diff-lcs (>= 1.2.0, < 2.0)
|
|
113
137
|
rspec-support (~> 3.12.0)
|
|
114
|
-
rspec-mocks (3.12.
|
|
138
|
+
rspec-mocks (3.12.1)
|
|
115
139
|
diff-lcs (>= 1.2.0, < 2.0)
|
|
116
140
|
rspec-support (~> 3.12.0)
|
|
117
141
|
rspec-support (3.12.0)
|
|
@@ -119,7 +143,7 @@ GEM
|
|
|
119
143
|
rspec-core (>= 2, < 4, != 2.12.0)
|
|
120
144
|
rss (0.2.9)
|
|
121
145
|
rexml
|
|
122
|
-
rubocop (1.
|
|
146
|
+
rubocop (1.40.0)
|
|
123
147
|
json (~> 2.3)
|
|
124
148
|
parallel (~> 1.10)
|
|
125
149
|
parser (>= 3.1.2.1)
|
|
@@ -129,7 +153,7 @@ GEM
|
|
|
129
153
|
rubocop-ast (>= 1.23.0, < 2.0)
|
|
130
154
|
ruby-progressbar (~> 1.7)
|
|
131
155
|
unicode-display_width (>= 1.4.0, < 3.0)
|
|
132
|
-
rubocop-ast (1.
|
|
156
|
+
rubocop-ast (1.24.0)
|
|
133
157
|
parser (>= 3.1.1.0)
|
|
134
158
|
rubocop-rake (0.6.0)
|
|
135
159
|
rubocop (~> 1.0)
|
|
@@ -165,6 +189,8 @@ PLATFORMS
|
|
|
165
189
|
DEPENDENCIES
|
|
166
190
|
bundler (~> 2.0)
|
|
167
191
|
byebug
|
|
192
|
+
config
|
|
193
|
+
launchy
|
|
168
194
|
rake (~> 13.0)
|
|
169
195
|
rspec (~> 3.0)
|
|
170
196
|
rspec_junit_formatter
|
data/config/settings.yml
ADDED
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
authentication_proxy_url:
|
|
2
|
+
'https://sdr-api-prod.stanford.edu': 'https://argo.stanford.edu/settings/tokens'
|
|
3
|
+
'https://sdr-api-qa.stanford.edu': 'https://argo-qa.stanford.edu/settings/tokens'
|
|
4
|
+
'https://sdr-api-stage.stanford.edu': 'https://argo-stage.stanford.edu/settings/tokens'
|
data/exe/sdr
CHANGED
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require 'config'
|
|
4
|
+
|
|
5
|
+
Config.setup do |config|
|
|
6
|
+
# Name of the constant exposing loaded settings
|
|
7
|
+
config.const_name = 'Settings'
|
|
8
|
+
|
|
9
|
+
# Load environment variables from the `ENV` object and override any
|
|
10
|
+
# settings defined in files.
|
|
11
|
+
config.use_env = true
|
|
12
|
+
|
|
13
|
+
# Define ENV variable prefix deciding which variables to load into
|
|
14
|
+
# config.
|
|
15
|
+
config.env_prefix = 'SETTINGS'
|
|
16
|
+
|
|
17
|
+
# What string to use as level separator for settings loaded from ENV
|
|
18
|
+
# variables. Default value of '.' works well with Heroku, but you might
|
|
19
|
+
# want to change it for example for '__' to easy override settings from
|
|
20
|
+
# command line, where using dots in variable names might not be allowed
|
|
21
|
+
# (eg. Bash).
|
|
22
|
+
config.env_separator = '__'
|
|
23
|
+
|
|
24
|
+
# Ability to process variables names:
|
|
25
|
+
# * nil - no change
|
|
26
|
+
# * :downcase - convert to lower case
|
|
27
|
+
config.env_converter = :downcase
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
Config.load_and_set_settings('config/settings.yml')
|
data/lib/sdr_client/cli.rb
CHANGED
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
|
+
require 'launchy'
|
|
3
4
|
require 'thor'
|
|
5
|
+
require_relative 'cli/config'
|
|
4
6
|
|
|
5
7
|
module SdrClient
|
|
6
8
|
# The SDR command-line interface
|
|
@@ -31,32 +33,19 @@ module SdrClient
|
|
|
31
33
|
|
|
32
34
|
desc 'get DRUID', 'Retrieve an object from the SDR'
|
|
33
35
|
def get(druid)
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
exit(1)
|
|
36
|
+
rescue_expected_exceptions do
|
|
37
|
+
say Find.run(druid, url: options[:url], logger: Logger.new($stderr))
|
|
38
|
+
end
|
|
38
39
|
end
|
|
39
40
|
|
|
40
|
-
desc 'login', '
|
|
41
|
+
desc 'login', 'Open authentication proxy UI, or prompt for username and password, and then prompt for token (saved in ~/.sdr/credentials)'
|
|
41
42
|
def login
|
|
42
|
-
|
|
43
|
-
url: options[:url],
|
|
44
|
-
login_service: lambda do
|
|
45
|
-
{
|
|
46
|
-
email: ask('Email:'),
|
|
47
|
-
password: ask('Password:', echo: false)
|
|
48
|
-
}
|
|
49
|
-
end
|
|
50
|
-
)
|
|
51
|
-
return puts unless status.failure?
|
|
52
|
-
|
|
53
|
-
say_error status.failure
|
|
54
|
-
exit(1)
|
|
43
|
+
authentication_proxy_url ? login_via_proxy : login_via_credentials
|
|
55
44
|
end
|
|
56
45
|
|
|
57
46
|
desc 'version', 'Display the SDR CLI version'
|
|
58
47
|
def version
|
|
59
|
-
say
|
|
48
|
+
say VERSION
|
|
60
49
|
end
|
|
61
50
|
|
|
62
51
|
desc 'update DRUID', 'Update an object in the SDR'
|
|
@@ -74,12 +63,11 @@ module SdrClient
|
|
|
74
63
|
option :cocina_pipe, type: :boolean, default: false, desc: 'Indicate Cocina JSON is being piped in'
|
|
75
64
|
option :basepath, default: Dir.getwd, desc: 'Base path for the files'
|
|
76
65
|
def update(druid)
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
exit(1)
|
|
66
|
+
rescue_expected_exceptions do
|
|
67
|
+
validate_druid!(druid)
|
|
68
|
+
job_id = Update.run(druid, **options)
|
|
69
|
+
poll_for_job_complete(job_id: job_id, url: options[:url])
|
|
70
|
+
end
|
|
83
71
|
end
|
|
84
72
|
|
|
85
73
|
desc 'deposit OPTIONAL_FILES', 'Deposit (accession) an object into the SDR'
|
|
@@ -122,16 +110,63 @@ module SdrClient
|
|
|
122
110
|
|
|
123
111
|
private
|
|
124
112
|
|
|
125
|
-
def
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
return if skip_polling
|
|
130
|
-
|
|
131
|
-
poll_for_job_complete(job_id: job_id, url: opts[:url])
|
|
132
|
-
rescue SdrClient::Credentials::NoCredentialsError
|
|
133
|
-
say_error 'Log in first'
|
|
113
|
+
def rescue_expected_exceptions
|
|
114
|
+
yield
|
|
115
|
+
rescue UnexpectedResponse::TokenExpired
|
|
116
|
+
say_error 'Token has expired! Please log in again.'
|
|
134
117
|
exit(1)
|
|
118
|
+
rescue Credentials::NoCredentialsError
|
|
119
|
+
say_error 'No token found! Please log in first.'
|
|
120
|
+
exit(1)
|
|
121
|
+
end
|
|
122
|
+
|
|
123
|
+
def login_via_proxy
|
|
124
|
+
say 'Opened the configured authentication proxy in your browser. Once there, generate a new token and copy the entire value.'
|
|
125
|
+
Launchy.open(authentication_proxy_url)
|
|
126
|
+
# Some CLI environments will pop up a message about opening the URL in
|
|
127
|
+
# an existing browse. Since this is OS-dependency, and not something
|
|
128
|
+
# we can control via Launchy, just wait a bit before rendering the
|
|
129
|
+
# `ask` prompt so it's clearer to the user what's happening
|
|
130
|
+
sleep 0.5
|
|
131
|
+
token_string = ask('Paste token here:')
|
|
132
|
+
Credentials.write(token_string)
|
|
133
|
+
expiry = JSON.parse(token_string)['exp']
|
|
134
|
+
say "You are now authenticated for #{options[:url]} until #{expiry}"
|
|
135
|
+
rescue StandardError => e
|
|
136
|
+
say_error "Error logging in via proxy: #{e}"
|
|
137
|
+
exit(1)
|
|
138
|
+
end
|
|
139
|
+
|
|
140
|
+
def login_via_credentials
|
|
141
|
+
status = Login.run(
|
|
142
|
+
url: options[:url],
|
|
143
|
+
login_service: lambda do
|
|
144
|
+
{
|
|
145
|
+
email: ask('Email:'),
|
|
146
|
+
password: ask('Password:', echo: false)
|
|
147
|
+
}
|
|
148
|
+
end
|
|
149
|
+
)
|
|
150
|
+
|
|
151
|
+
return puts unless status.failure?
|
|
152
|
+
|
|
153
|
+
say_error status.failure
|
|
154
|
+
exit(1)
|
|
155
|
+
end
|
|
156
|
+
|
|
157
|
+
def authentication_proxy_url
|
|
158
|
+
@authentication_proxy_url ||= Settings.authentication_proxy_url[options[:url]]
|
|
159
|
+
end
|
|
160
|
+
|
|
161
|
+
def register_or_deposit(files:, accession:)
|
|
162
|
+
rescue_expected_exceptions do
|
|
163
|
+
opts = munge_options(options, files)
|
|
164
|
+
skip_polling = opts.delete(:skip_polling)
|
|
165
|
+
job_id = Deposit.run(accession: accession, **opts)
|
|
166
|
+
return if skip_polling
|
|
167
|
+
|
|
168
|
+
poll_for_job_complete(job_id: job_id, url: opts[:url])
|
|
169
|
+
end
|
|
135
170
|
end
|
|
136
171
|
|
|
137
172
|
def munge_options(options, files)
|
|
@@ -141,9 +176,9 @@ module SdrClient
|
|
|
141
176
|
opts[:files_metadata] = JSON.parse(options[:files_metadata]) if options[:files_metadata]
|
|
142
177
|
if options[:grouping_strategy]
|
|
143
178
|
opts[:grouping_strategy] = if options[:grouping_strategy] == 'filename'
|
|
144
|
-
|
|
179
|
+
Deposit::MatchingFileGroupingStrategy
|
|
145
180
|
else
|
|
146
|
-
|
|
181
|
+
Deposit::SingleFileGroupingStrategy
|
|
147
182
|
end
|
|
148
183
|
end
|
|
149
184
|
end
|
|
@@ -161,7 +196,7 @@ module SdrClient
|
|
|
161
196
|
say('SDR is processing your request.', nil, false)
|
|
162
197
|
result = nil
|
|
163
198
|
1.upto(60) do
|
|
164
|
-
result =
|
|
199
|
+
result = BackgroundJobResults.show(url: url, job_id: job_id)
|
|
165
200
|
break unless %w[pending processing].include?(result['status'])
|
|
166
201
|
|
|
167
202
|
# the extra args to `say` prevent appending a newline
|
data/lib/sdr_client/deposit.rb
CHANGED
|
@@ -101,7 +101,6 @@ require 'sdr_client/deposit/request'
|
|
|
101
101
|
require 'sdr_client/deposit/metadata_builder'
|
|
102
102
|
require 'sdr_client/deposit/model_process'
|
|
103
103
|
require 'sdr_client/deposit/process'
|
|
104
|
-
require 'sdr_client/deposit/unexpected_response'
|
|
105
104
|
require 'sdr_client/deposit/update_resource'
|
|
106
105
|
require 'sdr_client/deposit/update_dro_with_file_identifiers'
|
|
107
106
|
require 'sdr_client/deposit/upload_files'
|
data/lib/sdr_client/find.rb
CHANGED
|
@@ -7,9 +7,6 @@ module SdrClient
|
|
|
7
7
|
module Find
|
|
8
8
|
DRO_PATH = '/v1/resources/%<id>s'
|
|
9
9
|
|
|
10
|
-
# Raised when find returns an unsuccessful response
|
|
11
|
-
class Failed < StandardError; end
|
|
12
|
-
|
|
13
10
|
# @raise [Failed] if the find operation fails
|
|
14
11
|
# @return [String] JSON for the given Cocina object or an error
|
|
15
12
|
def self.run(druid, url:, logger: Logger.new($stdout))
|
|
@@ -17,12 +14,10 @@ module SdrClient
|
|
|
17
14
|
path = format(DRO_PATH, id: druid)
|
|
18
15
|
logger.info("Retrieving metadata from: #{path}")
|
|
19
16
|
response = connection.get(path)
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
end
|
|
25
|
-
response.body
|
|
17
|
+
return response.body if response.success?
|
|
18
|
+
|
|
19
|
+
logger.error("There was an HTTP #{response.status} error making the request: #{response.body}")
|
|
20
|
+
UnexpectedResponse.call(response)
|
|
26
21
|
end
|
|
27
22
|
end
|
|
28
23
|
end
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module SdrClient
|
|
4
|
+
# Handles unexpected responses
|
|
5
|
+
class UnexpectedResponse
|
|
6
|
+
# Raised when there is a request error (e.g.: a cocina-models version mismatch)
|
|
7
|
+
class BadRequest < StandardError; end
|
|
8
|
+
# Raised when there is a problem with the credentials
|
|
9
|
+
class Unauthorized < StandardError; end
|
|
10
|
+
# Raised when there is an expired token
|
|
11
|
+
class TokenExpired < StandardError; end
|
|
12
|
+
|
|
13
|
+
# @param [Faraday::Response] response
|
|
14
|
+
def self.call(response)
|
|
15
|
+
case response.status
|
|
16
|
+
when 400
|
|
17
|
+
raise BadRequest, "There was an error with your request: #{response.body}"
|
|
18
|
+
when 401
|
|
19
|
+
raise TokenExpired, 'Your token has expired' if response.body.match?('Signature has expired')
|
|
20
|
+
|
|
21
|
+
raise Unauthorized, 'There was an error with your credentials.'
|
|
22
|
+
else
|
|
23
|
+
raise "unexpected response: #{response.status} #{response.body}"
|
|
24
|
+
end
|
|
25
|
+
end
|
|
26
|
+
end
|
|
27
|
+
end
|
data/lib/sdr_client/version.rb
CHANGED
data/lib/sdr_client.rb
CHANGED
|
@@ -9,13 +9,13 @@ require 'active_support/core_ext/file/atomic'
|
|
|
9
9
|
require 'cocina/models'
|
|
10
10
|
|
|
11
11
|
require 'sdr_client/version'
|
|
12
|
+
require 'sdr_client/unexpected_response'
|
|
12
13
|
require 'sdr_client/deposit'
|
|
13
14
|
require 'sdr_client/update'
|
|
14
15
|
require 'sdr_client/credentials'
|
|
15
16
|
require 'sdr_client/find'
|
|
16
17
|
require 'sdr_client/login'
|
|
17
18
|
require 'sdr_client/login_prompt'
|
|
18
|
-
require 'sdr_client/cli'
|
|
19
19
|
require 'sdr_client/connection'
|
|
20
20
|
require 'sdr_client/background_job_results'
|
|
21
21
|
|
data/sdr-client.gemspec
CHANGED
|
@@ -33,6 +33,8 @@ Gem::Specification.new do |spec|
|
|
|
33
33
|
spec.add_dependency 'faraday', '>= 0.16'
|
|
34
34
|
|
|
35
35
|
spec.add_development_dependency 'bundler', '~> 2.0'
|
|
36
|
+
spec.add_development_dependency 'config'
|
|
37
|
+
spec.add_development_dependency 'launchy'
|
|
36
38
|
spec.add_development_dependency 'rake', '~> 13.0'
|
|
37
39
|
spec.add_development_dependency 'rspec', '~> 3.0'
|
|
38
40
|
spec.add_development_dependency 'rubocop', '~> 1.24'
|
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:
|
|
4
|
+
version: 2.0.0
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Justin Coyne
|
|
8
|
-
autorequire:
|
|
8
|
+
autorequire:
|
|
9
9
|
bindir: exe
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date: 2022-
|
|
11
|
+
date: 2022-12-14 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: activesupport
|
|
@@ -80,6 +80,34 @@ dependencies:
|
|
|
80
80
|
- - "~>"
|
|
81
81
|
- !ruby/object:Gem::Version
|
|
82
82
|
version: '2.0'
|
|
83
|
+
- !ruby/object:Gem::Dependency
|
|
84
|
+
name: config
|
|
85
|
+
requirement: !ruby/object:Gem::Requirement
|
|
86
|
+
requirements:
|
|
87
|
+
- - ">="
|
|
88
|
+
- !ruby/object:Gem::Version
|
|
89
|
+
version: '0'
|
|
90
|
+
type: :development
|
|
91
|
+
prerelease: false
|
|
92
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
93
|
+
requirements:
|
|
94
|
+
- - ">="
|
|
95
|
+
- !ruby/object:Gem::Version
|
|
96
|
+
version: '0'
|
|
97
|
+
- !ruby/object:Gem::Dependency
|
|
98
|
+
name: launchy
|
|
99
|
+
requirement: !ruby/object:Gem::Requirement
|
|
100
|
+
requirements:
|
|
101
|
+
- - ">="
|
|
102
|
+
- !ruby/object:Gem::Version
|
|
103
|
+
version: '0'
|
|
104
|
+
type: :development
|
|
105
|
+
prerelease: false
|
|
106
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
107
|
+
requirements:
|
|
108
|
+
- - ">="
|
|
109
|
+
- !ruby/object:Gem::Version
|
|
110
|
+
version: '0'
|
|
83
111
|
- !ruby/object:Gem::Dependency
|
|
84
112
|
name: rake
|
|
85
113
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -215,12 +243,14 @@ files:
|
|
|
215
243
|
- Rakefile
|
|
216
244
|
- bin/console
|
|
217
245
|
- bin/setup
|
|
246
|
+
- config/settings.yml
|
|
218
247
|
- exe/remove_w3cdtf_encoding_from_event_dates
|
|
219
248
|
- exe/sdr
|
|
220
249
|
- lib/sdr-client.rb
|
|
221
250
|
- lib/sdr_client.rb
|
|
222
251
|
- lib/sdr_client/background_job_results.rb
|
|
223
252
|
- lib/sdr_client/cli.rb
|
|
253
|
+
- lib/sdr_client/cli/config.rb
|
|
224
254
|
- lib/sdr_client/connection.rb
|
|
225
255
|
- lib/sdr_client/credentials.rb
|
|
226
256
|
- lib/sdr_client/deposit.rb
|
|
@@ -241,7 +271,6 @@ files:
|
|
|
241
271
|
- lib/sdr_client/deposit/process.rb
|
|
242
272
|
- lib/sdr_client/deposit/request.rb
|
|
243
273
|
- lib/sdr_client/deposit/single_file_grouping_strategy.rb
|
|
244
|
-
- lib/sdr_client/deposit/unexpected_response.rb
|
|
245
274
|
- lib/sdr_client/deposit/update_dro_with_file_identifiers.rb
|
|
246
275
|
- lib/sdr_client/deposit/update_resource.rb
|
|
247
276
|
- lib/sdr_client/deposit/upload_files.rb
|
|
@@ -249,6 +278,7 @@ files:
|
|
|
249
278
|
- lib/sdr_client/find.rb
|
|
250
279
|
- lib/sdr_client/login.rb
|
|
251
280
|
- lib/sdr_client/login_prompt.rb
|
|
281
|
+
- lib/sdr_client/unexpected_response.rb
|
|
252
282
|
- lib/sdr_client/update.rb
|
|
253
283
|
- lib/sdr_client/version.rb
|
|
254
284
|
- sdr-client.gemspec
|
|
@@ -259,7 +289,7 @@ metadata:
|
|
|
259
289
|
source_code_uri: https://github.com/sul-dlss/sdr-client
|
|
260
290
|
changelog_uri: https://github.com/sul-dlss/sdr-client/releases
|
|
261
291
|
rubygems_mfa_required: 'true'
|
|
262
|
-
post_install_message:
|
|
292
|
+
post_install_message:
|
|
263
293
|
rdoc_options: []
|
|
264
294
|
require_paths:
|
|
265
295
|
- lib
|
|
@@ -274,8 +304,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
|
274
304
|
- !ruby/object:Gem::Version
|
|
275
305
|
version: '0'
|
|
276
306
|
requirements: []
|
|
277
|
-
rubygems_version: 3.
|
|
278
|
-
signing_key:
|
|
307
|
+
rubygems_version: 3.2.32
|
|
308
|
+
signing_key:
|
|
279
309
|
specification_version: 4
|
|
280
310
|
summary: The CLI for https://github.com/sul-dlss/sdr-api
|
|
281
311
|
test_files: []
|
|
@@ -1,25 +0,0 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
module SdrClient
|
|
4
|
-
module Deposit
|
|
5
|
-
# Handles unexpected responses when manipulating resources
|
|
6
|
-
class UnexpectedResponse
|
|
7
|
-
# Raised when there is a request error (e.g.: a cocina-models version mismatch)
|
|
8
|
-
class BadRequest < StandardError; end
|
|
9
|
-
# Raised when there is a problem with the credentials
|
|
10
|
-
class Unauthorized < StandardError; end
|
|
11
|
-
|
|
12
|
-
# @param [Faraday::Response] response
|
|
13
|
-
def self.call(response)
|
|
14
|
-
case response.status
|
|
15
|
-
when 400
|
|
16
|
-
raise BadRequest, "There was an error with your request: #{response.body}"
|
|
17
|
-
when 401
|
|
18
|
-
raise Unauthorized, 'There was an error with your credentials. Perhaps they have expired?'
|
|
19
|
-
else
|
|
20
|
-
raise "unexpected response: #{response.status} #{response.body}"
|
|
21
|
-
end
|
|
22
|
-
end
|
|
23
|
-
end
|
|
24
|
-
end
|
|
25
|
-
end
|