matterhorn_whymper 0.5.0 → 0.6.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,15 +1,15 @@
1
1
  ---
2
2
  !binary "U0hBMQ==":
3
3
  metadata.gz: !binary |-
4
- YjliZDhiZTllYjViZDZlMDRlNDBkMDk2Y2NjZDJlYjE2ODU3OTlmNA==
4
+ NDBjMjFkYWYxYzY0ZDNlYzkwZTZjYzBkNDc0NzU3NzU0ZWVkNDRhYw==
5
5
  data.tar.gz: !binary |-
6
- ODkzN2MzZjJmYzc3YjJhMTc0M2UzZTg0ZWVmYTRmZGY5ZDJmNTYwMg==
6
+ Nzg0YjdjMzRiNjc4ZWU5NGE4N2Q3OGQwYjEwNjkxOTY3YmI4YzNhNQ==
7
7
  SHA512:
8
8
  metadata.gz: !binary |-
9
- ZDM4YzBhODU2MmU3YTdhNzFjM2Y2NDdjYzYyNjg4ZjAwZmZlNTllYTYwMTM3
10
- YzNjM2FkOTdjNjFhZWNiOWRhOTdkZDJmYWUwNDNjZjc2ZDhmOTM5MzU2MDlm
11
- MTA0ZTdhMDRmODBjMDYxNmU1MWQxYzVlZjQxYWYwMmQwNDhmNWY=
9
+ ZTgzYmJmNmFjOWY5YTkxYjYzMjM2YzE3ZWI1NTY2OWU1ZWI5YjQ4ZDQ0NjJk
10
+ YTg5NTRhMjBlZjAyMDkwZjA4YjliOGVlM2NkODQwZTBiODE3NTM5NWMwZGM4
11
+ OWFlMjJmZTAxZmFiZTRkMDc1NWJkZmYyYTFkMGViYWE0NDMzYzM=
12
12
  data.tar.gz: !binary |-
13
- OGY2ZjhjYmQ4MDljZGQyYTEzMTAwMTdjY2Y4OWFiY2ZjOTBkMGIzYTg0OGJk
14
- Mzg5MDg5NzI0NTA1MWUzNmRlNzBlZmMwYjQ0YThhZjUxNTJkNWJkMDM4NTMx
15
- NWEzMDM4YWRhZmE3OTI5ZjZkMWNiYzdkMzliODEzNzdlZjA0ZTc=
13
+ M2NhMjZjYmYzN2VmZTk1NTc4ZDIyNTQyZWMyMzYzZmM0MDhkNWI1M2U5ZTYz
14
+ OGIzYmRkZWQxYmIzM2QwNWRjN2FjMTU4ZTY5OGVjNmQyY2IxMmUyZDg1ZDhi
15
+ Y2ZlNGY3ZmNmNzFjNzM3ZGM3OWE1YThjMjNiYmFhNDU3YTZkZGU=
@@ -0,0 +1,45 @@
1
+ # ================================================================== Matterhorn::Endpoint::Event ===
2
+
3
+ # This endpoint is not a pure wrapper of the admin endpoint.
4
+ # Create should be done over ingest endpoint
5
+ # Update is implemented over the external API
6
+ #
7
+ class Matterhorn::Endpoint::Event < Matterhorn::Endpoint
8
+
9
+
10
+ # -------------------------------------------------------------------------- endpoint methodes ---
11
+
12
+ # ------------------------------------------------------------------------------------- create ---
13
+
14
+
15
+ # --------------------------------------------------------------------------------------- read ---
16
+
17
+ def read_media_package(media_package_id)
18
+ media_package_xml = nil
19
+ begin
20
+ split_response http_client.get(
21
+ "archive/archive/mediapackage/#{media_package_id}"
22
+ )
23
+ media_package_xml = response_body
24
+ rescue => ex
25
+ exception_handler('read_media_package', ex, {
26
+ 404 => "The media package of event[#{media_package_id}] could not be found."
27
+ }
28
+ )
29
+ end
30
+ media_package_xml
31
+ end
32
+
33
+
34
+ # ------------------------------------------------------------------------------------- update ---
35
+
36
+
37
+ # ------------------------------------------------------------------------------------- delete ---
38
+
39
+
40
+ # ---------------------------------------------------------------------------- private section ---
41
+ private
42
+
43
+
44
+
45
+ end # ---------------------------------------------------------- end Matterhorn::Endpoint::Event ---
@@ -6,84 +6,84 @@ class Matterhorn::Endpoint::Ingest < Matterhorn::Endpoint
6
6
  # -------------------------------------------------------------------------- endpoint methodes ---
