sufia-models 0.1.2 → 2.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
  SHA1:
3
- metadata.gz: 9001bbed49080440dc23d1a376a52dbc5fa4c49e
4
- data.tar.gz: b4c22cdeecc807ed793f537c061b1f1855e334b2
3
+ metadata.gz: 7ef0788884e77751228fd4729bf0d364cf4b7eb7
4
+ data.tar.gz: 6a068dfdb18c10b6e1c6fa1bec8bb08b8d112fd9
5
5
  SHA512:
6
- metadata.gz: 48a20122f05113657812172339c8890a7ac478d35f21501a85640e069e33acf1bed6a983c27f092cab4b16ce97875311190f9b05e004a7f261cf3596c96325ad
7
- data.tar.gz: 07b4084bccb3c38b6674d09cb6334ab0d0ef246fe634a3fdf1638f905b0705334520ee151aa10e46f28aa4927e74502116c52ce07b3f55c265a1e38898d1d92b
6
+ metadata.gz: b05a7f5da307b2f79017c726fb9cda5ac5278935635537d732c3c5bb5a1f2238d213236a99ae840dfd69418ab072e3f69f14d539c5d64a5b478a9614de98b02d
7
+ data.tar.gz: fc46b8587afa6b5c5e75675e90cfcb80aa28fef6e3efbe5ecafec98d68fee3b883e71848b12e56352257371a15c75bf84d3086f5090d4ba6f25a3253c6945b9d
@@ -15,19 +15,28 @@
15
15
  class GenericFileRdfDatastream < ActiveFedora::NtriplesRDFDatastream
16
16
  map_predicates do |map|
17
17
  map.part_of(:to => "isPartOf", :in => RDF::DC)
18
- map.contributor(:in => RDF::DC) do |index|
18
+ map.resource_type(:to => "type", :in => RDF::DC) do |index|
19
19
  index.as :stored_searchable, :facetable
20
20
  end
21
+ map.title(:in => RDF::DC) do |index|
22
+ index.as :stored_searchable
23
+ end
21
24
  map.creator(:in => RDF::DC) do |index|
22
25
  index.as :stored_searchable, :facetable
23
26
  end
24
- map.title(:in => RDF::DC) do |index|
25
- index.as :stored_searchable
27
+ map.contributor(:in => RDF::DC) do |index|
28
+ index.as :stored_searchable, :facetable
26
29
  end
27
30
  map.description(:in => RDF::DC) do |index|
28
31
  index.type :text
29
32
  index.as :stored_searchable
30
33
  end
34
+ map.tag(:to => "relation", :in => RDF::DC) do |index|
35
+ index.as :stored_searchable, :facetable
36
+ end
37
+ map.rights(:in => RDF::DC) do |index|
38
+ index.as :stored_searchable
39
+ end
31
40
  map.publisher(:in => RDF::DC) do |index|
32
41
  index.as :stored_searchable, :facetable
33
42
  end
@@ -48,21 +57,12 @@ class GenericFileRdfDatastream < ActiveFedora::NtriplesRDFDatastream
48
57
  map.language(:in => RDF::DC) do |index|
49
58
  index.as :stored_searchable, :facetable
50
59
  end
51
- map.rights(:in => RDF::DC) do |index|
52
- index.as :stored_searchable
53
- end
54
- map.resource_type(:to => "type", :in => RDF::DC) do |index|
55
- index.as :stored_searchable, :facetable
56
- end
57
60
  map.identifier(:in => RDF::DC) do |index|
58
61
  index.as :stored_searchable
59
62
  end
60
63
  map.based_near(:in => RDF::FOAF) do |index|
61
64
  index.as :stored_searchable, :facetable
62
65
  end
63
- map.tag(:to => "relation", :in => RDF::DC) do |index|
64
- index.as :stored_searchable, :facetable
65
- end
66
66
  map.related_url(:to => "seeAlso", :in => RDF::RDFS)
67
67
  end
68
68
  begin
