sdr-client 0.97.0 → 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: c562c90ba48ff8d6168c1c7488537bde46faab61ec81963de5917776ffa9f079
4
- data.tar.gz: 1e22559c270a5312f975a382c87daac40af750c24755f62c02873775d07c0855
3
+ metadata.gz: a66643c6ea7e08e14f529c7e5396a5037ab39cae895fa65bb7ddf7a6d98ca93c
4
+ data.tar.gz: 7a7986eb90c7de9eb1f4b0335e4bae0981fe2679ac2317de2f66daaee92f141f
5
5
  SHA512:
6
- metadata.gz: 5aa3b0ff99dfedf0751c5c0f9782d5c17b0092a5aa98a222e9f15c0011945f6fa67403f82334bcdfc6d405883e49682032dee0b498a1a0f56d7b84a52cf36756
7
- data.tar.gz: ed9acb2561e273f516804b60b734d3a4c900b79c3648bfa62cde33d3164ab42e27d13d675233ca45f3f1f0d75314cca3702810a0a9ed3a9f7b68359332f12a89
6
+ metadata.gz: 8fc2bb28ace65e03d8cf5336b080924a7ed6d2899cf5d2d54459b38b3d2849738cdaf9bee4fb8021a5b174f3062410748e20345cba9e10e42690995d4e0cd9f9
7
+ data.tar.gz: 4a3dcc3903a17266469c3ad2ca18c2d3fbb7ff57b1711b5753993a5202361d7cb9b526fbef9806a31daabcebc307cae4ba052b5f185bd6a34bfb75e694fbfd11
data/.rubocop.yml CHANGED
@@ -27,6 +27,9 @@ Naming/FileName:
27
27
  Exclude:
28
28
  - 'lib/sdr-client.rb'
29
29
 
30
+ RSpec/MultipleMemoizedHelpers:
31
+ Enabled: false
32
+
30
33
  Gemspec/DeprecatedAttributeAssignment: # new in 1.10
31
34
  Enabled: true
32
35
  Gemspec/RequireMFA: # new in 1.23
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- sdr-client (0.97.0)
4
+ sdr-client (1.0.0)
5
5
  activesupport
6
6
  cocina-models (~> 0.86.0)
7
7
  dry-monads
@@ -18,7 +18,7 @@ GEM
18
18
  addressable (2.8.1)
19
19
  public_suffix (>= 2.0.2, < 6.0)
20
20
  ast (2.4.2)
21
- attr_extras (6.2.5)
21
+ attr_extras (7.0.0)
22
22
  byebug (11.1.3)
23
23
  cocina-models (0.86.0)
24
24
  activesupport
@@ -43,40 +43,37 @@ GEM
43
43
  activesupport
44
44
  diff-lcs (1.5.0)
45
45
  docile (1.4.0)
46
- dry-container (0.11.0)
47
- concurrent-ruby (~> 1.0)
48
- dry-core (0.9.1)
46
+ dry-core (1.0.0)
49
47
  concurrent-ruby (~> 1.0)
50
48
  zeitwerk (~> 2.6)
51
- dry-inflector (0.3.0)
52
- dry-logic (1.3.0)
49
+ dry-inflector (1.0.0)
50
+ dry-logic (1.4.0)
53
51
  concurrent-ruby (~> 1.0)
54
- dry-core (~> 0.9, >= 0.9)
52
+ dry-core (~> 1.0, < 2)
55
53
  zeitwerk (~> 2.6)
56
- dry-monads (1.5.0)
54
+ dry-monads (1.6.0)
57
55
  concurrent-ruby (~> 1.0)
58
- dry-core (~> 0.9, >= 0.9)
56
+ dry-core (~> 1.0, < 2)
59
57
  zeitwerk (~> 2.6)
60
- dry-struct (1.5.2)
61
- dry-core (~> 0.9, >= 0.9)
62
- dry-types (~> 1.6)
58
+ dry-struct (1.6.0)
59
+ dry-core (~> 1.0, < 2)
60
+ dry-types (>= 1.7, < 2)
63
61
  ice_nine (~> 0.11)
