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 +4 -4
- data/README.md +2 -0
- data/lib/sdr_client/deposit.rb +3 -1
- data/lib/sdr_client/deposit/file_metadata_builder.rb +51 -0
- data/lib/sdr_client/deposit/file_metadata_builder_operations/md5.rb +17 -0
- data/lib/sdr_client/deposit/file_metadata_builder_operations/mime_type.rb +17 -0
- data/lib/sdr_client/deposit/file_metadata_builder_operations/sha1.rb +17 -0
- data/lib/sdr_client/deposit/metadata_builder.rb +10 -3
- data/lib/sdr_client/version.rb +1 -1
- metadata +6 -2
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 51cea2d7a34db14a8fbef003f8e02b8db1483344724e2d1201fce2b3075f7fb7
|
|
4
|
+
data.tar.gz: 0654575a55dca1ee8bc9764c02a5d512e90cba6ad257780f1938643968e8dd58
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
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`
|
data/lib/sdr_client/deposit.rb
CHANGED
|
@@ -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:
|
|
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
|
-
|
|
34
|
-
|
|
35
|
-
|
|
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
|
data/lib/sdr_client/version.rb
CHANGED
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.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-
|
|
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
|