sdr-client 0.32.0 → 0.36.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: ab735da1159debb159fee1765bf30b81ca739175dd77322c82a6c742b4264a80
4
- data.tar.gz: 8abdd10178c83921df47ef09ef19c75fb982585644c2d039e656b93b3a8ba2b9
3
+ metadata.gz: 7652ddb5f3116fb2ecefabb265718c0bd2e69d536955a22ebb7139cc287a38a1
4
+ data.tar.gz: cbb4118974499de9f6c7ad10df1433c4aee712b309ee1c8064cd14602cf08808
5
5
  SHA512:
6
- metadata.gz: 30117e4a96a0e0119932e999b5255b529afdd7770cab2b26654359913b31385168bebe4540e40d630eaf78844ed3fa35a465e922894c8f8cc2b776288c281113
7
- data.tar.gz: 7c7ba5b910f5bca9cc455f6d1e0e3af22aac2713bd9bc56c5b06af328eccaf9edc113d1759a9af6e43048352e45fa137e6b4799912476eb125d181922a97b136
6
+ metadata.gz: d47cc4fbbf26c51df56ba79c4cf97ea3c1add9b8aa2c8f5e78a8bf51f639a15a7bbcbc912f058a2b43d29ced7981623c4f26aafc9b66b5837ae3c17796325f99
7
+ data.tar.gz: 107a93bbaf7fde4915bcfb2939853946aff4c0d5fbc3bfede4aeea1971cab270969a3b6406df66b9a44dced0cee70e6627e619aefff3d0803242b7c033ea13f0
@@ -52,6 +52,7 @@ module SdrClient
52
52
  # rubocop:enable Metrics/MethodLength
53
53
  # rubocop:enable Metrics/ParameterLists
54
54
 
