mrt-ingest 0.0.2 → 0.0.3
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 +7 -0
- data/Gemfile +2 -1
- data/lib/mrt/ingest/iobject.rb +21 -2
- data/lib/mrt/ingest/one_time_server.rb +8 -3
- data/lib/mrt/ingest/response.rb +4 -4
- data/mrt-ingest.gemspec +11 -13
- data/test/test_iobject.rb +18 -1
- metadata +67 -73
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: 7d30e43c2e0b21873ca263108300477a4a2926fe2ab7edb72d3327900253e1ac
|
4
|
+
data.tar.gz: 73466ed8f6640a0756d13fcbe4c79f9a8f98f7db8518a2a9fa047bb77bc576ed
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 85ef3dfa325d3f0bbdc705faa630b1c0e0bacd9436586ff753c74bd9d18db254b8c86c9bb363804b0b9853c259e513eab81f66065b17194ef4f18be9aed55c93
|
7
|
+
data.tar.gz: 6b0d2cf3d02703ccc7e715093dff00f8934a8499d519c8c0d64a039b0a57c230f284a8f57001cc06935715e1c9f1ea72a32b0b0034ab13b6efc1452dfcd2552f
|
data/Gemfile
CHANGED
data/lib/mrt/ingest/iobject.rb
CHANGED
@@ -4,6 +4,8 @@
|
|
4
4
|
require 'mrt/ingest'
|
5
5
|
require 'tempfile'
|
6
6
|
require 'uri'
|
7
|
+
require 'open-uri'
|
8
|
+
require 'digest/md5'
|
7
9
|
|
8
10
|
module Mrt
|
9
11
|
module Ingest
|
@@ -15,7 +17,9 @@ module Mrt
|
|
15
17
|
@digest = options[:digest]
|
16
18
|
@mime_type = options[:mime_type]
|
17
19
|
@size = options[:size]
|
18
|
-
|
20
|
+
# @prefetch = options[:prefetch] || false
|
21
|
+
@prefetch = false
|
22
|
+
|
19
23
|
case where
|
20
24
|
when File, Tempfile
|
21
25
|
@name = File.basename(where.path) if @name.nil?
|
@@ -26,7 +30,20 @@ module Mrt
|
|
26
30
|
@size = File.size(where.path) if @size.nil?
|
27
31
|
when URI
|
28
32
|
@name = File.basename(where.to_s) if @name.nil?
|
29
|
-
@
|
33
|
+
if @prefetch then
|
34
|
+
digest = Digest::MD5.new()
|
35
|
+
@uri, ignore = server.add_file do |f|
|
36
|
+
open(where, (options[:prefetch_options] || {})) do |u|
|
37
|
+
while (buff = u.read(1024)) do
|
38
|
+
f << buff
|
39
|
+
digest << buff
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
43
|
+
@digest = Mrt::Ingest::MessageDigest::MD5.new(digest.hexdigest)
|
44
|
+
else
|
45
|
+
@uri = where
|
46
|
+
end
|
30
47
|
else
|
31
48
|
raise IngestException.new("Trying to add a component that is not a File or URI")
|
32
49
|
end
|
@@ -75,6 +92,7 @@ module Mrt
|
|
75
92
|
Component.new(@server, @erc, :name => 'mrt-erc.txt')
|
76
93
|
when Hash
|
77
94
|
uri_str, path = @server.add_file do |f|
|
95
|
+
f.write("erc:\n")
|
78
96
|
@erc.each_pair do |k, v|
|
79
97
|
f.write("#{k}: #{v}\n")
|
80
98
|
end
|
@@ -96,6 +114,7 @@ module Mrt
|
|
96
114
|
:type => "object-manifest",
|
97
115
|
:submitter => submitter,
|
98
116
|
:profile => profile,
|
117
|
+
:local_identifier => @local_identifier,
|
99
118
|
:primary_identifier => @primary_identifier)
|
100
119
|
end
|
101
120
|
|
@@ -9,7 +9,7 @@ module Mrt
|
|
9
9
|
class OneTimeServer
|
10
10
|
# Find an open port, starting with start and adding one until we get
|
11
11
|
# an open port
|
12
|
-
def get_open_port(start=
|
12
|
+
def get_open_port(start=8081)
|
13
13
|
try_port = start
|
14
14
|
while (true)
|
15
15
|
begin
|
@@ -83,8 +83,13 @@ module Mrt
|
|
83
83
|
end
|
84
84
|
|
85
85
|
def start_server
|
86
|
-
@thread
|
87
|
-
@
|
86
|
+
if @thread.nil? then
|
87
|
+
@thread = Thread.new do
|
88
|
+
@server.start
|
89
|
+
end
|
90
|
+
end
|
91
|
+
while (@server.status != :Running) do
|
92
|
+
sleep(0.1)
|
88
93
|
end
|
89
94
|
return @thread
|
90
95
|
end
|
data/lib/mrt/ingest/response.rb
CHANGED
@@ -10,19 +10,19 @@ module Mrt
|
|
10
10
|
module Ingest
|
11
11
|
class Response
|
12
12
|
def initialize(data)
|
13
|
-
@parsed = JSON.parse(data)['batchState']
|
13
|
+
@parsed = JSON.parse(data)['bat:batchState']
|
14
14
|
end
|
15
15
|
|
16
16
|
def batch_id
|
17
|
-
return @parsed['batchID']
|
17
|
+
return @parsed['bat:batchID']
|
18
18
|
end
|
19
19
|
|
20
20
|
def user_agent
|
21
|
-
return @parsed['userAgent']
|
21
|
+
return @parsed['bat:userAgent']
|
22
22
|
end
|
23
23
|
|
24
24
|
def submission_date
|
25
|
-
return Time.parse(@parsed['submissionDate'])
|
25
|
+
return Time.parse(@parsed['bat:submissionDate'])
|
26
26
|
end
|
27
27
|
end
|
28
28
|
end
|
data/mrt-ingest.gemspec
CHANGED
@@ -1,24 +1,22 @@
|
|
1
1
|
# -*- encoding: utf-8 -*-
|
2
2
|
$:.push File.expand_path("../lib", __FILE__)
|
3
|
-
require "mrt/ingest/version"
|
4
3
|
|
5
4
|
Gem::Specification.new do |s|
|
6
5
|
s.name = "mrt-ingest"
|
7
|
-
s.version = "0.0.
|
6
|
+
s.version = "0.0.3"
|
8
7
|
s.platform = Gem::Platform::RUBY
|
9
|
-
s.authors = ["
|
10
|
-
s.email = ["
|
11
|
-
s.homepage = "
|
8
|
+
s.authors = ["Mark Reyes", "David Moles"]
|
9
|
+
s.email = ["mark.reyes@ucop.edu", "david.moles@ucop.edu"]
|
10
|
+
s.homepage = "https://github.com/CDLUC3/mrt-ingest-ruby"
|
12
11
|
s.summary = %q{A client for Merritt ingest.}
|
13
|
-
s.description = %q{A client for the Merritt ingest system. More details available from
|
12
|
+
s.description = %q{A client for the Merritt ingest system. More details available from https://github.com/CDLUC3/mrt-doc/wiki}
|
13
|
+
s.license = "BSD-3-Clause"
|
14
14
|
|
15
|
-
s.add_dependency "json", ">=1.5.0"
|
16
|
-
s.add_dependency "rest-client", ">=1.6.0"
|
15
|
+
s.add_dependency "json", "~> 1.5", ">=1.5.0"
|
16
|
+
s.add_dependency "rest-client", "~> 1.6", ">=1.6.0"
|
17
17
|
|
18
|
-
s.
|
19
|
-
|
20
|
-
s.
|
21
|
-
s.test_files = `hg locate --include '{spec,features}'`.split("\n")
|
22
|
-
s.executables = `hg locate --include bin`.split("\n").map{ |f| File.basename(f) }
|
18
|
+
s.files = `git ls-files -z`.split("\x0")
|
19
|
+
s.test_files = s.files.grep(%r{^(test|spec|features)/})
|
20
|
+
s.executables = s.files.grep(%r{^bin/}) { |f| File.basename(f) }
|
23
21
|
s.require_paths = ["lib"]
|
24
22
|
end
|
data/test/test_iobject.rb
CHANGED
@@ -9,6 +9,7 @@ require 'mocha'
|
|
9
9
|
require 'mrt/ingest'
|
10
10
|
require 'shoulda'
|
11
11
|
require 'open-uri'
|
12
|
+
require 'socket'
|
12
13
|
|
13
14
|
class TestIObject < Test::Unit::TestCase
|
14
15
|
def parse_object_manifest(iobject)
|
@@ -32,7 +33,13 @@ class TestIObject < Test::Unit::TestCase
|
|
32
33
|
end
|
33
34
|
|
34
35
|
def parse_erc(erc)
|
35
|
-
|
36
|
+
arr = erc.lines.map do |line|
|
37
|
+
md = line.chomp.match(/^([^:]+):\s*(.*)$/)
|
38
|
+
[md[1], md[2]]
|
39
|
+
end.flatten
|
40
|
+
h = Hash[*arr]
|
41
|
+
h.delete("erc")
|
42
|
+
return h
|
36
43
|
end
|
37
44
|
|
38
45
|
def parse_erc_entry(erc_entry)
|
@@ -59,6 +66,16 @@ class TestIObject < Test::Unit::TestCase
|
|
59
66
|
@iobject.add_component(URI.parse("http://example.org/file"))
|
60
67
|
end
|
61
68
|
|
69
|
+
should "be able to add a URI component with prefetching, served locally" do
|
70
|
+
@iobject.add_component(URI.parse("http://example.org/"), :prefetch=>true)
|
71
|
+
manifest = parse_object_manifest(@iobject)
|
72
|
+
manifest.entries.each do |entry|
|
73
|
+
# check that all files are served locally
|
74
|
+
uri = URI.parse(entry.values[0])
|
75
|
+
assert_equal(Socket.gethostname, uri.host)
|
76
|
+
end
|
77
|
+
end
|
78
|
+
|
62
79
|
should "not be able to add a non-URI component" do
|
63
80
|
assert_raise(Mrt::Ingest::IngestException) do
|
64
81
|
@iobject.add_component("http://example.org/file")
|
metadata
CHANGED
@@ -1,65 +1,65 @@
|
|
1
|
-
--- !ruby/object:Gem::Specification
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
2
|
name: mrt-ingest
|
3
|
-
version: !ruby/object:Gem::Version
|
4
|
-
|
5
|
-
prerelease:
|
6
|
-
segments:
|
7
|
-
- 0
|
8
|
-
- 0
|
9
|
-
- 2
|
10
|
-
version: 0.0.2
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.3
|
11
5
|
platform: ruby
|
12
|
-
authors:
|
13
|
-
-
|
6
|
+
authors:
|
7
|
+
- Mark Reyes
|
8
|
+
- David Moles
|
14
9
|
autorequire:
|
15
10
|
bindir: bin
|
16
11
|
cert_chain: []
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
- !ruby/object:Gem::Dependency
|
12
|
+
date: 2018-10-23 00:00:00.000000000 Z
|
13
|
+
dependencies:
|
14
|
+
- !ruby/object:Gem::Dependency
|
21
15
|
name: json
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
16
|
+
requirement: !ruby/object:Gem::Requirement
|
17
|
+
requirements:
|
18
|
+
- - "~>"
|
19
|
+
- !ruby/object:Gem::Version
|
20
|
+
version: '1.5'
|
26
21
|
- - ">="
|
27
|
-
- !ruby/object:Gem::Version
|
28
|
-
hash: 3
|
29
|
-
segments:
|
30
|
-
- 1
|
31
|
-
- 5
|
32
|
-
- 0
|
22
|
+
- !ruby/object:Gem::Version
|
33
23
|
version: 1.5.0
|
34
24
|
type: :runtime
|
35
|
-
version_requirements: *id001
|
36
|
-
- !ruby/object:Gem::Dependency
|
37
|
-
name: rest-client
|
38
25
|
prerelease: false
|
39
|
-
|
40
|
-
|
41
|
-
|
26
|
+
version_requirements: !ruby/object:Gem::Requirement
|
27
|
+
requirements:
|
28
|
+
- - "~>"
|
29
|
+
- !ruby/object:Gem::Version
|
30
|
+
version: '1.5'
|
31
|
+
- - ">="
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: 1.5.0
|
34
|
+
- !ruby/object:Gem::Dependency
|
35
|
+
name: rest-client
|
36
|
+
requirement: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - "~>"
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '1.6'
|
42
41
|
- - ">="
|
43
|
-
- !ruby/object:Gem::Version
|
44
|
-
hash: 15
|
45
|
-
segments:
|
46
|
-
- 1
|
47
|
-
- 6
|
48
|
-
- 0
|
42
|
+
- !ruby/object:Gem::Version
|
49
43
|
version: 1.6.0
|
50
44
|
type: :runtime
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
-
|
45
|
+
prerelease: false
|
46
|
+
version_requirements: !ruby/object:Gem::Requirement
|
47
|
+
requirements:
|
48
|
+
- - "~>"
|
49
|
+
- !ruby/object:Gem::Version
|
50
|
+
version: '1.6'
|
51
|
+
- - ">="
|
52
|
+
- !ruby/object:Gem::Version
|
53
|
+
version: 1.6.0
|
54
|
+
description: A client for the Merritt ingest system. More details available from https://github.com/CDLUC3/mrt-doc/wiki
|
55
|
+
email:
|
56
|
+
- mark.reyes@ucop.edu
|
57
|
+
- david.moles@ucop.edu
|
55
58
|
executables: []
|
56
|
-
|
57
59
|
extensions: []
|
58
|
-
|
59
60
|
extra_rdoc_files: []
|
60
|
-
|
61
|
-
|
62
|
-
- .hgignore
|
61
|
+
files:
|
62
|
+
- ".hgignore"
|
63
63
|
- Gemfile
|
64
64
|
- LICENSE
|
65
65
|
- README
|
@@ -76,38 +76,32 @@ files:
|
|
76
76
|
- test/test_iobject.rb
|
77
77
|
- test/test_request.rb
|
78
78
|
- test/test_response.rb
|
79
|
-
homepage:
|
80
|
-
licenses:
|
81
|
-
|
79
|
+
homepage: https://github.com/CDLUC3/mrt-ingest-ruby
|
80
|
+
licenses:
|
81
|
+
- BSD-3-Clause
|
82
|
+
metadata: {}
|
82
83
|
post_install_message:
|
83
84
|
rdoc_options: []
|
84
|
-
|
85
|
-
require_paths:
|
85
|
+
require_paths:
|
86
86
|
- lib
|
87
|
-
required_ruby_version: !ruby/object:Gem::Requirement
|
88
|
-
|
89
|
-
requirements:
|
87
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
88
|
+
requirements:
|
90
89
|
- - ">="
|
91
|
-
- !ruby/object:Gem::Version
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
version: "0"
|
96
|
-
required_rubygems_version: !ruby/object:Gem::Requirement
|
97
|
-
none: false
|
98
|
-
requirements:
|
90
|
+
- !ruby/object:Gem::Version
|
91
|
+
version: '0'
|
92
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
93
|
+
requirements:
|
99
94
|
- - ">="
|
100
|
-
- !ruby/object:Gem::Version
|
101
|
-
|
102
|
-
segments:
|
103
|
-
- 0
|
104
|
-
version: "0"
|
95
|
+
- !ruby/object:Gem::Version
|
96
|
+
version: '0'
|
105
97
|
requirements: []
|
106
|
-
|
107
|
-
|
108
|
-
rubygems_version: 1.8.12
|
98
|
+
rubyforge_project:
|
99
|
+
rubygems_version: 2.7.7
|
109
100
|
signing_key:
|
110
|
-
specification_version:
|
101
|
+
specification_version: 4
|
111
102
|
summary: A client for Merritt ingest.
|
112
|
-
test_files:
|
113
|
-
|
103
|
+
test_files:
|
104
|
+
- test/test_client.rb
|
105
|
+
- test/test_iobject.rb
|
106
|
+
- test/test_request.rb
|
107
|
+
- test/test_response.rb
|