sdr-client 0.15.2 → 0.16.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: 4fbf18f89def752a295fe6004aef3a08aed6809d023041aad877619a8309865f
4
- data.tar.gz: 608e8c9670b3c929f8a7639c20ed34f4b924f561aed295a42162620ef007d146
3
+ metadata.gz: 51cea2d7a34db14a8fbef003f8e02b8db1483344724e2d1201fce2b3075f7fb7
4
+ data.tar.gz: 0654575a55dca1ee8bc9764c02a5d512e90cba6ad257780f1938643968e8dd58
5
5
  SHA512:
6
- metadata.gz: 65633ede9a98646d7e722a6b7d42c761c2a8bc04aec21010ba7187ccfdd3fc5ebd79781140f566b0733a2cb9b87c1f0d14f2cf05de3a483dc45d2ea9fa3c6ed5
7
- data.tar.gz: 752f5ce61da771161af8e66e7e0f2ad98ba9e2b6cdf406aa4f82cbf35d9b3ca77926fc5a3a4615393abe67aebd0368342f93145b6137b0f212e9611c39fd5c4c
6
+ metadata.gz: 6b304533c8b61c34b03a4e40875b2bd3c8d2e50bf5fba6c104327a769248aaaaace4151e5a8033f2b214e87316f8065b63c880057a0a631adb94a74ff779097a
7
+ data.tar.gz: b43e02b8160340b06bebf30642f65f885f73c25398d5f5190bd7453f0a99939f1d824535eefe83601b572f7e221b79069459d2959bef7401bd45bf5600ef2fd9
data/README.md CHANGED
@@ -8,6 +8,8 @@
8
8
  This is a CLI for interacting with the Stanford Digital Repository API.
9
9
  The code for the SDR API server is at https://github.com/sul-dlss/sdr-api
10
10
 
11
+ This provides a way for consumers to easily and correctly deposit files to the SDR without requiring access to the `/dor` NFS mount or to use Hydrus. A primary design goal was for this to have as few dependencies as possible so that it can be easily distributed by `gem install sdr-client` and then it can be used as a CLI.
12
+
11
13
  ## Install
12
14
 
13
15
  `gem install sdr-client`
@@ -26,6 +26,7 @@ module SdrClient
26
26
  logger: Logger.new(STDOUT))
27
27
  token = Credentials.read
28
28
 
29
+ augmented_metadata = FileMetadataBuilder.build(files: files, files_metadata: files_metadata)
29
30
  metadata = Request.new(label: label,
30
31
  type: type,
31
32
  access: access,
@@ -38,7 +39,7 @@ module SdrClient
38
39
  embargo_release_date: embargo_release_date,
39
40
  embargo_access: embargo_access,
40
41
  viewing_direction: viewing_direction,
41
- files_metadata: files_metadata)
42
+ files_metadata: augmented_metadata)
42
43
  Process.new(metadata: metadata, url: url, token: token, files: files,
43
44
  grouping_strategy: grouping_strategy, logger: logger).run
44
45
  end
@@ -52,6 +53,7 @@ require 'sdr_client/deposit/matching_file_grouping_strategy'
52
53
  require 'sdr_client/deposit/files/direct_upload_request'
53
54
  require 'sdr_client/deposit/files/direct_upload_response'
54
55
  require 'sdr_client/deposit/file'
56
+ require 'sdr_client/deposit/file_metadata_builder'
55
57
  require 'sdr_client/deposit/file_set'
56
58
  require 'sdr_client/deposit/request'
57
59
  require 'sdr_client/deposit/upload_files'