7
7
 
8
8
  def addAttachment(file, flavor)
9
- unless @media_pkg_remote then raise(Matterhorn::Error, "No media package is available!"); end
9
+ unless @media_pkg_xml_remote then raise(Matterhorn::Error, "No media package is available!"); end
10
10
  @media_pkg_local.add_attachment(file, flavor) if @media_pkg_local
11
11
  begin
12
12
  spit_response http_client.post(
13
13
  "ingest/addAttachment",
14
14
  { 'flavor' => flavor,
15
- 'mediaPackage' => @media_pkg_remote,
15
+ 'mediaPackage' => @media_pkg_xml_remote,
16
16
  'BODY' => file
17
17
  }
18
18
  )
19
- @media_pkg_remote = response_body
19
+ @media_pkg_xml_remote = response_body
20
20
  rescue => ex
21
21
  exception_handler('addAttachment', ex, {
22
- 400 => "Media package not valid! / media package:\n#{@media_pkg_remote}"
22
+ 400 => "Media package not valid! / media package:\n#{@media_pkg_xml_remote}"
23
23
  }
24
24
  )
25
25
  raise ex
26
26
  end
27
- @media_pkg_remote
27
+ @media_pkg_xml_remote
28
28
  end
29
29
 
30
30
 
31
31
  def addCatalog(file, flavor)
32
- unless @media_pkg_remote then raise(Matterhorn::Error, "No media package is available!"); end
32
+ unless @media_pkg_xml_remote then raise(Matterhorn::Error, "No media package is available!"); end
33
33
  @media_pkg_local.add_catalog(file, flavor) if @media_pkg_local
34
34
  begin
35
35
  split_response http_client.post(
36
36
  "ingest/addCatalog",
37
37
  { 'flavor' => flavor,
38
- 'mediaPackage' => @media_pkg_remote,
38
+ 'mediaPackage' => @media_pkg_xml_remote,
39
39
  'BODY' => file
40
40
  }
41
41
  )
42
- @media_pkg_remote = response_body
42
+ @media_pkg_xml_remote = response_body
43
43
  rescue => ex
44
44
  exception_handler('addCatalog', ex, {
45
- 400 => "Media package not valid! / media package:\n#{@media_pkg_remote}"
45
+ 400 => "Media package not valid! / media package:\n#{@media_pkg_xml_remote}"
46
46
  }
47
47
  )
48
48
  raise ex
49
49
  end
50
- @media_pkg_remote
50
+ @media_pkg_xml_remote
51
51
  end
52
52
 
53
53
 
54
54
  def addDCCatalog(dublin_core)
55
- unless @media_pkg_remote then raise(Matterhorn::Error, "No media package is available!"); end
55
+ unless @media_pkg_xml_remote then raise(Matterhorn::Error, "No media package is available!"); end
56
56
  @media_pkg_local.add_dc_catalog(dublin_core) if @media_pkg_local
57
57
  begin
58
58
  split_response http_client.post(
59
59
  "ingest/addDCCatalog",
60
60
  { 'flavor' => 'dublincore/episode',
61
- 'mediaPackage' => @media_pkg_remote,
61
+ 'mediaPackage' => @media_pkg_xml_remote,
62
62
  'dublinCore' => dublin_core
63
63
  }
64
64
  )
65
- @media_pkg_remote = response_body
65
+ @media_pkg_xml_remote = response_body
66
66
  rescue => ex