64
62
  zeitwerk (~> 2.6)
65
- dry-types (1.6.1)
63
+ dry-types (1.7.0)
66
64
  concurrent-ruby (~> 1.0)
67
- dry-container (~> 0.3)
68
- dry-core (~> 0.9, >= 0.9)
69
- dry-inflector (~> 0.1, >= 0.1.2)
70
- dry-logic (~> 1.3, >= 1.3)
65
+ dry-core (~> 1.0, < 2)
66
+ dry-inflector (~> 1.0, < 2)
67
+ dry-logic (>= 1.4, < 2)
71
68
  zeitwerk (~> 2.6)
72
69
  edtf (3.1.0)
73
70
  activesupport (>= 3.0, < 8.0)
74
71
  equivalent-xml (0.6.0)
75
72
  nokogiri (>= 1.4.3)
76
- faraday (2.6.0)
73
+ faraday (2.7.0)
77
74
  faraday-net_http (>= 2.0, < 3.1)
78
75
  ruby2_keywords (>= 0.0.4)
79
- faraday-net_http (3.0.1)
76
+ faraday-net_http (3.0.2)
80
77
  hashdiff (1.0.1)
81
78
  i18n (1.12.0)
82
79
  concurrent-ruby (~> 1.0)
@@ -122,7 +119,7 @@ GEM
122
119
  rspec-core (>= 2, < 4, != 2.12.0)
123
120
  rss (0.2.9)
124
121
  rexml
125
- rubocop (1.37.1)
122
+ rubocop (1.39.0)
126
123
  json (~> 2.3)
127
124
  parallel (~> 1.10)
128
125
  parser (>= 3.1.2.1)
@@ -136,7 +133,7 @@ GEM
136
133
  parser (>= 3.1.1.0)
137
134
  rubocop-rake (0.6.0)
138
135
  rubocop (~> 1.0)
139
- rubocop-rspec (2.14.2)
136
+ rubocop-rspec (2.15.0)
140
137
  rubocop (~> 1.33)
141
138
  ruby-progressbar (1.11.0)
142
139
  ruby2_keywords (0.0.5)
@@ -158,7 +155,7 @@ GEM
158
155
  addressable (>= 2.8.0)
159
156
  crack (>= 0.3.2)
160
157
  hashdiff (>= 0.4.0, < 2.0.0)
161
- zeitwerk (2.6.4)
158
+ zeitwerk (2.6.6)
162
159
 
163
160
  PLATFORMS
164
161
  x86_64-darwin-19
@@ -72,6 +72,7 @@ module SdrClient
72
72
  option :cdl, type: :boolean, default: false, desc: 'Controlled digital lending'
73
73
  option :cocina_file, desc: 'Path to a file containing Cocina JSON'
74
74
  option :cocina_pipe, type: :boolean, default: false, desc: 'Indicate Cocina JSON is being piped in'
75
+ option :basepath, default: Dir.getwd, desc: 'Base path for the files'
75
76
  def update(druid)
76
77
  validate_druid!(druid)
77
78
  job_id = SdrClient::Update.run(druid, **options)
@@ -95,6 +96,7 @@ module SdrClient
95
96
  option :view, enum: %w[world stanford location-based citation-only dark], desc: 'Access view level for the object'
96
97
  option :files_metadata, desc: 'JSON string representing per-file metadata'
97
98
  option :grouping_strategy, enum: %w[default filename], desc: 'Strategy for grouping files into filesets'
99
+ option :basepath, default: Dir.getwd, desc: 'Base path for the files'
98
100
  def deposit(*files)
99
101
  register_or_deposit(files: files, accession: true)
100
102
  end
@@ -113,6 +115,7 @@ module SdrClient
113
115
  option :view, enum: %w[world stanford location-based citation-only dark], desc: 'Access view level for the object'