@@ -1,18 +1,3 @@
1
- # Copyright © 2012 The Pennsylvania State University
2
- #
3
- # Licensed under the Apache License, Version 2.0 (the "License");
4
- # you may not use this file except in compliance with the License.
5
- # You may obtain a copy of the License at
6
- #
7
- # http://www.apache.org/licenses/LICENSE-2.0
8
- #
9
- # Unless required by applicable law or agreed to in writing, software
10
- # distributed under the License is distributed on an "AS IS" BASIS,
11
- # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
- # See the License for the specific language governing permissions and
13
- # limitations under the License.
14
-
15
- require 'hydra/datastream/rights_metadata'
16
1
  # subclass built-in Hydra RightsDatastream and build in extra model-level validation
17
2
  class ParanoidRightsDatastream < Hydra::Datastream::RightsMetadata
18
3
  use_terminology Hydra::Datastream::RightsMetadata
@@ -20,8 +20,7 @@ class PropertiesDatastream < ActiveFedora::OmDatastream
20
20
  t.depositor :index_as=>[:stored_searchable]
21
21
  # This is where we put the relative path of the file if submitted as a folder
22
22
  t.relative_path
23
-
24
- t.proxy_depositor path: 'proxyDepositor', :index_as=>:symbol
23
+ t.import_url path: 'importUrl', :index_as=>:symbol
25
24
  end
26
25
 
27
26
  def self.xml_template
@@ -1,3 +1,4 @@
1
+ require 'sufia/models/resque'
1
2
  module Sufia
2
3
  module Models
3
4
  def self.config(&block)
@@ -9,6 +10,20 @@ module Sufia
9
10
  end
10
11
 
11
12
  class Engine < ::Rails::Engine