@@ -0,0 +1,51 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'sdr_client/deposit/file_metadata_builder_operations/mime_type'
4
+ require 'sdr_client/deposit/file_metadata_builder_operations/md5'
5
+ require 'sdr_client/deposit/file_metadata_builder_operations/sha1'
6
+
7
+ module SdrClient
8
+ module Deposit
9
+ # Build basic metadata for files, iterating over a series of operations
10
+ # The available options are here: https://github.com/sul-dlss/sdr-client/blob/v0.8.1/lib/sdr_client/deposit/file.rb#L8-L10
11
+ class FileMetadataBuilder
12
+ OPERATIONS = [
13
+ FileMetadataBuilderOperations::MimeType,
14
+ FileMetadataBuilderOperations::MD5,
15
+ FileMetadataBuilderOperations::SHA1
16
+ ].freeze
17
+ private_constant :OPERATIONS
18
+
19
+ # @param (see #initialize)
20
+ # @return (see #build)
21
+ def self.build(files:, files_metadata:)
22
+ new(files: files, files_metadata: files_metadata.dup).build
23
+ end
24
+
25
+ # @param [Array<String>] files the list of files for which to generate metadata
26
+ def initialize(files:, files_metadata:)
27
+ @files = files
28
+ @files_metadata = files_metadata
29
+ end
30
+
31
+ # @return [Hash<String, Hash<String, String>>]
32
+ def build
33
+ files.each do |file_path|
34
+ file_key = ::File.basename(file_path)
35
+ OPERATIONS.each do |operation|
36
+ result = operation.for(file_path: file_path)
37
+ next if result.nil?
38
+
39
+ files_metadata[file_key] ||= {}
40
+ files_metadata[file_key][operation::NAME] = result
41
+ end
42
+ end
43
+ files_metadata
44
+ end
45
+
46
+ private
47
+
48
+ attr_reader :files, :files_metadata
49
+ end
50
+ end
51
+ end
@@ -0,0 +1,17 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'digest'
4
+
5
+ module SdrClient
6
+ module Deposit
7
+ module FileMetadataBuilderOperations
8
+ # MD5 for this file.
9
+ class MD5
10
+ NAME = 'md5'
11
+ def self.for(file_path:, **)
12
+ Digest::MD5.file(file_path).hexdigest
13
+ end
14
+ end
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,17 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'digest'
4
+
5
+ module SdrClient
6
+ module Deposit
7
+ module FileMetadataBuilderOperations
8
+ # Mime-type for this file.
9
+ class MimeType
10
+ NAME = 'mime_type'
11
+ def self.for(file_path:, **)
12
+ `file --mime-type -b #{file_path}`.chomp
13
+ end
14
+ end
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,17 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'digest'
4
+
5
+ module SdrClient
6
+ module Deposit
7
+ module FileMetadataBuilderOperations
8
+ # SHA1 for this file.
9
+ class SHA1
10
+ NAME = 'sha1'
11
+ def self.for(file_path:, **)
12
+ Digest::SHA1.file(file_path).hexdigest
13
+ end
14
+ end
15
+ end
16
+ end
17
+ end
@@ -30,9 +30,16 @@ module SdrClient
30
30
  def build_filesets(uploads:)
31
31
  grouped_uploads = grouping_strategy.run(uploads: uploads)
32
32
  grouped_uploads.map.with_index(1) do |upload_group, i|
33
- metadata_group = {}
34
- upload_group.each { |upload| metadata_group[upload.filename] = metadata.for(upload.filename) }
35
- FileSet.new(uploads: upload_group, uploads_metadata: metadata_group, label: "Object #{i}")
33
+ FileSet.new(uploads: upload_group,
34
+ uploads_metadata: metadata_group(upload_group),
35
+ label: "Object #{i}")
36
+ end
37
+ end
38
+
39
+ # Get the metadata for the files belonging to a fileset
40
+ def metadata_group(upload_group)
41
+ upload_group.each_with_object({}) do |upload, obj|
42
+ obj[upload.filename] = metadata.for(upload.filename)
36
43
  end
37
44
  end
38
45
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module SdrClient
4
- VERSION = '0.15.2'
4
+ VERSION = '0.16.0'
5
5
  end
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.15.2
4
+ version: 0.16.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-03-04 00:00:00.000000000 Z
11
+ date: 2020-03-05 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: dry-monads
@@ -164,6 +164,10 @@ files:
164
164
  - lib/sdr_client/credentials.rb
165
165
  - lib/sdr_client/deposit.rb
166
166
  - lib/sdr_client/deposit/file.rb
167
+ - lib/sdr_client/deposit/file_metadata_builder.rb
168
+ - lib/sdr_client/deposit/file_metadata_builder_operations/md5.rb
169
+ - lib/sdr_client/deposit/file_metadata_builder_operations/mime_type.rb
170
+ - lib/sdr_client/deposit/file_metadata_builder_operations/sha1.rb
167
171
  - lib/sdr_client/deposit/file_set.rb
168
172
  - lib/sdr_client/deposit/files/direct_upload_request.rb
169
173
  - lib/sdr_client/deposit/files/direct_upload_response.rb