aboutsummaryrefslogtreecommitdiffstats
path: root/app/models/export_task.rb
diff options
context:
space:
mode:
authorLuc Donnet2015-04-24 20:23:44 +0200
committerLuc Donnet2015-04-24 20:23:44 +0200
commit04dff64bbd3b8fab9851a47c700381256d16d386 (patch)
tree18d68550323b2f3ad86528f8653f6855c3311cdf /app/models/export_task.rb
parent2cb725889f3999a20c719dc7c6b480d8cd2f70c5 (diff)
downloadchouette-core-04dff64bbd3b8fab9851a47c700381256d16d386.tar.bz2
Add export creation
Diffstat (limited to 'app/models/export_task.rb')
-rw-r--r--app/models/export_task.rb186
1 files changed, 43 insertions, 143 deletions
diff --git a/app/models/export_task.rb b/app/models/export_task.rb
index 4d439b58a..0ca3b49b3 100644
--- a/app/models/export_task.rb
+++ b/app/models/export_task.rb
@@ -1,164 +1,64 @@
-class ExportTask < ActiveRecord::Base
- attr_accessor :resources, :rule_parameter_set_id
+class ExportTask
+ extend Enumerize
+ extend ActiveModel::Naming
+ extend ActiveModel::Translation
+ extend ActiveModel::Callbacks
+ include ActiveModel::Validations
+ include ActiveModel::Conversion
- belongs_to :referential
+ define_model_callbacks :initialize, only: :after
- has_one :user
- has_one :compliance_check_task, :dependent => :delete
-
- serialize :parameter_set, JSON
- serialize :result, JSON
+ # TODO : Move in configuration
+ @@root = "#{Rails.root}/tmp/exports"
+ cattr_accessor :root
+ enumerize :data_format, in: %w( neptune netex gtfs hub kml )
+ enumerize :references_type, in: %w( all network line company groupofline stoparea )
+ attr_accessor :referential_id, :user_id, :user_name, :references_type, :data_format, :name, :projection_type
+
validates_presence_of :referential_id
- validates_presence_of :resources
validates_presence_of :user_id
validates_presence_of :user_name
- validates_inclusion_of :status, :in => %w{ pending processing completed failed }
-
- def references_types
- []
+ validates_presence_of :name
+ validates_presence_of :data_format
+ validates_presence_of :references_type
+
+ def initialize( params = {} )
+ params.each {|k,v| send("#{k}=",v)}
end
- protected
-
- def self.option(name, type=nil)
- name = name.to_s
-
- define_method(name) do
- self.parameter_set and self.parameter_set[name]
- end
-
- if type.to_s == "boolean"
- define_method("#{name}=") do |prefix|
- (self.parameter_set ||= {})[name] = (prefix=="1" || prefix==true)
- end
- else
- define_method("#{name}=") do |prefix|
- (self.parameter_set ||= {})[name] = prefix
- end
- end
- end
-
- public
-
- def self.formats
- %w{Neptune Csv Gtfs Netex Hub}
+ def referential
+ Referential.find(referential_id)
end
- def self.format_label(format)
- I18n.t 'exchange.format.'+format.downcase
+ def organisation
+ referential.organisation
end
- def delayed_export
- delay.export
- end
-
- protected
-
- option :format
- option :file_path
- option :references_type
-
- validates_inclusion_of :format, :in => self.formats
-
- def chouette_command
- Chouette::Command.new(:schema => referential.slug)
- end
-
- before_validation :define_default_attributes, :on => :create
- def define_default_attributes
- self.status ||= "pending"
- end
-
- @@root = "#{Rails.root}/tmp/exports"
- cattr_accessor :root
-
- def compliance_check_task_attributes
- {:referential_id => referential.id,
- :user_id => user_id,
- :user_name => user_name,
- :rule_parameter_set_id => rule_parameter_set_id}
- end
-
- after_create :update_info, :save_resources
- def update_info
- self.file_path = saved_resources
- self.update_attribute :parameter_set, self.parameter_set
-
- self.create_compliance_check_task( self.compliance_check_task_attributes)
- end
-
- def save_resources
- FileUtils.mkdir_p root
- FileUtils.cp resources.path, saved_resources
- end
-
- after_destroy :destroy_resources
- def destroy_resources
- FileUtils.rm file_path if File.exists? file_path
- end
-
- def saved_resources
- raise Exception.new("Illegal call") if self.new_record?
- "#{root}/#{id}#{File.extname(resources.original_filename)}"
- end
-
- def chouette_command_args
- {:c => "export", :id => id}
- end
-
- public
-
- def failed?
- status == "failed"
- end
-
- def completed?
- status == "completed"
- end
-
- def file_path_extension
- extension = File.extname( self.file_path )
- if extension == ".xml"
- "xml"
- elsif extension == ".zip"
- "zip"
- else
- "basic"
+ def save
+ # Call Iev Server
+ begin
+ Ievkit.create_job( referential.name, "exporter", data_format, {
+ :file1 => action_params_io,
+ } )
+ rescue Exception => exception
+ raise exception
end
end
- def name
- "#{ExportTask.model_name.human} #{self.format} #{self.id}"
- end
-
- def full_name
- return name
+ def self.formats
+ self.data_format.values
end
- # Create ExportTask and ComplianceCheckTask associated and give export id to Chouette Loader
- def export
- return nil if self.new_record?
- begin
- chouette_command.run! chouette_command_args
- reload
- update_attribute :status, "completed"
- compliance_check_task.update_attribute :status, "completed"
- rescue => e
- Rails.logger.error "Export #{id} failed : #{e}, #{e.backtrace}"
- reload
- update_attribute :status, "failed"
- compliance_check_task.update_attribute :status, "failed"
- end
+ def action_params
+ {
+ "parameters" => {}
+ }
end
-
- def self.new(attributes = {}, parameter_set = {}, &block)
- if self == ExportTask
- attributes[:format] = "Neptune" unless attributes[:format]
- Object.const_get( attributes[:format] + "Export").new(attributes, parameter_set)
- else
- super
- end
+
+ def action_params_io
+ file = StringIO.new( action_params.to_s )
+ Faraday::UploadIO.new(file, "application/json", "parameters.json")
end
end