13
+
14
+ # Set some configuration defaults
15
+ config.enable_ffmpeg = false
16
+ config.noid_template = '.reeddeeddk'
17
+ config.ffmpeg_path = 'ffmpeg'
18
+ config.fits_message_length = 5
19
+ config.temp_file_base = nil
20
+ config.minter_statefile = '/tmp/minter-state'
21
+ config.id_namespace = "sufia"
22
+ config.fits_path = "fits.sh"
23
+ config.enable_contact_form_delivery = false
24
+ config.dropbox_api_key = nil
25
+ config.queue = Sufia::Resque::Queue
26
+
12
27
  config.autoload_paths += %W(
13
28
  #{config.root}/lib/sufia/models/jobs
14
29
  #{config.root}/app/models/datastreams
@@ -38,5 +38,17 @@ module Sufia::GenericFile
38
38
  Sufia.config.after_create_content.call(generic_file, user)
39
39
  end
40
40
  end
41
+
42
+ def self.virus_check(file)
43
+ if defined? ClamAV
44
+ stat = ClamAV.instance.scanfile(file.path)
45
+ logger.warn "Virus checking did not pass for #{file.inspect} status = #{stat}" unless stat == 0
46
+ stat
47
+ else
48
+ logger.warn "Virus checking disabled for #{file.inspect}"
49
+ 0
50
+ end
51
+ end
52
+
41
53
  end
42
54
  end
@@ -1,6 +1,16 @@
1
1
  module Sufia
2
2
  module GenericFile
3
3
  module WebForm
4
+ extend ActiveSupport::Concern
5
+ included do
6
+ before_save :remove_blank_assertions
7
+ end
8
+
9
+ def remove_blank_assertions
10
+ terms_for_editing.each do |key|
11
+ self[key] = nil if self[key] == ['']
12
+ end
13
+ end
4
14
 
5
15
  # override this method if you need to initialize more complex RDF assertions (b-nodes)
6
16
  def initialize_fields
@@ -10,6 +20,26 @@ module Sufia
10
20
  end
11
21
  end
12
22
 
23
+ def terms_for_editing
24
+ terms_for_display -
25
+ [:part_of, :date_modified, :date_uploaded, :format] #, :resource_type]
26
+ end
27
+
28
+ def terms_for_display
29
+ self.descMetadata.class.config.keys
30
+ end
31
+
32
+ def to_jq_upload
33
+ return {
34
+ "name" => self.title,
35
+ "size" => self.file_size,
36
+ "url" => "/files/#{noid}",
37
+ "thumbnail_url" => self.pid,
38
+ "delete_url" => "deleteme", # generic_file_path(:id => id),
39
+ "delete_type" => "DELETE"
40
+ }
41
+ end
42
+
13
43
  end
14
44
  end
15
45
  end
@@ -26,7 +26,7 @@ module Sufia
26
26
 
27
27
  belongs_to :batch, :property => :is_part_of
28
28
 
29
- delegate_to :properties, [:relative_path, :depositor], :unique => true
29
+ delegate_to :properties, [:relative_path, :depositor, :import_url], :unique => true
30
30
  delegate_to :descMetadata, [:date_uploaded, :date_modified], :unique => true
31
31
  delegate_to :descMetadata, [:related_url, :based_near, :part_of, :creator,
32
32
  :contributor, :title, :tag, :description, :rights,
@@ -34,16 +34,9 @@ module Sufia
34
34
  :resource_type, :identifier, :language]
35
35
 
36
36
  around_save :characterize_if_changed, :retry_warming
37
- before_save :remove_blank_assertions
38
37
  before_destroy :cleanup_trophies
39
38
  end
40
39
 
41
- def remove_blank_assertions
42
- terms_for_editing.each do |key|
43
- self[key] = nil if self[key] == ['']
44
- end
45
- end
46
-
47
40
 
48
41
  def record_version_committer(user)
49
42
  version = content.latest_version
@@ -157,26 +150,6 @@ module Sufia
157
150
  end
158
151
  end
159
152
 
160
- def to_jq_upload
161
- return {
162
- "name" => self.title,
163
- "size" => self.file_size,
164
- "url" => "/files/#{noid}",
165
- "thumbnail_url" => self.pid,
166
- "delete_url" => "deleteme", # generic_file_path(:id => id),
167
- "delete_type" => "DELETE"
168
- }
169
- end
170
-
171
- def terms_for_editing
172
- terms_for_display -
173
- [:part_of, :date_modified, :date_uploaded, :format] #, :resource_type]
174
- end
175
-
176
- def terms_for_display
177
- self.descMetadata.class.config.keys
178
- end
179
-
180
153
  # Is this file in the middle of being processed by a batch?
181
154
  def processing?
182
155
  return false if self.batch.blank?
@@ -43,7 +43,7 @@ module Sufia
43
43
 
44
44
  def self.next_id
45
45
  pid = ''
46
- File.open(Sufia::Engine.config.minter_statefile, File::RDWR|File::CREAT, 0644) do |f|
46
+ File.open(Sufia.config.minter_statefile, File::RDWR|File::CREAT, 0644) do |f|
47
47
  f.flock(File::LOCK_EX)
48
48
  yaml = YAML::load(f.read)
49
49
  yaml = {:template => noid_template} unless yaml
@@ -0,0 +1,55 @@
1
+ require 'net/https'
2
+ require 'uri'
3
+ require 'tempfile'
4
+
5
+ class ImportUrlJob
6
+
7
+ def queue_name
8
+ :import_url
9
+ end
10
+
11
+ attr_accessor :pid
12
+
13
+ def initialize(pid)
14
+ self.pid = pid
15
+ end
16
+
17
+ def run
18
+ generic_file = GenericFile.find(self.pid)
19
+ f = Tempfile.new(self.pid)
20
+ f.binmode
21
+
22
+ # download file from url
23
+ uri = URI(generic_file.import_url)
24
+ http = Net::HTTP.new(uri.host, uri.port)
25
+ http.use_ssl = uri.scheme == "https" # enable SSL/TLS
26
+ http.verify_mode = OpenSSL::SSL::VERIFY_NONE
27
+
28
+ http.start do
29
+ http.request_get(uri) do |resp|
30
+ resp.read_body do |segment|
31
+ f.write(segment)
32
+ end
33
+ end
34
+ end
35
+ job_user = User.batchuser()
36
+ user = User.find_by_user_key(generic_file.depositor)
37
+ # check for virus
38
+ if Sufia::GenericFile::Actions.virus_check(f) != 0
39
+ message = "The file (#{File.basename(uri.path)}) was unable to be imported because it contained a virus."
40
+ job_user.send_message(user, message, 'File Import Error')
41
+ return
42
+ end
43
+
44
+ f.rewind
45
+ # attach downloaded file to generic file stubbed out
46
+ Sufia::GenericFile::Actions.create_content(generic_file, f, File.basename(uri.path), 'content', user)
47
+ # add message to user for downloaded file
48
+ message = "The file (#{File.basename(uri.path)}) was successfully imported."
49
+ job_user.send_message(user, message, 'File Import')
50
+
51
+ ensure
52
+ f.close
53
+ f.unlink
54
+ end
55
+ end
@@ -26,27 +26,39 @@ class UnzipJob
26
26
  def run
27
27
  Zip::Archive.open_buffer(zip_file.content.content) do |archive|
28
28
  archive.each do |f|
29
- create_file(f)
29
+ if f.directory?
30
+ create_directory(f)
31
+ else
32
+ create_file(f)
33
+ end
30
34
  end
31
35
  end
32
36
  end
33
37
 
34
38
  protected
35
39
 
36
- def create_file(f)
40
+ # Creates a GenericFile object based on +file+
41
+ # @param file [Zip::File]
42
+ def create_file(file)
37
43
  @generic_file = GenericFile.new
38
44
  @generic_file.batch_id = zip_file.batch.pid
39
- file_name = f.name
45
+ file_name = file.name
40
46
  mime_types = MIME::Types.of(file_name)
41
47
  mime_type = mime_types.empty? ? "application/octet-stream" : mime_types.first.content_type
42
48
  options = {:label=>file_name, :dsid=>'content', :mimeType=>mime_type}
43
- @generic_file.add_file_datastream(f.read, options)
49
+ @generic_file.add_file_datastream(file.read, options)
44
50
  @generic_file.set_title_and_label( file_name, :only_if_blank=>true )
45
51
  @generic_file.apply_depositor_metadata(zip_file.edit_users.first)
46
52
  @generic_file.date_uploaded = Time.now.ctime
47
53
  @generic_file.date_modified = Time.now.ctime
48
54
  @generic_file.save
49
55
  end
56
+
57
+ # Creates representation of directory corresponding to +file+
58
+ # Default behavior: _do nothing_
59
+ # @param file [Zip::File]
60
+ def create_directory(file)
61
+ end
50
62
 
51
63
  def zip_file
52
64
  @zip_file ||= GenericFile.find(pid)
@@ -1,5 +1,5 @@
1
1
  module Sufia
2
2
  module Models
3
- VERSION = "0.1.2"
3
+ VERSION = "2.0.0"
4
4
  end
5
5
  end
data/lib/sufia/models.rb CHANGED
@@ -14,14 +14,8 @@ module Sufia
14
14
  extend ActiveSupport::Autoload
15
15
 
16
16
  module Models
17
-
18
- extend ActiveSupport::Autoload
19
-
20
- autoload :Resque, 'sufia/models/queue/resque'
21
- autoload :User, 'sufia/models/user'
22
17
  end
23
18
 
24
- autoload :Resque, 'sufia/models/resque'
25
19
  autoload :Utils, 'sufia/models/utils'
26
20
 
27
21
  attr_writer :queue
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: sufia-models
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.2
4
+ version: 2.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jeremy Friesen
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2013-06-06 00:00:00.000000000 Z
11
+ date: 2013-06-19 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -273,6 +273,7 @@ files:
273
273
  - lib/sufia/models/jobs/batch_update_job.rb
274
274
  - lib/sufia/models/jobs/characterize_job.rb
275
275
  - lib/sufia/models/jobs/ffmpeg_transcode_job.rb
276
+ - lib/sufia/models/jobs/import_url_job.rb
276
277
  - lib/sufia/models/jobs/resolrize_job.rb
277
278
  - lib/sufia/models/jobs/transcode_audio_job.rb
278
279
  - lib/sufia/models/jobs/transcode_video_job.rb