55
+ # @param [Array<String>] files absolute paths to files
55
56
  def self.model_run(request_dro:,
56
57
  files: [],
57
58
  url:,
@@ -78,5 +79,7 @@ require 'sdr_client/deposit/request'
78
79
  require 'sdr_client/deposit/metadata_builder'
79
80
  require 'sdr_client/deposit/model_process'
80
81
  require 'sdr_client/deposit/process'
82
+ require 'sdr_client/deposit/update_dro_with_file_identifiers'
81
83
  require 'sdr_client/deposit/upload_files'
84
+ require 'sdr_client/deposit/upload_files_metadata_builder'
82
85
  require 'sdr_client/deposit/upload_resource'
@@ -24,11 +24,11 @@ module SdrClient
24
24
  check_files_exist
25
25
  child_files_match
26
26
 
27
- upload_responses = UploadFiles.new(files: files,
28
- logger: logger,
29
- connection: connection,
30
- mime_types: mime_types).run
31
- new_request_dro = with_external_identifiers(upload_responses)
27
+ file_metadata = UploadFilesMetadataBuilder.build(files: files, mime_types: mime_types)
28
+ upload_responses = UploadFiles.upload(file_metadata: file_metadata,
29
+ logger: logger,
30
+ connection: connection)
31
+ new_request_dro = UpdateDroWithFileIdentifiers.update(request_dro: request_dro, upload_responses: upload_responses)
32
32
  UploadResource.run(accession: @accession,
33
33
  metadata: new_request_dro.to_json,
34
34
  logger: logger,
@@ -73,7 +73,9 @@ module SdrClient
73
73
 
74
74
  # Map of filenames to request files
75
75
  def request_files
76
- @request_files ||=
76
+ @request_files ||= begin
77
+ return {} unless request_dro.structural
78
+
77
79
  Hash[
78
80
  request_dro.structural.contains.map do |file_set|
79
81
  file_set.structural.contains.map do |file|
@@ -81,20 +83,7 @@ module SdrClient
81
83
  end
82
84
  end.flatten(1)
83
85
  ]
84
- end
85
-
86
- def with_external_identifiers(upload_responses)
87
- signed_id_map = Hash[upload_responses.map { |response| [response.filename, response.signed_id] }]
88
-
89
- # Manipulating request_dro as hash since immutable
90
- request_dro_hash = request_dro.to_h
91
- request_dro_hash[:structural][:contains].each do |file_set|
92
- file_set[:structural][:contains].each do |file|
93
- file[:externalIdentifier] = signed_id_map[file[:filename]]
94
- end
95
86
  end
96
-
97
- Cocina::Models::RequestDRO.new(request_dro_hash)
98
87
  end
99
88
  end
100
89
  end
@@ -29,10 +29,11 @@ module SdrClient
29
29
  # @return [String] job id for the background job result
30
30
  def run
31
31
  check_files_exist
32
- upload_responses = UploadFiles.new(files: files,
33
- logger: logger,
34
- connection: connection,
35
- mime_types: mime_types).run
32
+
33
+ file_metadata = UploadFilesMetadataBuilder.build(files: files, mime_types: mime_types)
34
+ upload_responses = UploadFiles.upload(file_metadata: file_metadata,
35
+ logger: logger,
36
+ connection: connection)
36
37
  metadata_builder = MetadataBuilder.new(metadata: metadata,
37
38
  grouping_strategy: grouping_strategy,
38
39
  logger: logger)
@@ -0,0 +1,35 @@
1
+ # frozen_string_literal: true
2
+
3
+ module SdrClient
4
+ module Deposit
5
+ # Updates a DRO so that the structural metadata references the uploaded file ids
6
+ class UpdateDroWithFileIdentifiers
7
+ # @param [Cocina::Model::RequestDRO] request_dro for depositing
8
+ # @param [Array<Files::DirectUploadResponse>] upload_responses the responses from uploading files
9
+ # @returns [Cocina::Models::RequestDRO]
10
+ def self.update(request_dro:, upload_responses:)
11
+ # Manipulating request_dro as hash since immutable
12
+ structural = request_dro.to_h[:structural]
13
+ return request_dro.new({}) unless structural
14
+
15
+ signed_ids = signed_id_map(upload_responses)
16
+ request_dro.new(structural: updated_structural(structural, signed_ids))
17
+ end
18
+
19
+ def self.signed_id_map(upload_responses)
20
+ Hash[upload_responses.map { |response| [response.filename, response.signed_id] }]
21
+ end
22
+ private_class_method :signed_id_map
23
+
24
+ def self.updated_structural(structural, signed_ids)
25
+ structural[:contains].each do |file_set|
26
+ file_set[:structural][:contains].each do |file|
27
+ file[:externalIdentifier] = signed_ids[file[:filename]]
28
+ end
29
+ end
30
+ structural
31
+ end
32
+ private_class_method :updated_structural
33
+ end
34
+ end
35
+ end
@@ -7,40 +7,34 @@ module SdrClient
7
7
  # The file uploading part of a deposit
8
8
  class UploadFiles
9
9
  BLOB_PATH = '/v1/direct_uploads'
10
- # @param [Array<String>] files a list of filepaths to upload
10
+ # @param [Hash<String,Files::DirectUploadRequest>] the metadata for uploading the files
11
11
  # @param [Logger] logger the logger to use
12
12
  # @param [Connection] connection
13
- # @param [Hash<String,String] mime_types a map of filenames to mime types
14
- def initialize(files:, mime_types:, logger:, connection:)
15
- @files = files
16
- @mime_types = mime_types
13
+ def self.upload(file_metadata:, logger:, connection:)
14
+ new(file_metadata: file_metadata, logger: logger, connection: connection).run
15
+ end
16
+
17
+ # @param [Hash<String,Files::DirectUploadRequest>] the metadata for uploading the files
18
+ # @param [Logger] logger the logger to use
19
+ # @param [Connection] connection
20
+ def initialize(file_metadata:, logger:, connection:)
21
+ @file_metadata = file_metadata
17
22
  @logger = logger
18
23
  @connection = connection
19
24
  end
20
25
 
21
26
  # @return [Array<SdrClient::Deposit::Files::DirectUploadResponse>] the responses from the server for the uploads
22
27
  def run
23
- file_metadata = collect_file_metadata
24
- upload_responses = upload_file_metadata(file_metadata)
28
+ upload_responses = upload_file_metadata
25
29
  upload_files(upload_responses)
26
30
  upload_responses.values
27
31
  end
28
32
 
29
33
  private
30
34
 
31
- attr_reader :files, :mime_types, :logger, :connection
32
-
33
- def collect_file_metadata
34
- files.each_with_object({}) do |path, obj|
35
- file_name = ::File.basename(path)
36
- obj[path] = Files::DirectUploadRequest.from_file(path,
37
- file_name: file_name,
38
- content_type: mime_types[file_name])
39
- end
40
- end
35
+ attr_reader :logger, :connection, :file_metadata
41
36
 
42
- # @param [Hash<String,Files::DirectUploadRequest>] file_metadata the filenames and their upload request
43
- def upload_file_metadata(file_metadata)
37
+ def upload_file_metadata
44
38
  Hash[file_metadata.map { |filename, metadata| [filename, direct_upload(metadata.to_json)] }]
45
39
  end
46
40
 
@@ -0,0 +1,45 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'logger'
4
+
5
+ module SdrClient
6
+ module Deposit
7
+ # Collecting all the metadata about the files for a deposit
8
+ class UploadFilesMetadataBuilder
9
+ # @param [Array<String>] files a list of filepaths to upload
10
+ # @param [Hash<String,String>] mime_types a map of filenames to mime types
11
+ # @return [Hash<String, Files::DirectUploadRequest>] the metadata for uploading the files
12
+ def self.build(files:, mime_types:)
13
+ new(files: files, mime_types: mime_types).build
14
+ end
15
+
16
+ # @param [Array<String>] files a list of filepaths to upload
17
+ # @param [Hash<String,String>] mime_types a map of filenames to mime types
18
+ def initialize(files:, mime_types:)
19
+ @files = files
20
+ @mime_types = mime_types
21
+ end
22
+
23
+ attr_reader :files, :mime_types
24
+
25
+ # @return [Hash<String, Files::DirectUploadRequest>] the metadata for uploading the files
26
+ def build
27
+ files.each_with_object({}) do |path, obj|
28
+ obj[path] = Files::DirectUploadRequest.from_file(path,
29
+ file_name: filename_for(path),
30
+ content_type: mime_type_for(path))
31
+ end
32
+ end
33
+
34
+ # This can be overridden in the case that the file on disk has a different
35
+ # name than we want to repo to know about.
36
+ def filename_for(file_path)
37
+ ::File.basename(file_path)
38
+ end
39
+
40
+ def mime_type_for(file_path)
41
+ mime_types[filename_for(file_path)]
42
+ end
43
+ end
44
+ end
45
+ end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module SdrClient
4
- VERSION = '0.32.0'
4
+ VERSION = '0.36.0'
5
5
  end
@@ -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.39.0'
31
+ spec.add_dependency 'cocina-models', '~> 0.42.1'
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.32.0
4
+ version: 0.36.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-09-08 00:00:00.000000000 Z
11
+ date: 2020-11-04 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.39.0
33
+ version: 0.42.1
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.39.0
40
+ version: 0.42.1
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: dry-monads
43
43
  requirement: !ruby/object:Gem::Requirement
@@ -207,7 +207,9 @@ files:
207
207
  - lib/sdr_client/deposit/process.rb
208
208
  - lib/sdr_client/deposit/request.rb
209
209
  - lib/sdr_client/deposit/single_file_grouping_strategy.rb
210
+ - lib/sdr_client/deposit/update_dro_with_file_identifiers.rb
210
211
  - lib/sdr_client/deposit/upload_files.rb
212
+ - lib/sdr_client/deposit/upload_files_metadata_builder.rb
211
213
  - lib/sdr_client/deposit/upload_resource.rb
212
214
  - lib/sdr_client/login.rb
213
215
  - lib/sdr_client/login_prompt.rb
@@ -234,7 +236,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
234
236
  - !ruby/object:Gem::Version
235
237
  version: '0'
236
238
  requirements: []
237
- rubygems_version: 3.1.2
239
+ rubygems_version: 3.1.4
238
240
  signing_key:
239
241
  specification_version: 4
240
242
  summary: The CLI for https://github.com/sul-dlss/sdr-api