sdr-client 0.15.2 → 0.16.0
Sign up to get free protection for your applications and to get access to all the features.
- 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
|