67
67
  exception_handler('create', ex, {
68
- 400 => "Media package not valid! / media package:\n#{@media_pkg_remote}"
68
+ 400 => "Media package not valid! / media package:\n#{@media_pkg_xml_remote}"
69
69
  }
70
70
  )
71
71
  raise ex
72
72
  end
73
- @media_pkg_remote
73
+ @media_pkg_xml_remote
74
74
  end
75
75
 
76
76
  HTTP_PROTOCOL_RE = /^https?:/
77
77
 
78
78
  def addTrack(file_or_url, flavor)
79
- unless @media_pkg_remote then raise(Matterhorn::Error, "No media package is available!"); end
79
+ unless @media_pkg_xml_remote then raise(Matterhorn::Error, "No media package is available!"); end
80
80
  @media_pkg_local.add_track(file_or_url, flavor) if @media_pkg_local
81
81
  begin
82
82
  if HTTP_PROTOCOL_RE =~ file_or_url
83
83
  split_response http_client.post(
84
84
  "ingest/addTrack",
85
85
  { 'flavor' => flavor,
86
- 'mediaPackage' => @media_pkg_remote,
86
+ 'mediaPackage' => @media_pkg_xml_remote,
87
87
  'url' => file_or_url
88
88
  }
89
89
  )
@@ -91,20 +91,20 @@ class Matterhorn::Endpoint::Ingest < Matterhorn::Endpoint
91
91
  split_response http_client.post(
92
92
  "ingest/addTrack",
93
93
  { 'flavor' => flavor,
94
- 'mediaPackage' => @media_pkg_remote,
94
+ 'mediaPackage' => @media_pkg_xml_remote,
95
95
  'BODY' => file_or_url
96
96
  }
97
97
  )
98
98
  end
99
- @media_pkg_remote = response_body
99
+ @media_pkg_xml_remote = response_body
100
100
  rescue => ex
101
101
  exception_handler('addTrack', ex, {
102
- 400 => "Media package not valid! / media package:\n#{@media_pkg_remote}"
102
+ 400 => "Media package not valid! / media package:\n#{@media_pkg_xml_remote}"
103
103
  }
104
104
  )
105
105
  raise ex
106
106
  end
107
- @media_pkg_remote
107
+ @media_pkg_xml_remote
108
108
  end
109
109
 
110
110
 
@@ -113,25 +113,29 @@ class Matterhorn::Endpoint::Ingest < Matterhorn::Endpoint
113
113
  # then a local media description file 'manifest.xml' will be automaticaly saved in that folder.
114
114
  #
115
115
  def createMediaPackage(source_path = nil)
116
- if @media_pkg_remote then raise(Matterhorn::Error, "A media package is allready created!"); end
117
- @media_pkg_local = source_path ? Matterhorn::MediaPackage.new(source_path) : nil
116
+ if @media_pkg_xml_remote then raise(Matterhorn::Error, "A media package is allready created!"); end
117
+ @media_pkg_local = if source_path
118
+ Matterhorn::MediaPackage.new(nil, {:path => source_path})
119
+ else
120
+ nil
121
+ end
118
122
  begin
119
123
  split_response http_client.get(
120
124
  "ingest/createMediaPackage"
121
125
  )
122
- @media_pkg_remote = response_body
126
+ @media_pkg_xml_remote = response_body
123
127
  rescue => ex
124
128
  exception_handler('createMediaPackage', ex, {})
125
129
  raise ex
126
130
  end
127
- @media_pkg_remote
131
+ @media_pkg_xml_remote
128
132
  end
129
133
 
130
134
 
131
135
  def ingest(wdID = 'full', options = {})
132
- unless @media_pkg_remote then raise(Matterhorn::Error, "No media package is available!"); end
136
+ unless @media_pkg_xml_remote then raise(Matterhorn::Error, "No media package is available!"); end
133
137
  @media_pkg_local.save if @media_pkg_local
134
- options['mediaPackage'] = @media_pkg_remote
138
+ options['mediaPackage'] = @media_pkg_xml_remote
135
139
  begin