114
116
  option :files_metadata, desc: 'JSON string representing per-file metadata'
115
117
  option :grouping_strategy, enum: %w[default filename], desc: 'Strategy for grouping files into filesets'
118
+ option :basepath, default: Dir.getwd, desc: 'Base path for the files'
116
119
  def register(*files)
117
120
  register_or_deposit(files: files, accession: false)
118
121
  end
@@ -18,25 +18,26 @@ module SdrClient
18
18
 
19
19
  # @param (see #initialize)
20
20
  # @return (see #build)
21
- def self.build(files:, files_metadata:)
22
- new(files: files, files_metadata: files_metadata.dup).build
21
+ def self.build(files:, files_metadata:, basepath:)
22
+ new(files: files, files_metadata: files_metadata.dup, basepath: basepath).build
23
23
  end
24
24
 
25
- # @param [Array<String>] files the list of files for which to generate metadata
26
- def initialize(files:, files_metadata:)
25
+ # @param [Array<String>] files the list of relative filepaths for which to generate metadata
26
+ def initialize(files:, files_metadata:, basepath:)
27
27
  @files = files
28
28
  @files_metadata = files_metadata
29
+ @basepath = basepath
29
30
  end
30
31
 
31
- # @return [Hash<String, Hash<String, String>>]
32
+ # @return [Hash<String, Hash<String, String>>] a map of relative filepaths to a map of metadata
32
33
  def build
33
- files.each do |file_path|
34
+ files.each do |filepath|
34
35
  OPERATIONS.each do |operation|
35
- result = operation.for(file_path: file_path)
36
+ result = operation.for(filepath: absolute_filepath_for(filepath))
36
37
  next if result.nil?
37
38
 
38
- files_metadata[file_path] ||= {}
39
- files_metadata[file_path][operation::NAME] = result
39
+ files_metadata[filepath] ||= {}
40
+ files_metadata[filepath][operation::NAME] = result
40
41
  end
41
42
  end
42
43
  files_metadata
@@ -44,7 +45,11 @@ module SdrClient
44
45
 
45
46
  private
46
47
 
47
- attr_reader :files, :files_metadata
48
+ attr_reader :files, :files_metadata, :basepath
49
+
50
+ def absolute_filepath_for(filepath)
51
+ ::File.join(basepath, filepath)
52
+ end
48
53
  end
49
54
  end
50
55
  end
@@ -8,8 +8,8 @@ module SdrClient
8
8
  # MD5 for this file.
9
9
  class MD5
10
10
  NAME = 'md5'
11
- def self.for(file_path:, **)
12
- Digest::MD5.file(file_path).hexdigest
11
+ def self.for(filepath:, **)
12
+ Digest::MD5.file(filepath).hexdigest
13
13
  end
14
14
  end
15
15
  end
@@ -8,8 +8,8 @@ module SdrClient
8
8
  # Mime-type for this file.
9
9
  class MimeType
10
10
  NAME = 'mime_type'
11
- def self.for(file_path:, **)
12
- argv = Shellwords.escape(file_path)
11
+ def self.for(filepath:, **)
12
+ argv = Shellwords.escape(filepath)
13
13
  `file --mime-type -b #{argv}`.chomp
14
14
  end
15
15
  end
@@ -8,8 +8,8 @@ module SdrClient
8
8
  # SHA1 for this file.
9
9
  class SHA1
10
10
  NAME = 'sha1'
11
- def self.for(file_path:, **)
12
- Digest::SHA1.file(file_path).hexdigest
11
+ def self.for(filepath:, **)
12
+ Digest::SHA1.file(filepath).hexdigest
13
13
  end
14
14
  end
15
15
  end
@@ -11,17 +11,20 @@ module SdrClient
11
11
  # @param [Boolean] accession should the accessionWF be started
12
12
  # @param [String] priority (nil) what processing priority should be used
13
13
  # either 'low' or 'default'
