diff options
| author | Luc Donnet | 2015-04-24 20:23:44 +0200 | 
|---|---|---|
| committer | Luc Donnet | 2015-04-24 20:23:44 +0200 | 
| commit | 04dff64bbd3b8fab9851a47c700381256d16d386 (patch) | |
| tree | 18d68550323b2f3ad86528f8653f6855c3311cdf /app/models/export_task.rb | |
| parent | 2cb725889f3999a20c719dc7c6b480d8cd2f70c5 (diff) | |
| download | chouette-core-04dff64bbd3b8fab9851a47c700381256d16d386.tar.bz2 | |
Add export creation
Diffstat (limited to 'app/models/export_task.rb')
| -rw-r--r-- | app/models/export_task.rb | 186 | 
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 | 
