diff options
| author | Alban Peignier | 2015-05-21 11:33:59 +0200 |
|---|---|---|
| committer | Alban Peignier | 2015-05-21 11:34:07 +0200 |
| commit | 3b53857b924cb620fe8569109258e7f2cecba68f (patch) | |
| tree | ac1f8b9a615edc8664f2dcdaf3433f8e94ac41dd | |
| parent | f539406189faacc1fd6e645f637dc9db24cd6426 (diff) | |
| download | chouette-core-3b53857b924cb620fe8569109258e7f2cecba68f.tar.bz2 | |
Validate file size in ImportTask
| -rw-r--r-- | app/models/import_task.rb | 44 | ||||
| -rw-r--r-- | config/locales/import_tasks.en.yml | 10 | ||||
| -rw-r--r-- | config/locales/import_tasks.fr.yml | 7 |
3 files changed, 44 insertions, 17 deletions
diff --git a/app/models/import_task.rb b/app/models/import_task.rb index 0a5a299af..760080c25 100644 --- a/app/models/import_task.rb +++ b/app/models/import_task.rb @@ -13,13 +13,15 @@ class ImportTask enumerize :data_format, in: %w( neptune netex gtfs ) attr_accessor :rule_parameter_set_id, :referential_id, :user_id, :user_name, :data_format, :resources, :name, :no_save - + validates_presence_of :referential_id validates_presence_of :resources validates_presence_of :user_id validates_presence_of :user_name validates_presence_of :name - + + validate :validate_file_size + def initialize( params = {} ) params.each {|k,v| send("#{k}=",v)} end @@ -38,24 +40,24 @@ class ImportTask def save if valid? - # Save resources + # Save resources save_resources - + # Call Iev Server - begin + begin Ievkit.create_job(referential.slug, "importer", data_format, { :file1 => params_io, :file2 => transport_data_io } - + ) - + # Delete resources - delete_resources + delete_resources rescue Exception => exception # If iev server has an error must delete resources before delete_resources - + raise exception end true @@ -77,9 +79,9 @@ class ImportTask def validation_params { "validation" => rule_parameter_set.parameters - } if rule_parameter_set.present? + } if rule_parameter_set.present? end - + def self.data_formats self.data_format.values end @@ -87,7 +89,7 @@ class ImportTask def params_io file = StringIO.new( params.to_json ) Faraday::UploadIO.new(file, "application/json", "parameters.json") - end + end def transport_data_io file = File.new(saved_resources_path, "r") @@ -95,8 +97,8 @@ class ImportTask Faraday::UploadIO.new(file, "application/zip", original_filename ) elsif file_extname == ".xml" Faraday::UploadIO.new(file, "application/xml", original_filename ) - end - end + end + end def save_resources FileUtils.mkdir_p root @@ -110,7 +112,7 @@ class ImportTask def original_filename resources.original_filename end - + def file_extname File.extname(original_filename) if original_filename end @@ -119,4 +121,16 @@ class ImportTask @saved_resources_path ||= "#{root}/#{Time.now.to_i}#{file_extname}" end + @@maximum_file_size = 80.megabytes + cattr_accessor :maximum_file_size + + def validate_file_size + return unless resources.present? and resources.path.present? and File.exists? resources.path + + if File.size(resources.path) > maximum_file_size + message = I18n.t("activemodel.errors.models.import_task.attributes.resources.maximum_file_size", file_size: ActionController::Base.helpers.number_to_human_size(File.size(resources.path)), maximum_file_size: ActionController::Base.helpers.number_to_human_size(maximum_file_size)) + errors.add(:resources, message) + end + end + end diff --git a/config/locales/import_tasks.en.yml b/config/locales/import_tasks.en.yml index 34e99ae1b..e519ccc25 100644 --- a/config/locales/import_tasks.en.yml +++ b/config/locales/import_tasks.en.yml @@ -5,7 +5,7 @@ en: new: title: "New import" all: "All" - flash: "Import task on queue, refresh page to see progression" + flash: "Import task on queue, refresh page to see progression" activemodel: models: import_task: @@ -28,7 +28,7 @@ en: import_task: name: "Import name" no_save: "No save" - resources: "File to import" + resources: "File to import" references_type: "subset" rule_parameter_set_id: "Rule parameter set for compliance check" object_id_prefix: "Neptune Id prefix" @@ -36,6 +36,12 @@ en: max_distance_for_connection_link: "Max distance for connection link" ignore_last_word: "ignore last word" ignore_end_chars: "ignore last chars" + errors: + models: + import_task: + attributes: + resources: + maximum_file_size: "File should smaller than %{maximum_file_size} (%{file_size} sent)" formtastic: titles: import_task: diff --git a/config/locales/import_tasks.fr.yml b/config/locales/import_tasks.fr.yml index 422999a45..cbaef8c02 100644 --- a/config/locales/import_tasks.fr.yml +++ b/config/locales/import_tasks.fr.yml @@ -36,6 +36,13 @@ fr: max_distance_for_connection_link: "Distance max pour créer les correspondances" ignore_last_word: "ignorer le dernier mot" ignore_end_chars: "ignorer les n derniers caractères" + errors: + models: + import_task: + attributes: + resources: + maximum_file_size: "Le fichier ne peut dépasser %{maximum_file_size} (%{file_size} soumis)" + formtastic: titles: import_task: |