14
- # @param [Array<String>] files a list of file names to upload
14
+ # @param [Array<String>] files a list of relative filepaths to upload
15
+ # @param [String] basepath filepath to which filepaths are relative
15
16
  # @param [Boolean] assign_doi should a DOI be assigned to this item
16
17
  # @param [Logger] logger the logger to use
17
18
  def initialize(request_dro:, # rubocop:disable Metrics/ParameterLists
18
19
  connection:,
19
20
  accession:,
21
+ basepath:,
20
22
  priority: nil,
21
23
  files: [],
22
24
  assign_doi: false,
23
25
  logger: Logger.new($stdout))
24
26
  @files = files
27
+ @basepath = basepath
25
28
  @connection = connection
26
29
  @request_dro = request_dro
27
30
  @logger = logger
@@ -34,10 +37,14 @@ module SdrClient
34
37
  check_files_exist
35
38
  child_files_match
36
39
 
37
- file_metadata = UploadFilesMetadataBuilder.build(files: files, mime_types: mime_types)
40
+ # file_metadata is a map of relative filepaths to Files::DirectUploadRequests
41
+ file_metadata = UploadFilesMetadataBuilder.build(files: files, mime_types: mime_types, basepath: basepath)
42
+ # upload_response is an array of Files::DirectUploadResponse
38
43
  upload_responses = UploadFiles.upload(file_metadata: file_metadata,
44
+ filepath_map: filepath_map,
39
45
  logger: logger,
40
46
  connection: connection)
47
+
41
48
  new_request_dro = UpdateDroWithFileIdentifiers.update(request_dro: request_dro, upload_responses: upload_responses)