136
140
  split_response http_client.post(
137
141
  "ingest/ingest/#{wdID}",
@@ -140,7 +144,7 @@ class Matterhorn::Endpoint::Ingest < Matterhorn::Endpoint
140
144
  @workflow_inst = response_body
141
145
  rescue => ex
142
146
  exception_handler('create', ex, {
143
- 400 => "Media package not valid! / media package:\n#{@media_pkg_remote}"
147
+ 400 => "Media package not valid! / media package:\n#{@media_pkg_xml_remote}"
144
148
  }
145
149
  )
146
150
  raise ex
@@ -149,14 +153,20 @@ class Matterhorn::Endpoint::Ingest < Matterhorn::Endpoint
149
153
  end
150
154
 
151
155
 
156
+ def media_package_idenfifier
157
+ return nil unless @media_pkg_xml_remote
158
+ Matterhorn::MediaPackage.new(@media_pkg_xml_remote).identifier
159
+ end
160
+
161
+
152
162
  # ---------------------------------------------------------------------------- helper methodes ---
153
163
 
154
164
  def media_package(kind = 'local')
155
- unless @media_pkg_remote then raise(Matterhorn::Error, "No media package is available!"); end
165
+ unless @media_pkg_xml_remote then raise(Matterhorn::Error, "No media package is available!"); end
156
166
  if kind == 'local' && @media_pkg_local
157
167
  return @media_pkg_local
158
- elsif @media_pkg_remote
159
- Matterhorn::MediaPackage.new(@media_pkg_remote)
168
+ elsif @media_pkg_xml_remote
169
+ Matterhorn::MediaPackage.new(@media_pkg_xml_remote)
160
170
  else
161
171
  nil
162
172
  end
@@ -82,7 +82,17 @@ class Matterhorn::Endpoint
82
82
  @response_code = response.code.to_i
83
83
  @response_body = response.body
84
84
  end
85
+
85
86
 
87
+ def build_query_str(options)
88
+ query_str = ''
89
+ options.each do |key, value|
90
+ query_str << (query_str.empty? ? '?' : '&')
91
+ query_str << "#{key.to_s}=#{value.to_s}"
92
+ end
93
+ URI.encode(query_str)
94
+ end
95
+
86
96
 
87
97
  def exception_handler(method, exception, code_error_msg_hash)
88
98
  res_code = 0
@@ -1,120 +1,137 @@
1
1
  require 'nokogiri'
2
2
 
3
3
 
4
- # =================================================================================== Matterhorn ===
4
+ # ===================================================================== Matterhorn::MediaPackage ===
5
5
 
6
- module Matterhorn
6
+ class Matterhorn::MediaPackage
7
+
8
+ # -------------------------------------------------------------------------- const definitions ---
7
9
 
10
+ XML_NS_MEDIAPACKAGE = "http://mediapackage.opencastproject.org"
11
+
8
12
 
9
- # =================================================================== Matterhorn::MediaPackage ===
10
-
11
- class MediaPackage
12
-
13
- # ------------------------------------------------------------------------ const definitions ---
14
-
15
- XML_NS_MEDIAPACKAGE = "http://mediapackage.opencastproject.org"
16
-
13
+ # ----------------------------------------------------------------------------- initialization ---
17
14
 
18
- # --------------------------------------------------------------------------- initialization ---
19
-
20
- def initialize(path, xml = nil)
21
- @path = path + (path[-1] == '/' ? '' : '/') # guarantee that path ends with a slash
22
- if !xml.nil?
23
- @document = Nokogiri::XML(xml)
24
- else
25
- @document = Nokogiri::XML::Builder.new do |xml|
26
- xml.mediapackage('xmlns' => XML_NS_MEDIAPACKAGE) do
27
- xml.media
28
- xml.metadata
29
- xml.attachments
30
- end
15
+ def initialize(xml = nil, options = {})
16
+ if xml
17
+ @document = Nokogiri::XML::Builder.new do |xml|
18
+ xml.mediapackage('xmlns' => XML_NS_MEDIAPACKAGE) do
19
+ xml.media
20
+ xml.metadata
21
+ xml.attachments
31
22
  end
32
- .doc
33
23
  end
24
+ .doc
25
+ else
26
+ @document = Nokogiri::XML(xml)
34
27
  end
35
-
36
-
37
- # --------------------------------------------------------------------------------- methodes ---
38
-
39
- # <attachments>
40
- # <attachment type="switchcastrecorder/metadata">
41
- # <tags/>
42
- # <url>metadata.plist</url>
43
- # </attachment>
44
- # </attachments>
45
- #
46
- def add_attachment(file, flavor)
47
- Nokogiri::XML::Builder.with(@document.at('attachments')) do |xml|
48
- xml.attachment(:type => flavor) {
49
- xml.tags
50
- xml.url file.sub(@path, '')
51
- }
52
- end
28
+ if (path = options[:path])
29
+ @path = path + (path[-1] == '/' ? '' : '/') # guarantee that path ends with a slash
30
+ else
31
+ @path = nil
53
32
  end
33
+ end
54
34
 
55
35
 
56
- # <metadata>
57
- # <catalog type="dublincore/episode">
58
- # <mimetype>text/xml</mimetype>
59
- # <tags/>
60
- # <url>dublincore.xml</url>
61
- # </catalog>
62
- # </metadata>
63
- #
64
- def add_catalog(file, flavor, mimetype = 'text/xml')
65
- Nokogiri::XML::Builder.with(@document.at('metadata')) do |xml|
66
- xml.catalog(:type => flavor) {
67
- xml.mimetype mimetype
68
- xml.tags
69
- xml.url file.sub(@path, '')
70
- }
71
- end
72
- end
36
+ # ----------------------------------------------------------------------------------- methodes ---
73
37
 
38
+ def document
39
+ @document
40
+ end
74
41
 
75
- def add_dc_catalog(dublin_core)
76
- filename = 'dublincore.xml'
77
- flavor = 'dublincore/episode'
78
- dc_doc = Nokogiri::XML(dublin_core)
79
- dc_file = File.join(@path, filename)
80
- File.open(dc_file, 'w') do |file|
81
- file.write(dc_doc.to_xml)
82
- end
83
- add_catalog(dc_file, flavor)
42
+
43
+ def to_xml
44
+ @document.to_xml
45
+ end
46
+
47
+
48
+ def inspect
49
+ to_xml.to_s
50
+ end
51
+
52
+
53
+ # <attachments>
54
+ # <attachment type="switchcastrecorder/metadata">
55
+ # <tags/>
56
+ # <url>metadata.plist</url>
57
+ # </attachment>
58
+ # </attachments>
59
+ #
60
+ def add_attachment(file, flavor)
61
+ Nokogiri::XML::Builder.with(@document.at('attachments')) do |xml|
62
+ xml.attachment(:type => flavor) {
63
+ xml.tags
64
+ xml.url file.sub(@path, '')
65
+ }
84
66
  end
85
-
86
-
87
- # <media>
88
- # <track type="presenter/source+partial">
89
- # <tags/>
90
- # <url>source1/mux_2013_12-17T14_51_29_738.mov</url>
91
- # </track>
92
- # </media>
93
- #
94
- def add_track(file, flavor)
95
- Nokogiri::XML::Builder.with(@document.at('media')) do |xml|
96
- xml.track(:type => flavor) {
97
- xml.tags
98
- xml.url file.sub(@path, '')
99
- }
100
- end
67
+ end
68
+
69
+
70
+ # <metadata>
71
+ # <catalog type="dublincore/episode">
72
+ # <mimetype>text/xml</mimetype>
73
+ # <tags/>
74
+ # <url>dublincore.xml</url>
75
+ # </catalog>
76
+ # </metadata>
77
+ #
78
+ def add_catalog(file, flavor, mimetype = 'text/xml')
79
+ Nokogiri::XML::Builder.with(@document.at('metadata')) do |xml|
80
+ xml.catalog(:type => flavor) {
81
+ xml.mimetype mimetype
82
+ xml.tags
83
+ xml.url file.sub(@path, '')
84
+ }
101
85
  end
86
+ end
102
87
 
103
88
 
104
- def save(path = @path)
105
- manifest_file = File.join(path, 'manifest.xml')
106
- File.open(manifest_file, 'w') do |file|
107
- file.write(@document.to_xml)
108
- end
89
+ def add_dc_catalog(dublin_core)
90
+ filename = 'dublincore.xml'
91
+ flavor = 'dublincore/episode'
92
+ dc_doc = Nokogiri::XML(dublin_core)
93
+ dc_file = File.join(@path, filename)
94
+ File.open(dc_file, 'w') do |file|
95
+ file.write(dc_doc.to_xml)
96
+ end
97
+ add_catalog(dc_file, flavor)
98
+ end
99
+
100
+
101
+ # <media>
102
+ # <track type="presenter/source+partial">
103
+ # <tags/>
104
+ # <url>source1/mux_2013_12-17T14_51_29_738.mov</url>
105
+ # </track>
106
+ # </media>
107
+ #
108
+ def add_track(file, flavor)
109
+ Nokogiri::XML::Builder.with(@document.at('media')) do |xml|
110
+ xml.track(:type => flavor) {
111
+ xml.tags
112
+ xml.url file.sub(@path, '')
113
+ }
109
114
  end
115
+ end
110
116
 
111
117
 
112
- def to_xml
113
- @document.to_xml
114
- end
118
+ # Returns the id attribute of mediapackage element.
119
+ # <mediapackage xmlns="http://mediapackage.opencastproject.org" id="1" duration="2704016" start="2014-04-23T12:35:00Z">
120
+ #
121
+ def identifier
122
+ @document.xpath('/xmlns:mediapackage/@id', {'xmlns' => XML_NS_MEDIAPACKAGE}).first.value
123
+ end
115
124
 
116
125
 
117
- end # ----------------------------------------------------------- end Matterhorn::MediaPackage ---
126
+ def save(path = @path)
127
+ unless path
128
+ raise(Matterhorn::Error, "No path was set, where manifest file should be saved!")
129
+ end
130
+ manifest_file = File.join(path, 'manifest.xml')
131
+ File.open(manifest_file, 'w') do |file|
132
+ file.write(to_xml)
133
+ end
134
+ end
118
135
 
119
136
 
120
- end # --------------------------------------------------------------------------- end Matterhorn ---
137
+ end # ------------------------------------------------------------- end Matterhorn::MediaPackage ---
@@ -5,7 +5,7 @@ module MatterhornWhymper
5
5
 
6
6
  # -------------------------------------------------------------------------- const definitions ---
7
7
 
8
- VERSION = "0.5.0"
8
+ VERSION = "0.6.0"
9
9
 
10
10
 
11
11
  end # -------------------------------------------------------------------- end MatterhornWhymper ---
@@ -8,6 +8,7 @@ require 'matterhorn_whymper/version'
8
8
  require 'matterhorn/acl'
9
9
  require 'matterhorn/dublin_core'
10
10
  require 'matterhorn/endpoint'
11
+ require 'matterhorn/endpoint/event'
11
12
  require 'matterhorn/endpoint/ingest'
12
13
  require 'matterhorn/endpoint/series'
13
14
  require 'matterhorn/endpoint/workflow'
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: matterhorn_whymper
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.5.0
4
+ version: 0.6.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Daniel Fritschi
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-05-20 00:00:00.000000000 Z
11
+ date: 2015-05-22 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: multipart-post
@@ -140,6 +140,7 @@ files:
140
140
  - lib/matterhorn/acl.rb
141
141
  - lib/matterhorn/dublin_core.rb
142
142
  - lib/matterhorn/endpoint.rb
143
+ - lib/matterhorn/endpoint/event.rb
143
144
  - lib/matterhorn/endpoint/ingest.rb
144
145
  - lib/matterhorn/endpoint/series.rb
145
146
  - lib/matterhorn/endpoint/workflow.rb