aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--app/assets/stylesheets/main/import_tasks.css.scss13
-rw-r--r--app/controllers/import_tasks_controller.rb52
-rw-r--r--app/models/export_task.rb2
-rw-r--r--app/models/gtfs_import.rb32
-rw-r--r--app/models/import_task.rb212
-rw-r--r--app/models/neptune_import.rb20
-rw-r--r--app/models/netex_import.rb20
-rw-r--r--app/views/export_tasks/new.html.erb2
-rw-r--r--app/views/import_tasks/_fields_csv_import.erb1
-rw-r--r--app/views/import_tasks/_fields_gtfs_import.html.erb (renamed from app/views/import_tasks/_fields_gtfs_import.erb)1
-rw-r--r--app/views/import_tasks/_fields_neptune_import.html.erb0
-rw-r--r--app/views/import_tasks/_fields_netex_import.erb0
-rw-r--r--app/views/import_tasks/_import_task.html.erb13
-rw-r--r--app/views/import_tasks/_neptune_import.html.erb1
-rw-r--r--app/views/import_tasks/new.html.erb34
-rw-r--r--app/views/import_tasks/new.js.coffee2
-rw-r--r--app/views/imports/_import.erb2
-rw-r--r--config/locales/import_tasks.en.yml44
-rw-r--r--config/locales/import_tasks.fr.yml44
-rw-r--r--config/locales/import_tasks.yml208
-rw-r--r--config/locales/imports.en.yml79
-rw-r--r--config/locales/imports.fr.yml93
-rw-r--r--config/locales/imports.yml198
-rw-r--r--lib/ievkit/client.rb3
-rw-r--r--lib/ievkit/serializer.rb22
25 files changed, 451 insertions, 647 deletions
diff --git a/app/assets/stylesheets/main/import_tasks.css.scss b/app/assets/stylesheets/main/import_tasks.css.scss
new file mode 100644
index 000000000..3a0d48ddf
--- /dev/null
+++ b/app/assets/stylesheets/main/import_tasks.css.scss
@@ -0,0 +1,13 @@
+#workspace.import_tasks.new, #workspace.import_tasks.create {
+ .nav{
+ margin: 30px 0 10px 0;
+ }
+
+ .highlight {
+ padding: 9px 14px;
+ margin-bottom: 14px;
+ background-color: #f7f7f9;
+ border: 1px solid #e1e1e8;
+ border-radius: 4px;
+ }
+}
diff --git a/app/controllers/import_tasks_controller.rb b/app/controllers/import_tasks_controller.rb
index 2e0b325c7..617721956 100644
--- a/app/controllers/import_tasks_controller.rb
+++ b/app/controllers/import_tasks_controller.rb
@@ -1,10 +1,13 @@
+# coding: utf-8
class ImportTasksController < ChouetteController
defaults :resource_class => ImportTask
- respond_to :html
+ respond_to :html, :only => [:new, :create]
+ respond_to :js, :only => [:new, :create]
belongs_to :referential
def new
+ @available_imports = available_imports
begin
new!
rescue Ievkit::Error => error
@@ -15,23 +18,44 @@ class ImportTasksController < ChouetteController
end
def create
- #begin
- neptune_import = NeptuneImport.new(params[:import_task])
- neptune_import.save
- # rescue Ievkit::Error => error
- # logger.error("Iev failure : #{error.message}")
- # flash[:error] = t('iev.failure')
- # redirect_to referential_path(@referential)
- # end
+ begin
+ create! do |success, failure|
+ success.html { redirect_to referential_imports_path(@referential) }
+ end
+ rescue Ievkit::Error => error
+ logger.error("Iev failure : #{error.message}")
+ flash[:error] = t('iev.failure')
+ redirect_to referential_path(@referential)
+ end
end
protected
- def build_resource(attributes = {})
- @csv_import ||= CsvImport.new(:referential_id => @referential.id )
- @neptune_import ||= NeptuneImport.new(:referential_id => @referential.id )
- @netex_import ||= NetexImport.new(:referential_id => @referential.id )
- @gtfs_import ||= GtfsImport.new(:referential_id => @referential.id )
+ def available_imports
+ @available_imports ||= [
+ NeptuneImport.new(:referential_id => @referential.id ),
+ NetexImport.new(:referential_id => @referential.id ),
+ GtfsImport.new(:referential_id => @referential.id )
+ ]
+ end
+
+ def build_resource
+ import_task_parameters = params[:import_task]
+
+ if import_task_parameters.present?
+ case import_task_parameters[:data_format]
+ when "neptune"
+ @import_task = NeptuneImport.new(import_task_parameters)
+ when "netex"
+ @import_task = NetexImport.new(import_task_parameters)
+ when "gtfs"
+ @import_task = GtfsImport.new(import_task_parameters)
+ else
+ @import_task = nil
+ end
+ else
+ @import_task = nil
+ end
end
end
diff --git a/app/models/export_task.rb b/app/models/export_task.rb
index 0ca3b49b3..eaa73f63d 100644
--- a/app/models/export_task.rb
+++ b/app/models/export_task.rb
@@ -46,7 +46,7 @@ class ExportTask
end
end
- def self.formats
+ def self.data_formats
self.data_format.values
end
diff --git a/app/models/gtfs_import.rb b/app/models/gtfs_import.rb
index 3fe7dcea7..434fa3b3d 100644
--- a/app/models/gtfs_import.rb
+++ b/app/models/gtfs_import.rb
@@ -1,11 +1,39 @@
class GtfsImport < ImportTask
- attr_accessor :object_id_prefix, :max_distance_for_commercial, :ignore_last_word, :ignore_end_chars, :max_distance_for_connection_link
+ enumerize :references_type, in: %w( all stoparea )
+
+ attr_accessor :object_id_prefix, :max_distance_for_commercial, :ignore_last_word, :ignore_end_chars, :max_distance_for_connection_link, :references_type
validates_presence_of :object_id_prefix
+ validates_presence_of :references_type
def references_types
- [ Chouette::StopArea ]
+ self.references_type.values
+ end
+
+ def action_params
+ { "parameters" =>
+ {
+ "gtfs-import" => {
+ "no_save" => false,
+ "user_name" => user_name,
+ "name" => name,
+ "organisation_name" => organisation.name,
+ "referential_name" => referential.name,
+ "object_id_prefix" => object_id_prefix,
+ "max_distance_for_commercial" => max_distance_for_commercial,
+ "ignore_last_word" => ignore_last_word,
+ "ignore_end_chars" => ignore_end_chars,
+ "max_distance_for_connection_link" => max_distance_for_connection_link,
+ "references_type" => references_type
+ }
+ }
+ }
+ end
+
+
+ def data_format
+ "gtfs"
end
end
diff --git a/app/models/import_task.rb b/app/models/import_task.rb
index d53c04766..1df264010 100644
--- a/app/models/import_task.rb
+++ b/app/models/import_task.rb
@@ -10,13 +10,13 @@ class ImportTask
@@root = "#{Rails.root}/tmp/imports"
cattr_accessor :root
- attr_accessor :rule_parameter_set_id, :referential_id, :user_id, :user_name, :no_save, :format, :resources, :name
+ enumerize :data_format, in: %w( neptune netex gtfs )
+ attr_accessor :rule_parameter_set_id, :referential_id, :user_id, :user_name, :data_format, :resources, :name
validates_presence_of :referential_id
validates_presence_of :resources
validates_presence_of :user_id
validates_presence_of :user_name
- validates_presence_of :no_save
validates_presence_of :name
def initialize( params = {} )
@@ -41,7 +41,7 @@ class ImportTask
# Call Iev Server
begin
- Ievkit.create_job(referential.name, "importer", "neptune", {
+ Ievkit.create_job(referential.name, "importer", data_format, {
:file1 => action_params_io,
:file2 => transport_data_io
}
@@ -56,32 +56,30 @@ class ImportTask
raise exception
end
- puts "End save"
end
- def references_types
- []
+ def action_params
+ {
+ "parameters" => {}
+ }
+ end
+
+
+ def self.data_formats
+ self.data_format.values
end
def action_params_io
- file = StringIO.new( { "parameters" => {
- "neptune-import" => {
- "no_save" => no_save,
- "user_name" => user_name,
- "name" => name,
- "organisation_name" => organisation.name,
- "referential_name" => referential.name,
- }
- }
- }.to_s )
+ file = StringIO.new( action_params.to_s )
Faraday::UploadIO.new(file, "application/json", "parameters.json")
end
def transport_data_io
+ file = File.new(saved_resources_path, "r")
if file_extname == ".zip"
- Faraday::UploadIO.new(saved_resources_path, "application/zip")
+ Faraday::UploadIO.new(file, "application/zip", original_filename )
elsif file_extname == ".xml"
- Faraday::UploadIO.new(File.open(saved_resources_path), "application/xml", "10136939.xml")
+ Faraday::UploadIO.new(file, "application/xml", original_filename )
end
end
@@ -91,7 +89,6 @@ class ImportTask
end
def save_resources
- # resources is a required attribute
FileUtils.mkdir_p root
FileUtils.cp resources.path, saved_resources_path
end
@@ -100,185 +97,16 @@ class ImportTask
FileUtils.rm saved_resources_path if File.exists? saved_resources_path
end
+ def original_filename
+ resources.original_filename
+ end
+
def file_extname
File.extname(resources.original_filename)
end
- # TODO : Find a good filename
def saved_resources_path
"#{root}/#{Time.now.to_i}#{file_extname}"
end
-
- # attr_accessor :resources, :rule_parameter_set_id
-
- # belongs_to :referential
-
- # has_one :user
- # has_one :compliance_check_task, :dependent => :delete
-
- # serialize :parameter_set, JSON
- # serialize :result, JSON
-
- # 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
- # []
- # 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}
- # end
-
- # def self.format_label(format)
- # I18n.t 'exchange.format.'+format.downcase
- # end
-
- # def delayed_import
- # delay.import
- # end
-
- # def save_requested?
- # !parameter_set["no_save"]
- # end
-
- # protected
-
- # option :no_save, :boolean
- # option :format
- # option :file_path
- # option :references_type
-
- # validates_inclusion_of :no_save, :in => [ true, false]
- # 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/imports"
- # 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
- # # resources is a required attribute
- # 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 => "import", :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"
- # end
- # end
-
- # def name
- # "#{ImportTask.model_name.human} #{self.format} #{self.id}"
- # end
-
- # def full_name
- # return name unless no_save
- # "#{name} - #{I18n.t('activerecord.attributes.import_task.no_save')}"
- # end
-
- # # Create ImportTask and ComplianceCheckTask associated and give import id to Chouette Loader
- # def import
- # 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 "Import #{id} failed : #{e}, #{e.backtrace}"
- # reload
- # update_attribute :status, "failed"
- # compliance_check_task.update_attribute :status, "failed"
- # end
- # end
-
- # def self.new(attributes = {}, parameter_set = {}, &block)
- # if self == ImportTask
- # attributes[:format] = "Neptune" unless attributes[:format]
- # Object.const_get( attributes[:format] + "Import").new(attributes, parameter_set)
- # else
- # super
- # end
- # end
-
end
diff --git a/app/models/neptune_import.rb b/app/models/neptune_import.rb
index eab34e777..ae5350eee 100644
--- a/app/models/neptune_import.rb
+++ b/app/models/neptune_import.rb
@@ -1,7 +1,21 @@
class NeptuneImport < ImportTask
- # def import_options
- # super.merge()
- # end
+ def action_params
+ { "parameters" =>
+ {
+ "neptune-import" => {
+ "no_save" => false,
+ "user_name" => user_name,
+ "name" => name,
+ "organisation_name" => organisation.name,
+ "referential_name" => referential.name,
+ }
+ }
+ }
+ end
+
+ def data_format
+ "neptune"
+ end
end
diff --git a/app/models/netex_import.rb b/app/models/netex_import.rb
index cc09fd496..cc20ef269 100644
--- a/app/models/netex_import.rb
+++ b/app/models/netex_import.rb
@@ -1,7 +1,21 @@
class NetexImport < ImportTask
- # def import_options
- # super.merge(:format => :netex)
- # end
+ def action_params
+ { "parameters" =>
+ {
+ "netex-import" => {
+ "no_save" => false,
+ "user_name" => user_name,
+ "name" => name,
+ "organisation_name" => organisation.name,
+ "referential_name" => referential.name,
+ }
+ }
+ }
+ end
+
+ def data_format
+ "netex"
+ end
end
diff --git a/app/views/export_tasks/new.html.erb b/app/views/export_tasks/new.html.erb
index 92753a675..77998237f 100644
--- a/app/views/export_tasks/new.html.erb
+++ b/app/views/export_tasks/new.html.erb
@@ -1,6 +1,6 @@
<%= title_tag t(".title") %>
<ul class="nav nav-pills">
- <% ExportTask.formats.each do |format| %>
+ <% ExportTask.data_formats.each do |format| %>
<li role="presentation"><a href="#<%= format %>" class="<%= format %>" title='<%= t(:"enumerize.data_format_detail.#{format}")%>' data-toggle="tab"><%= t(:"enumerize.data_format.#{format}") %></a></li>
<% end %>
</ul>
diff --git a/app/views/import_tasks/_fields_csv_import.erb b/app/views/import_tasks/_fields_csv_import.erb
deleted file mode 100644
index b4ae719a5..000000000
--- a/app/views/import_tasks/_fields_csv_import.erb
+++ /dev/null
@@ -1 +0,0 @@
-<%= form.input :object_id_prefix, :input_html => { :value => @referential.prefix } %>
diff --git a/app/views/import_tasks/_fields_gtfs_import.erb b/app/views/import_tasks/_fields_gtfs_import.html.erb
index 8b9dabcc5..1fef43584 100644
--- a/app/views/import_tasks/_fields_gtfs_import.erb
+++ b/app/views/import_tasks/_fields_gtfs_import.html.erb
@@ -1,3 +1,4 @@
+<%= form.input :references_type, :as => :select, :include_blank => false, :input_html => { :title => t("formtastic.titles.import_task.references_type") } %>
<%= form.input :object_id_prefix, :input_html => { :value => @referential.prefix } %>
<%= form.input :max_distance_for_commercial , :as => :number , :input_html => { :title => t("formtastic.titles.import_task.max_distance_for_commercial"), :value => 0 } %>
<%= form.input :ignore_last_word , :as => :boolean , :input_html => { :title => t("formtastic.titles.import_task.ignore_last_word"), :value => false }%>
diff --git a/app/views/import_tasks/_fields_neptune_import.html.erb b/app/views/import_tasks/_fields_neptune_import.html.erb
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/app/views/import_tasks/_fields_neptune_import.html.erb
diff --git a/app/views/import_tasks/_fields_netex_import.erb b/app/views/import_tasks/_fields_netex_import.erb
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/app/views/import_tasks/_fields_netex_import.erb
diff --git a/app/views/import_tasks/_import_task.html.erb b/app/views/import_tasks/_import_task.html.erb
deleted file mode 100644
index c277d429a..000000000
--- a/app/views/import_tasks/_import_task.html.erb
+++ /dev/null
@@ -1,13 +0,0 @@
-<%= form.input :referential_id, :as => :hidden, :value => @referential.id %>
-<%= form.input :user_id, :as => :hidden, :value => current_user.id %>
-<%= form.input :user_name, :as => :hidden, :value => current_user.name %>
-<%= form.input :format, :as => :hidden %>
-<%= form.input :name %>
-<%= form.input :no_save, :as => :boolean, :collection => [true, false] %>
-<%= form.input :rule_parameter_set_id, :as => :select,
- :collection => @referential.organisation.rule_parameter_sets.map { |rps| [ rps.name, rps.id ] }, :include_blank => true %>
-<%= form.input :resources, :as => :file %>
-<% unless import_task.references_types.empty? %>
- <p class="warning"><%= t('.'+import_partial_name(form)+'.warning')%></p>
- <%= form.input :references_type, :as => :select, :collection => import_task.references_types.map { |c| [ c.model_name.human.capitalize.pluralize, c.name ] }, :include_blank => t(".all") %>
-<% end %>
diff --git a/app/views/import_tasks/_neptune_import.html.erb b/app/views/import_tasks/_neptune_import.html.erb
deleted file mode 100644
index 37f0bddbd..000000000
--- a/app/views/import_tasks/_neptune_import.html.erb
+++ /dev/null
@@ -1 +0,0 @@
-<%= yield %>
diff --git a/app/views/import_tasks/new.html.erb b/app/views/import_tasks/new.html.erb
index e1bbe34f8..b0155cd9f 100644
--- a/app/views/import_tasks/new.html.erb
+++ b/app/views/import_tasks/new.html.erb
@@ -1,11 +1,33 @@
<%= title_tag t(".title") %>
-<%= semantic_form_for [@referential, @neptune_import], :as => :import_task, :url => referential_import_tasks_path(@referential), :html => { :id => "neptune_import_new" }, multipart: true do |form| %>
+<ul class="nav nav-pills">
+ <% ImportTask.data_formats.each do |format| %>
+ <li role="presentation"><a href="#<%= format %>" class="<%= format %>" title='<%= t(:"enumerize.data_format_detail.#{format}")%>' data-toggle="tab"><%= t(:"enumerize.data_format.#{format}") %></a></li>
+ <% end %>
+</ul>
+
+<div class="tab-content">
+<% @available_imports.each do |import_task| %>
+ <%= semantic_form_for [@referential, import_task], :as => :import_task, :url => referential_import_tasks_path(@referential), :namespace => import_task.data_format ,:html => { :id => "#{import_task.data_format}", :class => "tab-pane highlight"} do |form| %>
+ <%= form.inputs do %>
+ <%= form.input :user_name, :as => :hidden, :input_html => { :value => current_user.name } %> <%= form.input :user_id, :as => :hidden, :input_html => { :value => current_user.id } %>
+ <%= form.input :data_format, :as => :hidden %>
+ <%= form.input :referential_id, :as => :hidden, :input_html => { :value => @referential.id } %>
+ <%= form.input :name %>
+ <%= form.input :rule_parameter_set_id, :as => :select,
+ :collection => @referential.organisation.rule_parameter_sets.map { |rps| [ rps.name, rps.id ] }, :include_blank => true %>
+ <%= form.input :resources, :as => :file %>
+ <% end %>
+
+ <%= render partial: "fields_#{import_task.data_format}_import", :locals => { :form => form } %>
+
+ <%= form.actions do %>
+ <%= form.action :submit, :as => :button , :label => t( 'formtastic.import' ) %>
+ <%= form.action :cancel, :as => :link %>
+ <% end %>
- <%= render :partial => "import_task", :layout => "neptune_import", :locals => { :import_task => @neptune_import, :form => form } %>
-
- <%= form.actions do %>
- <%= form.action :submit, :as => :button , :label => t( 'formtastic.import' ) %>
- <%= form.action :cancel, :as => :link %>
<% end %>
<% end %>
+</div>
+
+<%= javascript_include_tag new_referential_import_task_path(@referential, :format => :js) %>
diff --git a/app/views/import_tasks/new.js.coffee b/app/views/import_tasks/new.js.coffee
new file mode 100644
index 000000000..9bd560b16
--- /dev/null
+++ b/app/views/import_tasks/new.js.coffee
@@ -0,0 +1,2 @@
+jQuery ->
+ $('#workspace.import_tasks .nav a:first').tab('show')
diff --git a/app/views/imports/_import.erb b/app/views/imports/_import.erb
index 8245e23e3..f43e7e245 100644
--- a/app/views/imports/_import.erb
+++ b/app/views/imports/_import.erb
@@ -3,7 +3,7 @@
<div class="panel-title clearfix">
<span class="pull-right">
<% location = import.datas.links.select { |link| link["rel"] == "location" }.first.href %>
- <%= link_to referential_import_path(@referential, import.id), :method => :delete, :data => {:confirm => t('import_tasks.actions.destroy_confirm')}, :class => "btn btn-danger btn-sm" do %>
+ <%= link_to referential_import_path(@referential, import.id), :method => :delete, :data => {:confirm => t('imports.actions.destroy_confirm')}, :class => "btn btn-danger btn-sm" do %>
<span class="fa fa-trash-o"></span>
<% end %>
</span>
diff --git a/config/locales/import_tasks.en.yml b/config/locales/import_tasks.en.yml
new file mode 100644
index 000000000..5a33a5584
--- /dev/null
+++ b/config/locales/import_tasks.en.yml
@@ -0,0 +1,44 @@
+en:
+ import_tasks:
+ actions:
+ new: "New import"
+ new:
+ title: "New import"
+ flash: "Import task on queue, refresh page to see progression"
+ activemodel:
+ models:
+ import_task:
+ zero: "import"
+ one: "import"
+ other: "imports"
+ neptune_import:
+ zero: "import"
+ one: "Neptune import"
+ other: "imports"
+ gtfs_import:
+ zero: "import"
+ one: "GTFS import"
+ other: "imports"
+ netex_import:
+ zero: "import"
+ one: "NeTEx import"
+ other: "imports"
+ attributes:
+ import_task:
+ name: "Import name"
+ resources: "File to import"
+ references_type: "subset"
+ rule_parameter_set_id: "Rule parameter set for compliance check"
+ object_id_prefix: "Neptune Id prefix"
+ max_distance_for_commercial: "Max distance for commercial stop"
+ max_distance_for_connection_link: "Max distance for connection link"
+ ignore_last_word: "ignore last word"
+ ignore_end_chars: "ignore last chars"
+ formtastic:
+ titles:
+ import_task:
+ max_distance_for_commercial: "Maximal distance to merge homonymous stops in commercial stop in meter"
+ max_distance_for_connection_link: "Maximal distance to link stops by connection link stop in meter"
+ ignore_last_word: "ignore last word on stop name in homonymous detection (inappliable when just one word occurs)"
+ ignore_end_chars: "ignore some chars at the end of stop names in homonymous detection"
+ references_type: "Filter on stop areas import only GTFS stops and transfers files, these may contain extra attributes" \ No newline at end of file
diff --git a/config/locales/import_tasks.fr.yml b/config/locales/import_tasks.fr.yml
new file mode 100644
index 000000000..1625637e8
--- /dev/null
+++ b/config/locales/import_tasks.fr.yml
@@ -0,0 +1,44 @@
+fr:
+ import_tasks:
+ actions:
+ new: "Nouvel import"
+ new:
+ title: "Nouvel import"
+ flash: "La demande d'import est mise en file d'attente, veuillez rafraichir régulièrement la page pour en suivre la progression"
+ activemodel:
+ models:
+ import_task:
+ zero: "import"
+ one: "import"
+ other: "imports"
+ neptune_import:
+ zero: "import"
+ one: "import Neptune"
+ other: "imports"
+ gtfs_import:
+ zero: "import"
+ one: "import GTFS"
+ other: "imports"
+ netex_import:
+ zero: "import"
+ one: "import NeTEx"
+ other: "imports"
+ attributes:
+ import_task:
+ name: "Nom de l'import"
+ resources: "Fichier à importer"
+ references_type: "Sous ensemble"
+ rule_parameter_set_id: "Jeu de paramètres pour validation"
+ object_id_prefix: "Préfixe d'identifiants"
+ max_distance_for_commercial: "Distance max pour créer les zones"
+ 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"
+ formtastic:
+ titles:
+ import_task:
+ max_distance_for_commercial: "Distance maximale entre deux arrêts homonymes pour créer les zones d'arrêt (en mètre)"
+ max_distance_for_connection_link: "Distance maximale entre deux arrêts pour créer les correspondances (en mètre)"
+ ignore_last_word: "Ignorer le dernier mot pour détecter l'homonymie des noms d'arrêt (inapplicable quand le nom ne comporte qu'un mot)"
+ ignore_end_chars: "Ignorer les n derniers caractères du nom de l'arrêt pour détecter l'homonymie"
+ references_type: "Le filtre sur arrêts importe uniquement les fichiers GTFS stops et transfers gtfs, ceux-ci pouvant contenir des attributs supplémentaires"
diff --git a/config/locales/import_tasks.yml b/config/locales/import_tasks.yml
deleted file mode 100644
index d016d9664..000000000
--- a/config/locales/import_tasks.yml
+++ /dev/null
@@ -1,208 +0,0 @@
-en:
- import_tasks:
- actions:
- new: "New import"
- destroy: "Destroy"
- destroy_confirm: "Are you sure you want destroy this import?"
- new:
- title: "New import"
- all: "All"
- flash: "Import task on queue, refresh page to see progression"
- fields_gtfs_import:
- warning: "Filter on stop areas import only GTFS stops and transfers files, these may contain extra attributes"
- index:
- title: "Imports"
- warning: ""
- show:
- report: "Report"
- not_yet_started: "On queue"
- imported_file: "Imported file"
- completed: "[ Completed ]"
- failed: "[ Failed ]"
- pending: "[ In the treatment queue ]"
- processing: "[ In progress... ]"
- graph:
- files:
- title_zip: "Import results for files in zip"
- title_default: "Import result for %{extension} file"
- error: "Errors"
- ignored: "Ignored"
- ok: "Success"
- lines:
- title: "Imported objects"
- objects_label: "Objects count"
- lines_stats: "Lines"
- routes_stats: "Routes"
- connection_links_stats: "Connection Links"
- time_tables_stats: "Timetables"
- stop_areas_stats: "Stop Areas"
- access_points_stats: "Access Points"
- vehicle_journeys_stats: "Vehicle Journeys"
- journey_patterns_stats: "Journey Patterns"
- statuses:
- created: "Pending ..."
- scheduled: "Processing ..."
- terminated: "Completed"
- canceled: "Canceled"
- aborted: "Failed"
- compliance_check_task: "Validate Report"
- severities:
- info: "Information"
- uncheck: "Unchecked"
- ok: "Ok"
- warning: "Warning"
- error: "Error"
- fatal: "Fatal"
- activerecord:
- models:
- import_task:
- zero: "import"
- one: "import"
- other: "imports"
- neptune_import:
- zero: "import"
- one: "Neptune import"
- other: "imports"
- csv_import:
- zero: "import"
- one: "CSV import"
- other: "imports"
- gtfs_import:
- zero: "import"
- one: "GTFS import"
- other: "imports"
- netex_import:
- zero: "import"
- one: "NeTEx import"
- other: "imports"
- attributes:
- import_task:
- resources: "File to import"
- created_at: "Created on"
- status: "Status"
- references_type: "subset"
- no_save: "No save"
- rule_parameter_set_id: "Rule parameter set for compliance check"
- object_id_prefix: "Neptune Id prefix"
- max_distance_for_commercial: "Max distance for commercial stop"
- max_distance_for_connection_link: "Max distance for connection link"
- ignore_last_word: "ignore last word"
- ignore_end_chars: "ignore last chars"
- formtastic:
- titles:
- import_task:
- max_distance_for_commercial: "Maximal distance to merge homonymous stops in commercial stop in meter"
- max_distance_for_connection_link: "Maximal distance to link stops by connection link stop in meter"
- ignore_last_word: "ignore last word on stop name in homonymous detection (inappliable when just one word occurs)"
- ignore_end_chars: "ignore some chars at the end of stop names in homonymous detection"
-fr:
- import_tasks:
- actions:
- new: "Nouvel import"
- destroy: "Supprimer cet import"
- destroy_confirm: "Etes vous sûr de supprimer cet import ?"
- new:
- title: "Nouvel import"
- all: "Tout"
- flash: "La demande d'import est mise en file d'attente, veuillez rafraichir régulièrement la page pour en suivre la progression"
- fields_gtfs_import:
- warning: "Le filtre sur arrêts importe uniquement les fichiers GTFS stops et transfers gtfs, ceux-ci pouvant contenir des attributs supplémentaires"
- index:
- title: "Imports"
- warning: ""
- show:
- report: "Rapport"
- not_yet_started: "En file d'attente"
- imported_file: "Fichier importé"
- completed: "[ Terminé ]"
- failed: "[ Echoué ]"
- pending: "[ En file d'attente ]"
- processing: "[ En progression... ]"
- graph:
- files:
- title_zip: "Résultat d'import des fichiers du zip"
- title_default: "Résultat d'import du fichier %{extension}"
- error: "Erreurs"
- ignored: "Ignorés"
- ok: "Succès"
- lines:
- title: "Volume de données lues par type de donnée"
- objects_label: "Quantité lue"
- lines_stats: "Lignes"
- routes_stats: "Séquences d'arrêts"
- connection_links_stats: "Correspondances"
- time_tables_stats: "Calendriers"
- stop_areas_stats: "Zones d'arrèt"
- access_points_stats: "Accès"
- vehicle_journeys_stats: "Courses"
- journey_patterns_stats: "Missions"
- table:
- line:
- name: "Nom"
- save: "Sauvegarde"
- routes: "Séquences d'arrêts"
- connection_links: "Correspondances"
- time_tables: "Calendriers"
- stop_areas: "Zones d'arrèt"
- access_points: "Accès"
- vehicle_journeys: "Courses"
- journey_patterns: "Missions"
- not_saved: "Non Sauvé"
- saved: "Sauvé"
- save_error: "Sauvegarde en erreur"
- statuses:
- created: "En attente ..."
- scheduled: "En cours ..."
- terminated: "Achevé"
- canceled: "Annulé"
- aborted: "Echoué"
- compliance_check_task: "Validation"
- severities:
- info: "Information"
- uncheck: "Non testé"
- ok: "Ok"
- warning: "Alerte"
- error: "Erreur"
- fatal: "Fatal"
- activerecord:
- models:
- import_task:
- zero: "import"
- one: "import"
- other: "imports"
- neptune_import:
- zero: "import"
- one: "import Neptune"
- other: "imports"
- csv_import:
- zero: "import"
- one: "import CSV"
- other: "imports"
- gtfs_import:
- zero: "import"
- one: "import GTFS"
- other: "imports"
- netex_import:
- zero: "import"
- one: "import NeTEx"
- other: "imports"
- attributes:
- import_task:
- resources: "Fichier à importer"
- created_at: "Créé le"
- status: "Status"
- no_save: "Pas de sauvegarde"
- references_type: "Sous ensemble"
- rule_parameter_set_id: "Jeu de paramètres pour validation"
- object_id_prefix: "Préfixe d'identifiants"
- max_distance_for_commercial: "Distance max pour créer les zones"
- 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"
- formtastic:
- titles:
- import_task:
- max_distance_for_commercial: "Distance maximale entre deux arrêts homonymes pour créer les zones d'arrêt (en mètre)"
- max_distance_for_connection_link: "Distance maximale entre deux arrêts pour créer les correspondances (en mètre)"
- ignore_last_word: "Ignorer le dernier mot pour détecter l'homonymie des noms d'arrêt (inapplicable quand le nom ne comporte qu'un mot)"
- ignore_end_chars: "Ignorer les n derniers caractères du nom de l'arrêt pour détecter l'homonymie"
diff --git a/config/locales/imports.en.yml b/config/locales/imports.en.yml
new file mode 100644
index 000000000..512529e8f
--- /dev/null
+++ b/config/locales/imports.en.yml
@@ -0,0 +1,79 @@
+en:
+ imports:
+ actions:
+ new: "New import"
+ destroy: "Destroy"
+ destroy_confirm: "Are you sure you want destroy this import?"
+ index:
+ title: "Imports"
+ warning: ""
+ show:
+ report: "Report"
+ imported_file: "Imported file"
+ graph:
+ files:
+ title_zip: "Import results for files in zip"
+ title_default: "Import result for %{extension} file"
+ error: "Errors"
+ ignored: "Ignored"
+ ok: "Success"
+ lines:
+ title: "Imported objects"
+ objects_label: "Objects count"
+ lines_stats: "Lines"
+ routes_stats: "Routes"
+ connection_links_stats: "Connection Links"
+ time_tables_stats: "Timetables"
+ stop_areas_stats: "Stop Areas"
+ access_points_stats: "Access Points"
+ vehicle_journeys_stats: "Vehicle Journeys"
+ journey_patterns_stats: "Journey Patterns"
+ statuses:
+ started: "Started"
+ scheduled: "Processing ..."
+ terminated: "Completed"
+ canceled: "Canceled"
+ aborted: "Failed"
+ compliance_check_task: "Validate Report"
+ severities:
+ info: "Information"
+ uncheck: "Unchecked"
+ ok: "Ok"
+ warning: "Warning"
+ error: "Error"
+ fatal: "Fatal"
+ activerecord:
+ models:
+ import:
+ zero: "import"
+ one: "import"
+ other: "imports"
+ neptune_import:
+ zero: "import"
+ one: "Neptune import"
+ other: "imports"
+ csv_import:
+ zero: "import"
+ one: "CSV import"
+ other: "imports"
+ gtfs_import:
+ zero: "import"
+ one: "GTFS import"
+ other: "imports"
+ netex_import:
+ zero: "import"
+ one: "NeTEx import"
+ other: "imports"
+ attributes:
+ import:
+ resources: "File to import"
+ created_at: "Created on"
+ status: "Status"
+ references_type: "subset"
+ no_save: "No save"
+ rule_parameter_set_id: "Rule parameter set for compliance check"
+ object_id_prefix: "Neptune Id prefix"
+ max_distance_for_commercial: "Max distance for commercial stop"
+ max_distance_for_connection_link: "Max distance for connection link"
+ ignore_last_word: "ignore last word"
+ ignore_end_chars: "ignore last chars"
diff --git a/config/locales/imports.fr.yml b/config/locales/imports.fr.yml
new file mode 100644
index 000000000..aae91976c
--- /dev/null
+++ b/config/locales/imports.fr.yml
@@ -0,0 +1,93 @@
+fr:
+ imports:
+ actions:
+ new: "Nouvel import"
+ destroy: "Supprimer cet import"
+ destroy_confirm: "Etes vous sûr de supprimer cet import ?"
+ index:
+ title: "Imports"
+ warning: ""
+ show:
+ report: "Rapport"
+ imported_file: "Fichier importé"
+ graph:
+ files:
+ title_zip: "Résultat d'import des fichiers du zip"
+ title_default: "Résultat d'import du fichier %{extension}"
+ error: "Erreurs"
+ ignored: "Ignorés"
+ ok: "Succès"
+ lines:
+ title: "Volume de données lues par type de donnée"
+ objects_label: "Quantité lue"
+ lines_stats: "Lignes"
+ routes_stats: "Séquences d'arrêts"
+ connection_links_stats: "Correspondances"
+ time_tables_stats: "Calendriers"
+ stop_areas_stats: "Zones d'arrèt"
+ access_points_stats: "Accès"
+ vehicle_journeys_stats: "Courses"
+ journey_patterns_stats: "Missions"
+ table:
+ line:
+ name: "Nom"
+ save: "Sauvegarde"
+ routes: "Séquences d'arrêts"
+ connection_links: "Correspondances"
+ time_tables: "Calendriers"
+ stop_areas: "Zones d'arrèt"
+ access_points: "Accès"
+ vehicle_journeys: "Courses"
+ journey_patterns: "Missions"
+ not_saved: "Non Sauvé"
+ saved: "Sauvé"
+ save_error: "Sauvegarde en erreur"
+ statuses:
+ created: "En file d'attente..."
+ scheduled: "En cours..."
+ terminated: "Achevé"
+ canceled: "Annulé"
+ aborted: "Echoué"
+ compliance_check_task: "Validation"
+ severities:
+ info: "Information"
+ uncheck: "Non testé"
+ ok: "Ok"
+ warning: "Alerte"
+ error: "Erreur"
+ fatal: "Fatal"
+ activerecord:
+ models:
+ import:
+ zero: "import"
+ one: "import"
+ other: "imports"
+ neptune_import:
+ zero: "import"
+ one: "import Neptune"
+ other: "imports"
+ csv_import:
+ zero: "import"
+ one: "import CSV"
+ other: "imports"
+ gtfs_import:
+ zero: "import"
+ one: "import GTFS"
+ other: "imports"
+ netex_import:
+ zero: "import"
+ one: "import NeTEx"
+ other: "imports"
+ attributes:
+ import:
+ resources: "Fichier à importer"
+ created_at: "Créé le"
+ status: "Status"
+ no_save: "Pas de sauvegarde"
+ references_type: "Sous ensemble"
+ rule_parameter_set_id: "Jeu de paramètres pour validation"
+ object_id_prefix: "Préfixe d'identifiants"
+ max_distance_for_commercial: "Distance max pour créer les zones"
+ 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" \ No newline at end of file
diff --git a/config/locales/imports.yml b/config/locales/imports.yml
deleted file mode 100644
index 57d28d9d7..000000000
--- a/config/locales/imports.yml
+++ /dev/null
@@ -1,198 +0,0 @@
-en:
- imports:
- actions:
- new: "New import"
- destroy: "Destroy"
- destroy_confirm: "Are you sure you want destroy this import?"
- new:
- title: "New import"
- all: "All"
- flash: "Import task on queue, refresh page to see progression"
- fields_gtfs_import:
- warning: "Filter on stop areas import only GTFS stops and transfers files, these may contain extra attributes"
- index:
- title: "Imports"
- warning: ""
- show:
- report: "Report"
- imported_file: "Imported file"
- graph:
- files:
- title_zip: "Import results for files in zip"
- title_default: "Import result for %{extension} file"
- error: "Errors"
- ignored: "Ignored"
- ok: "Success"
- lines:
- title: "Imported objects"
- objects_label: "Objects count"
- lines_stats: "Lines"
- routes_stats: "Routes"
- connection_links_stats: "Connection Links"
- time_tables_stats: "Timetables"
- stop_areas_stats: "Stop Areas"
- access_points_stats: "Access Points"
- vehicle_journeys_stats: "Vehicle Journeys"
- journey_patterns_stats: "Journey Patterns"
- statuses:
- started: "Started"
- scheduled: "Processing ..."
- terminated: "Completed"
- canceled: "Canceled"
- aborted: "Failed"
- compliance_check_task: "Validate Report"
- severities:
- info: "Information"
- uncheck: "Unchecked"
- ok: "Ok"
- warning: "Warning"
- error: "Error"
- fatal: "Fatal"
- activerecord:
- models:
- import:
- zero: "import"
- one: "import"
- other: "imports"
- neptune_import:
- zero: "import"
- one: "Neptune import"
- other: "imports"
- csv_import:
- zero: "import"
- one: "CSV import"
- other: "imports"
- gtfs_import:
- zero: "import"
- one: "GTFS import"
- other: "imports"
- netex_import:
- zero: "import"
- one: "NeTEx import"
- other: "imports"
- attributes:
- import:
- resources: "File to import"
- created_at: "Created on"
- status: "Status"
- references_type: "subset"
- no_save: "No save"
- rule_parameter_set_id: "Rule parameter set for compliance check"
- object_id_prefix: "Neptune Id prefix"
- max_distance_for_commercial: "Max distance for commercial stop"
- max_distance_for_connection_link: "Max distance for connection link"
- ignore_last_word: "ignore last word"
- ignore_end_chars: "ignore last chars"
- formtastic:
- titles:
- import:
- max_distance_for_commercial: "Maximal distance to merge homonymous stops in commercial stop in meter"
- max_distance_for_connection_link: "Maximal distance to link stops by connection link stop in meter"
- ignore_last_word: "ignore last word on stop name in homonymous detection (inappliable when just one word occurs)"
- ignore_end_chars: "ignore some chars at the end of stop names in homonymous detection"
-fr:
- imports:
- actions:
- new: "Nouvel import"
- destroy: "Supprimer cet import"
- destroy_confirm: "Etes vous sûr de supprimer cet import ?"
- new:
- title: "Nouvel import"
- all: "Tout"
- flash: "La demande d'import est mise en file d'attente, veuillez rafraichir régulièrement la page pour en suivre la progression"
- fields_gtfs_import:
- warning: "Le filtre sur arrêts importe uniquement les fichiers GTFS stops et transfers gtfs, ceux-ci pouvant contenir des attributs supplémentaires"
- index:
- title: "Imports"
- warning: ""
- show:
- report: "Rapport"
- imported_file: "Fichier importé"
- graph:
- files:
- title_zip: "Résultat d'import des fichiers du zip"
- title_default: "Résultat d'import du fichier %{extension}"
- error: "Erreurs"
- ignored: "Ignorés"
- ok: "Succès"
- lines:
- title: "Volume de données lues par type de donnée"
- objects_label: "Quantité lue"
- lines_stats: "Lignes"
- routes_stats: "Séquences d'arrêts"
- connection_links_stats: "Correspondances"
- time_tables_stats: "Calendriers"
- stop_areas_stats: "Zones d'arrèt"
- access_points_stats: "Accès"
- vehicle_journeys_stats: "Courses"
- journey_patterns_stats: "Missions"
- table:
- line:
- name: "Nom"
- save: "Sauvegarde"
- routes: "Séquences d'arrêts"
- connection_links: "Correspondances"
- time_tables: "Calendriers"
- stop_areas: "Zones d'arrèt"
- access_points: "Accès"
- vehicle_journeys: "Courses"
- journey_patterns: "Missions"
- not_saved: "Non Sauvé"
- saved: "Sauvé"
- save_error: "Sauvegarde en erreur"
- statuses:
- created: "En file d'attente..."
- scheduled: "En cours..."
- terminated: "Achevé"
- canceled: "Annulé"
- aborted: "Echoué"
- compliance_check_task: "Validation"
- severities:
- info: "Information"
- uncheck: "Non testé"
- ok: "Ok"
- warning: "Alerte"
- error: "Erreur"
- fatal: "Fatal"
- activerecord:
- models:
- import:
- zero: "import"
- one: "import"
- other: "imports"
- neptune_import:
- zero: "import"
- one: "import Neptune"
- other: "imports"
- csv_import:
- zero: "import"
- one: "import CSV"
- other: "imports"
- gtfs_import:
- zero: "import"
- one: "import GTFS"
- other: "imports"
- netex_import:
- zero: "import"
- one: "import NeTEx"
- other: "imports"
- attributes:
- import:
- resources: "Fichier à importer"
- created_at: "Créé le"
- status: "Status"
- no_save: "Pas de sauvegarde"
- references_type: "Sous ensemble"
- rule_parameter_set_id: "Jeu de paramètres pour validation"
- object_id_prefix: "Préfixe d'identifiants"
- max_distance_for_commercial: "Distance max pour créer les zones"
- 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"
- formtastic:
- titles:
- import:
- max_distance_for_commercial: "Distance maximale entre deux arrêts homonymes pour créer les zones d'arrêt (en mètre)"
- max_distance_for_connection_link: "Distance maximale entre deux arrêts pour créer les correspondances (en mètre)"
- ignore_last_word: "Ignorer le dernier mot pour détecter l'homonymie des noms d'arrêt (inapplicable quand le nom ne comporte qu'un mot)"
- ignore_end_chars: "Ignorer les n derniers caractères du nom de l'arrêt pour détecter l'homonymie"
diff --git a/lib/ievkit/client.rb b/lib/ievkit/client.rb
index e35bbd0b3..5df3ca1d2 100644
--- a/lib/ievkit/client.rb
+++ b/lib/ievkit/client.rb
@@ -150,8 +150,11 @@ module Ievkit
#
# @return [Sawyer::Agent]
def multipart_agent
+ sawyer_options[:serializer] = Ievkit::Serializer.multipart
+
@agent ||= Sawyer::Agent.new(api_endpoint, sawyer_options) do |http|
http.headers[:accept] = default_media_type
+ http.headers[:content_type] = "multipart/form-data"
http.headers[:user_agent] = user_agent
# Activate if authentication is needed
diff --git a/lib/ievkit/serializer.rb b/lib/ievkit/serializer.rb
index c9a0247ef..8110ab3b5 100644
--- a/lib/ievkit/serializer.rb
+++ b/lib/ievkit/serializer.rb
@@ -31,6 +31,21 @@ module Ievkit
rescue LoadError
end
+ def self.multipart
+ new(IevMultipart)
+ rescue LoadError
+ end
+
+ class IevMultipart
+ def self.dump(data)
+ data
+ end
+
+ def self.load(data)
+ data
+ end
+ end
+
# Public: Wraps a serialization format for Sawyer. Nested objects are
# prepared for serialization (such as changing Times to ISO 8601 Strings).
# Any serialization format that responds to #dump and #load will work.
@@ -46,9 +61,8 @@ module Ievkit
#
# Returns an encoded String.
def encode(data)
- data #@dump.call(encode_object(data))
+ @dump.call(encode_object(data))
end
-
alias dump encode
# Public: Decodes a String into an Object (usually a Hash or Array of
@@ -78,8 +92,10 @@ module Ievkit
when Date then hash[key] = value.to_time.utc.xmlschema
when Time then hash[key] = value.utc.xmlschema
when Hash then hash[key] = encode_hash(value)
+ when UploadIO then hash[key] = value
end
end
+ puts "hash #{hash.inspect}"
hash
end
@@ -107,7 +123,7 @@ module Ievkit
value
end
elsif value.is_a?(Integer) || value.is_a?(Float)
- Time.at(value)
+ Time.at(value)
else
value
end