42
49
  CreateResource.run(accession: @accession,
43
50
  priority: @priority,
@@ -49,12 +56,12 @@ module SdrClient
49
56
 
50
57
  private
51
58
 
52
- attr_reader :request_dro, :files, :logger, :connection
59
+ attr_reader :request_dro, :files, :logger, :connection, :basepath
53
60
 
54
61
  def check_files_exist
55
62
  logger.info('checking to see if files exist')
56
- files.each do |file_name|
57
- raise Errno::ENOENT, file_name unless ::File.exist?(file_name)
63
+ files.each do |filepath|
64
+ raise Errno::ENOENT, filepath unless ::File.exist?(absolute_filepath_for(filepath))
58
65
  end
59
66
  end
60
67
 
@@ -70,7 +77,7 @@ module SdrClient
70
77
  end
71
78
  end
72
79
 
73
- # Map of filenames to mimetypes
80
+ # Map of relative filepaths to mimetypes
74
81
  def mime_types
75
82
  @mime_types ||=
76
83
  request_files.transform_values do |file|
@@ -78,7 +85,7 @@ module SdrClient
78
85
  end
79
86
  end
80
87
 
81
- # Map of filenames to request files
88
+ # Map of absolute filepaths to Cocina::Models::RequestFiles
82
89
  def request_files
83
90
  @request_files ||= begin
84
91
  return {} unless request_dro.structural
@@ -90,6 +97,16 @@ module SdrClient
90
97
  end.flatten(1).to_h
91
98
  end
92
99
  end
100
+
101
+ def absolute_filepath_for(filename)
102
+ ::File.join(basepath, filename)
103
+ end
104
+
105
+ def filepath_map
106
+ @filepath_map ||= files.each_with_object({}) do |filepath, obj|
107
+ obj[filepath] = absolute_filepath_for(filepath)
108
+ end
109
+ end
93
110
  end
94
111
  end
95
112
  end
@@ -13,7 +13,8 @@ module SdrClient
13
13
  # either 'low' or 'default'
14
14
  # @param [Class] grouping_strategy class whose run method groups an array of uploads
15
15
  # @param [Class] file_set_type_strategy class whose run method determines file_set type
16
- # @param [Array<String>] files a list of file names to upload
16
+ # @param [Array<String>] files a list of relative filepaths to upload
17
+ # @param [String] basepath filepath to which filepaths are relative
17
18
  # @param [Boolean] assign_doi should a DOI be assigned to this item
18
19
  # @param [Logger] logger the logger to use
19
20
  #
@@ -21,6 +22,7 @@ module SdrClient
21
22
  def initialize(metadata:,
22
23
  connection:,
23
24
  accession:,
25
+ basepath:,
24
26
  priority: nil,
25
27
  grouping_strategy: SingleFileGroupingStrategy,
26
28
  file_set_type_strategy: FileTypeFileSetStrategy,
@@ -36,6 +38,7 @@ module SdrClient
36
38
  @accession = accession
37
39
  @priority = priority
38
40
  @assign_doi = assign_doi
41
+ @basepath = basepath
39
42
  end
40
43
  # rubocop:enable Metrics/ParameterLists
41
44
 
@@ -44,8 +47,9 @@ module SdrClient
44
47
  def run
45
48
  check_files_exist
46
49
 
47
- file_metadata = UploadFilesMetadataBuilder.build(files: files, mime_types: mime_types)
50
+ file_metadata = UploadFilesMetadataBuilder.build(files: files, mime_types: mime_types, basepath: basepath)
48
51
  upload_responses = UploadFiles.upload(file_metadata: file_metadata,
52
+ filepath_map: filepath_map,
49
53
  logger: logger,
50
54
  connection: connection)
51
55
  metadata_builder = MetadataBuilder.new(metadata: metadata,
@@ -65,12 +69,12 @@ module SdrClient
65
69
 
66
70
  private
67
71
 
68
- attr_reader :metadata, :files, :connection, :logger, :grouping_strategy, :file_set_type_strategy
72
+ attr_reader :metadata, :files, :connection, :logger, :grouping_strategy, :file_set_type_strategy, :basepath
69
73
 
70
74
  def check_files_exist
71
75
  logger.info('checking to see if files exist')
72
- files.each do |file_name|
73
- raise Errno::ENOENT, file_name unless ::File.exist?(file_name)
76
+ files.each do |filepath|
77
+ raise Errno::ENOENT, filepath unless ::File.exist?(absolute_filepath_for(filepath))
74
78
  end
75
79
  end
76
80
 
@@ -80,6 +84,16 @@ module SdrClient
80
84
  [filepath, metadata.for(filepath)['mime_type']]
81
85
  end
82
86
  end
87
+
88
+ def filepath_map
89
+ @filepath_map ||= files.each_with_object({}) do |filepath, obj|
90
+ obj[filepath] = absolute_filepath_for(filepath)
91
+ end
92
+ end
93
+
94
+ def absolute_filepath_for(filepath)
95
+ ::File.join(basepath, filepath)
96
+ end
83
97
  end
84
98
  end
85
99
  end
@@ -8,40 +8,43 @@ module SdrClient
8
8
  class UploadFiles
9
9
  BLOB_PATH = '/v1/direct_uploads'
10
10
 
11
- # @param [Hash<String,Files::DirectUploadRequest>] the metadata for uploading the files
11
+ # @param [Hash<String,Files::DirectUploadRequest>] file_metadata map of relative filepaths to file metadata
12
+ # @param [Hash<String,String>] filepath_map map of relative filepaths to absolute filepaths
12
13
  # @param [Logger] logger the logger to use
13
14
  # @param [Connection] connection
14
- def self.upload(file_metadata:, logger:, connection:)
15
- new(file_metadata: file_metadata, logger: logger, connection: connection).run
15
+ def self.upload(file_metadata:, filepath_map:, logger:, connection:)
16
+ new(file_metadata: file_metadata, filepath_map: filepath_map, logger: logger, connection: connection).run
16
17
  end
17
18
 
18
- # @param [Hash<String,Files::DirectUploadRequest>] the metadata for uploading the files
19
+ # @param [Hash<String,Files::DirectUploadRequest>] file_metadata map of relative filepaths to file metadata
20
+ # @param [Hash<String,String>] filepath_map map of relative filepaths to absolute filepaths
19
21
  # @param [Logger] logger the logger to use
20
22
  # @param [Connection] connection
21
- def initialize(file_metadata:, logger:, connection:)
23
+ def initialize(file_metadata:, filepath_map:, logger:, connection:)
22
24
  @file_metadata = file_metadata
25
+ @filepath_map = filepath_map
23
26
  @logger = logger
24
27
  @connection = connection
25
28
  end
26
29
 
27
30
  # @return [Array<Files::DirectUploadResponse>] the responses from the server for the uploads
28
31
  def run
29
- file_metadata.map do |filename, metadata|
32
+ file_metadata.map do |filepath, metadata|
30
33
  direct_upload(metadata.to_json).tap do |response|
31
- # ActiveStorage modifies the filename provided in response, so setting here.
32
- response.filename = filename
33
- upload_file(filename: filename,
34
+ # ActiveStorage modifies the filename provided in response, so setting here with the relative filename
35
+ response.filename = filepath
36
+ upload_file(filename: filepath,
34
37
  url: response.direct_upload.fetch('url'),
35
38
  content_type: response.content_type,
36
39
  content_length: response.byte_size)
37
- logger.info("Upload of #{filename} complete")
40
+ logger.info("Upload of #{filepath} complete")
38
41
  end
39
42
  end
40
43
  end
41
44
 
42
45
  private
43
46
 
44
- attr_reader :logger, :connection, :file_metadata
47
+ attr_reader :logger, :connection, :file_metadata, :filepath_map
45
48
 
46
49
  def direct_upload(metadata_json)
47
50
  logger.info("Starting an upload request: #{metadata_json}")
@@ -63,7 +66,7 @@ module SdrClient
63
66
  logger.info("Uploading `#{filename}' to #{url}")
64
67
 
65
68
  upload_response = connection.put(url) do |req|
66
- req.body = ::File.open(filename)
69
+ req.body = ::File.open(filepath_map[filename])
67
70
  req.headers['Content-Type'] = content_type
68
71
  req.headers['Content-Length'] = content_length.to_s
69
72
  end
@@ -6,39 +6,36 @@ module SdrClient
6
6
  module Deposit
7
7
  # Collecting all the metadata about the files for a deposit
8
8
  class UploadFilesMetadataBuilder
9
- # @param [Array<String>] files a list of filepaths to upload
9
+ # @param [Array<String>] files a list of relative filepaths to upload
10
10
  # @param [Hash<String,String>] mime_types a map of filenames to mime types
11
+ # @param [String] basepath path to which files are relative
11
12
  # @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
13
+ def self.build(files:, mime_types:, basepath:)
14
+ new(files: files, mime_types: mime_types, basepath: basepath).build
14
15
  end
15
16
 
16
- # @param [Array<String>] files a list of filepaths to upload
17
+ # @param [Array<String>] files a list of absolute filepaths to upload
17
18
  # @param [Hash<String,String>] mime_types a map of filenames to mime types
18
- def initialize(files:, mime_types:)
19
+ # @param [String] basepath path to which files are relative
20
+ def initialize(files:, mime_types:, basepath:)
19
21
  @files = files
20
22
  @mime_types = mime_types
23
+ @basepath = basepath
21
24
  end
22
25
 
23
- attr_reader :files, :mime_types
26
+ attr_reader :files, :mime_types, :basepath
24
27
 
25
28
  # @return [Hash<String, Files::DirectUploadRequest>] the metadata for uploading the files
26
29
  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))
30
+ files.each_with_object({}) do |filepath, obj|
31
+ obj[filepath] = Files::DirectUploadRequest.from_file(absolute_filepath_for(filepath),
32
+ file_name: filepath,
33
+ content_type: mime_types[filepath])
31
34
  end
32
35
  end
33
36
 
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_path
38
- end
39
-
40
- def mime_type_for(file_path)
41
- mime_types[filename_for(file_path)]
37
+ def absolute_filepath_for(filepath)
38
+ ::File.join(basepath, filepath)
42
39
  end
43
40
  end
44
41
  end
@@ -8,6 +8,9 @@ module SdrClient
8
8
  BOOK_TYPE = Cocina::Models::ObjectType.book
9
9
  # rubocop:disable Metrics/ParameterLists
10
10
  # rubocop:disable Metrics/MethodLength
11
+ # params [Array<String>] files a list of relative filepaths to upload
12
+ # params [String] basepath filepath to which filepaths are relative, defaults to current directory
13
+ # params [Hash<String,Hash>] file_metadata relative filepath, hash of metadata per-file metadata
11
14
  # @return [String] job id for the background job result
12
15
  def self.run(label: nil,
13
16
  type: BOOK_TYPE,
@@ -26,29 +29,34 @@ module SdrClient
26
29
  url:,
27
30
  files: [],
28
31
  files_metadata: {},
32
+ basepath: Dir.getwd,
29
33
  accession: false,
30
34
  priority: nil,
31
35
  grouping_strategy: SingleFileGroupingStrategy,
32
36
  file_set_type_strategy: FileTypeFileSetStrategy,
33
37
  logger: Logger.new($stdout))
34
- augmented_metadata = FileMetadataBuilder.build(files: files, files_metadata: files_metadata)
35
- metadata = Request.new(label: label,
36
- type: type,
37
- view: view,
38
- download: download,
39
- apo: apo,
40
- use_and_reproduction: use_and_reproduction,
41
- copyright: copyright,
42
- collection: collection,
43
- source_id: source_id,
44
- catkey: catkey,
45
- embargo_release_date: embargo_release_date,
46
- embargo_access: embargo_access,
47
- embargo_download: embargo_download,
48
- viewing_direction: viewing_direction,
49
- files_metadata: augmented_metadata)
38
+ # augmented_metadata is a map of relative filepaths to file metadata
39
+ augmented_metadata = FileMetadataBuilder.build(files: files, files_metadata: files_metadata, basepath: basepath)
40
+ request = Request.new(label: label,
41
+ type: type,
42
+ view: view,
43
+ download: download,
44
+ apo: apo,
45
+ use_and_reproduction: use_and_reproduction,
46
+ copyright: copyright,
47
+ collection: collection,
48
+ source_id: source_id,
49
+ catkey: catkey,
50
+ embargo_release_date: embargo_release_date,
51
+ embargo_access: embargo_access,
52
+ embargo_download: embargo_download,
53
+ viewing_direction: viewing_direction,
54
+ files_metadata: augmented_metadata)
50
55
  connection = Connection.new(url: url)
51
- Process.new(metadata: metadata, connection: connection, files: files,
56
+ Process.new(metadata: request,
57
+ connection: connection,
58
+ files: files,
59
+ basepath: basepath,
52
60
  grouping_strategy: grouping_strategy,
53
61
  file_set_type_strategy: file_set_type_strategy,
54
62
  accession: accession,
@@ -57,9 +65,11 @@ module SdrClient
57
65
  end
58
66
  # rubocop:enable Metrics/MethodLength
59
67
 
60
- # @param [Array<String>] files absolute paths to files
68
+ # @param [Array<String>] files relative paths to files
69
+ # @params [String] basepath path to which files are relative
61
70
  def self.model_run(request_dro:,
62
71
  files: [],
72
+ basepath: Dir.getwd,
63
73
  url:,
64
74
  accession:,
65
75
  priority: nil,
@@ -68,6 +78,7 @@ module SdrClient
68
78
  ModelProcess.new(request_dro: request_dro,
69
79
  connection: connection,
70
80
  files: files,
81
+ basepath: basepath,
71
82
  logger: logger,
72
83
  accession: accession,
73
84
  priority: priority).run
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module SdrClient
4
- VERSION = '0.97.0'
4
+ VERSION = '1.0.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.97.0
4
+ version: 1.0.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: 2022-11-03 00:00:00.000000000 Z
11
+ date: 2022-11-16 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activesupport