Skip to content

Commit

Permalink
Merge pull request #677 from woshilapin/prefix-configuration
Browse files Browse the repository at this point in the history
[feature] Use PrefixConfiguration in converters
  • Loading branch information
ArnaudOggy authored Jul 28, 2020
2 parents ecf31c9 + 7a60d82 commit 206e52a
Show file tree
Hide file tree
Showing 20 changed files with 206 additions and 171 deletions.
2 changes: 1 addition & 1 deletion Cargo.toml
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
[package]
authors = ["Kisio Digital <[email protected]>", "Guillaume Pinot <[email protected]>"]
name = "transit_model"
version = "0.24.0"
version = "0.25.0"
license = "AGPL-3.0-only"
description = "Transit data management"
repository = "https://github.com/CanalTP/transit_model"
Expand Down
25 changes: 15 additions & 10 deletions examples/gtfs_reader.rs
Original file line number Diff line number Diff line change
Expand Up @@ -13,18 +13,23 @@
// along with this program. If not, see <https://www.gnu.org/licenses/>

use serde_json::json;
use std::path::Path;
use transit_model::Result;
use std::collections::BTreeMap;
use transit_model::{
gtfs,
objects::{Contributor, Dataset},
Result,
};

fn run() -> Result<()> {
let configuration: transit_model::gtfs::Configuration<&Path> =
transit_model::gtfs::Configuration {
config_path: None,
prefix: None,
on_demand_transport: false,
on_demand_transport_comment: None,
};
let objects = transit_model::gtfs::read_from_path(".", configuration)?;
let configuration: gtfs::Configuration = gtfs::Configuration {
contributor: Contributor::default(),
dataset: Dataset::default(),
feed_infos: BTreeMap::new(),
prefix_conf: None,
on_demand_transport: false,
on_demand_transport_comment: None,
};
let objects = gtfs::read_from_path(".", configuration)?;
let json_objs = json!(objects);
println!("{:?}", json_objs.to_string());
Ok(())
Expand Down
2 changes: 1 addition & 1 deletion gtfs2netexfr/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -22,4 +22,4 @@ slog-scope = "4.1"
slog-stdlog = "4.0"
slog-term = "2.4"
structopt = "0.3"
transit_model = { version = "0.24", path = "../", features = ["proj"] }
transit_model = { version = "0.25", path = "../", features = ["proj"] }
9 changes: 6 additions & 3 deletions gtfs2netexfr/src/main.rs
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ use slog::{slog_o, Drain};
use slog_async::OverflowStrategy;
use std::path::PathBuf;
use structopt::StructOpt;
use transit_model::Result;
use transit_model::{read_utils, Result};

#[derive(Debug, StructOpt)]
#[structopt(name = "gtfs2netexfr", about = "Convert a GTFS to NeTEx France.")]
Expand Down Expand Up @@ -96,9 +96,12 @@ fn init_logger() -> slog_scope::GlobalLoggerGuard {
fn run(opt: Opt) -> Result<()> {
info!("Launching gtfs2netexfr...");

let (contributor, dataset, feed_infos) = read_utils::read_config(opt.config)?;
let configuration = transit_model::gtfs::Configuration {
config_path: opt.config,
prefix: None,
contributor,
dataset,
feed_infos,
prefix_conf: None,
on_demand_transport: opt.odt,
on_demand_transport_comment: opt.odt_comment,
};
Expand Down
2 changes: 1 addition & 1 deletion gtfs2ntfs/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -22,4 +22,4 @@ slog-scope = "4.1"
slog-stdlog = "4.0"
slog-term = "2.4"
structopt = "0.3"
transit_model = { version = "0.24", path = "../" }
transit_model = { version = "0.25", path = "../" }
14 changes: 11 additions & 3 deletions gtfs2ntfs/src/main.rs
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ use slog::{slog_o, Drain};
use slog_async::OverflowStrategy;
use std::path::PathBuf;
use structopt::StructOpt;
use transit_model::{transfers::generates_transfers, Result};
use transit_model::{read_utils, transfers::generates_transfers, PrefixConfiguration, Result};

#[derive(Debug, StructOpt)]
#[structopt(name = "gtfs2ntfs", about = "Convert a GTFS to an NTFS.")]
Expand Down Expand Up @@ -99,9 +99,17 @@ fn init_logger() -> slog_scope::GlobalLoggerGuard {
fn run(opt: Opt) -> Result<()> {
info!("Launching gtfs2ntfs...");

let (contributor, dataset, feed_infos) = read_utils::read_config(opt.config)?;
let mut prefix_conf = PrefixConfiguration::default();
if let Some(data_prefix) = opt.prefix {
prefix_conf.set_data_prefix(data_prefix);
}
prefix_conf.set_dataset_id(&dataset.id);
let configuration = transit_model::gtfs::Configuration {
config_path: opt.config,
prefix: opt.prefix,
contributor,
dataset,
feed_infos,
prefix_conf: Some(prefix_conf),
on_demand_transport: opt.odt,
on_demand_transport_comment: opt.odt_comment,
};
Expand Down
2 changes: 1 addition & 1 deletion ntfs2gtfs/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -22,4 +22,4 @@ slog-scope = "4.1"
slog-stdlog = "4.0"
slog-term = "2.4"
structopt = "0.3"
transit_model = { version = "0.24", path = "../" }
transit_model = { version = "0.25", path = "../" }
2 changes: 1 addition & 1 deletion ntfs2netexfr/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -22,4 +22,4 @@ slog-scope = "4.1"
slog-stdlog = "4.0"
slog-term = "2.4"
structopt = "0.3"
transit_model = { version = "0.24", path = "../", features = ["proj"] }
transit_model = { version = "0.25", path = "../", features = ["proj"] }
2 changes: 1 addition & 1 deletion ntfs2ntfs/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -22,4 +22,4 @@ slog-scope = "4.1"
slog-stdlog = "4.0"
slog-term = "2.4"
structopt = "0.3"
transit_model = { version = "0.24", path = "../" }
transit_model = { version = "0.25", path = "../" }
2 changes: 1 addition & 1 deletion restrict-validity-period/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -21,4 +21,4 @@ slog-scope = "4.1"
slog-stdlog = "4.0"
slog-term = "2.4"
structopt = "0.3"
transit_model = { version = "0.24", path = "../" }
transit_model = { version = "0.25", path = "../" }
55 changes: 27 additions & 28 deletions src/gtfs/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -21,17 +21,15 @@ use crate::{
calendars::{manage_calendars, write_calendar_dates},
gtfs::read::EquipmentList,
model::{Collections, Model},
objects,
objects::{Availability, StopPoint, StopType, Time},
objects::{self, Availability, Contributor, Dataset, StopPoint, StopType, Time},
read_utils,
utils::*,
validity_period, AddPrefix, PrefixConfiguration, Result,
};
use derivative::Derivative;
use log::info;
use serde::{Deserialize, Serialize};
use std::fmt;
use std::path::Path;
use std::{collections::BTreeMap, fmt, path::Path};
use typed_index_collection::{CollectionWithId, Idx};

#[derive(Serialize, Deserialize, Debug, Clone, PartialEq)]
Expand Down Expand Up @@ -257,33 +255,42 @@ struct Shape {
}

///parameters consolidation
#[derive(Clone)]
pub struct Configuration<P: AsRef<Path>> {
/// path to configuration file
pub config_path: Option<P>,
pub struct Configuration {
/// The Contributor providing the Dataset
pub contributor: Contributor,
/// Describe the Dataset being parsed
pub dataset: Dataset,
/// Additional key-values for the 'feed_infos.txt'
pub feed_infos: BTreeMap<String, String>,
/// used to prefix objects
pub prefix: Option<String>,
pub prefix_conf: Option<PrefixConfiguration>,
/// stop time precision management
pub on_demand_transport: bool,
/// on demand transport comment template
pub on_demand_transport_comment: Option<String>,
}

fn read<H, P: AsRef<Path>>(file_handler: &mut H, configuration: Configuration<P>) -> Result<Model>
fn read<H>(file_handler: &mut H, configuration: Configuration) -> Result<Model>
where
for<'a> &'a mut H: read_utils::FileHandler,
{
let mut collections = Collections::default();
let mut equipments = EquipmentList::default();

manage_calendars(file_handler, &mut collections)?;
let Configuration {
contributor,
mut dataset,
feed_infos,
prefix_conf,
on_demand_transport,
on_demand_transport_comment,
} = configuration;

let (contributor, mut dataset, feed_infos) =
read_utils::read_config(configuration.config_path)?;
manage_calendars(file_handler, &mut collections)?;
validity_period::compute_dataset_validity_period(&mut dataset, &collections.calendars)?;

collections.contributors = CollectionWithId::new(vec![contributor])?;
collections.datasets = CollectionWithId::new(vec![dataset])?;
collections.contributors = CollectionWithId::from(contributor);
collections.datasets = CollectionWithId::from(dataset);
collections.feed_infos = feed_infos;

let (networks, companies) = read::read_agency(file_handler)?;
Expand All @@ -303,17 +310,15 @@ where
read::manage_stop_times(
&mut collections,
file_handler,
configuration.on_demand_transport,
configuration.on_demand_transport_comment,
on_demand_transport,
on_demand_transport_comment,
)?;
read::manage_frequencies(&mut collections, file_handler)?;
read::manage_pathways(&mut collections, file_handler)?;
collections.levels = read_utils::read_opt_collection(file_handler, "levels.txt")?;

//add prefixes
if let Some(prefix) = configuration.prefix {
let mut prefix_conf = PrefixConfiguration::default();
prefix_conf.set_data_prefix(prefix);
if let Some(prefix_conf) = prefix_conf {
collections.prefix(&prefix_conf);
}

Expand All @@ -331,10 +336,7 @@ where
/// The `prefix` argument is a string that will be prepended to every
/// identifiers, allowing to namespace the dataset. By default, no
/// prefix will be added to the identifiers.
pub fn read_from_path<P: AsRef<Path>>(
p: P,
configuration: Configuration<impl AsRef<Path>>,
) -> Result<Model> {
pub fn read_from_path<P: AsRef<Path>>(p: P, configuration: Configuration) -> Result<Model> {
let mut file_handle = read_utils::PathFileHandler::new(p.as_ref().to_path_buf());
read(&mut file_handle, configuration)
}
Expand All @@ -349,10 +351,7 @@ pub fn read_from_path<P: AsRef<Path>>(
/// The `prefix` argument is a string that will be prepended to every
/// identifiers, allowing to namespace the dataset. By default, no
/// prefix will be added to the identifiers.
pub fn read_from_zip<P: AsRef<Path>>(
path: P,
configuration: Configuration<impl AsRef<Path>>,
) -> Result<Model> {
pub fn read_from_zip<P: AsRef<Path>>(path: P, configuration: Configuration) -> Result<Model> {
let mut file_handler = read_utils::ZipHandler::new(path)?;
read(&mut file_handler, configuration)
}
Expand Down
6 changes: 3 additions & 3 deletions tests/fixtures/gtfs2ntfs/full_output/calendar.txt
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
service_id,monday,tuesday,wednesday,thursday,friday,saturday,sunday,start_date,end_date
ME:service:1,1,1,1,0,0,0,0,20180101,20180103
ME:service:2,0,0,0,0,1,1,0,20180105,20180106
ME:service:2:+1days,0,0,0,0,0,1,1,20180106,20180107
ME:Defaul:service:1,1,1,1,0,0,0,0,20180101,20180103
ME:Defaul:service:2,0,0,0,0,1,1,0,20180105,20180106
ME:Defaul:service:2:+1days,0,0,0,0,0,1,1,20180106,20180107
4 changes: 2 additions & 2 deletions tests/fixtures/gtfs2ntfs/full_output/comment_links.txt
Original file line number Diff line number Diff line change
@@ -1,3 +1,3 @@
object_id,object_type,comment_id
ME:stoparea:1,stop_area,ME:stop:stoparea:1
ME:stop:11,stop_point,ME:stop:stop:11
ME:stoparea:1,stop_area,ME:Defaul:stop:stoparea:1
ME:stop:11,stop_point,ME:Defaul:stop:stop:11
4 changes: 2 additions & 2 deletions tests/fixtures/gtfs2ntfs/full_output/comments.txt
Original file line number Diff line number Diff line change
@@ -1,3 +1,3 @@
comment_id,comment_type,comment_label,comment_name,comment_url
ME:stop:stoparea:1,information,,stoparea:1_comment,
ME:stop:stop:11,information,,stop:11_comment,
ME:Defaul:stop:stoparea:1,information,,stoparea:1_comment,
ME:Defaul:stop:stop:11,information,,stop:11_comment,
18 changes: 9 additions & 9 deletions tests/fixtures/gtfs2ntfs/full_output/object_codes.txt
Original file line number Diff line number Diff line change
Expand Up @@ -11,12 +11,12 @@ stop_point,ME:stop:53,source,stop:53
stop_point,ME:stop:61,source,stop:61
network,ME:1,source,1
network,ME:2,source,2
trip,ME:trip:3-0,source,trip:3
trip,ME:trip:4-0,source,trip:4
trip,ME:trip:4-1,source,trip:4
trip,ME:trip:4-2,source,trip:4
trip,ME:trip:4-3,source,trip:4
trip,ME:trip:5-0,source,trip:5
trip,ME:trip:5-1,source,trip:5
trip,ME:trip:5-2,source,trip:5
trip,ME:trip:6,source,trip:6
trip,ME:Defaul:trip:3-0,source,trip:3
trip,ME:Defaul:trip:4-0,source,trip:4
trip,ME:Defaul:trip:4-1,source,trip:4
trip,ME:Defaul:trip:4-2,source,trip:4
trip,ME:Defaul:trip:4-3,source,trip:4
trip,ME:Defaul:trip:5-0,source,trip:5
trip,ME:Defaul:trip:5-1,source,trip:5
trip,ME:Defaul:trip:5-2,source,trip:5
trip,ME:Defaul:trip:6,source,trip:6
52 changes: 26 additions & 26 deletions tests/fixtures/gtfs2ntfs/full_output/stop_times.txt
Original file line number Diff line number Diff line change
@@ -1,27 +1,27 @@
stop_id,trip_id,stop_sequence,arrival_time,departure_time,boarding_duration,alighting_duration,pickup_type,drop_off_type,datetime_estimated,local_zone_id,stop_headsign,stop_time_id,stop_time_precision
ME:stop:11,ME:trip:4-0,0,20:00:00,20:00:00,0,0,2,0,1,,,,0
ME:stop:11,ME:trip:4-1,0,20:30:00,20:30:00,0,0,2,0,1,,,,0
ME:stop:11,ME:trip:4-2,0,21:00:00,21:00:00,0,0,2,0,1,,,,0
ME:stop:11,ME:trip:4-3,0,21:30:00,21:30:00,0,0,2,0,1,,,,0
ME:stop:22,ME:trip:4-0,1,20:09:00,20:09:00,0,0,2,0,1,,,,0
ME:stop:22,ME:trip:4-1,1,20:39:00,20:39:00,0,0,2,0,1,,,,0
ME:stop:22,ME:trip:4-2,1,21:09:00,21:09:00,0,0,2,0,1,,,,0
ME:stop:22,ME:trip:4-3,1,21:39:00,21:39:00,0,0,2,0,1,,,,0
ME:stop:31,ME:trip:3-0,0,10:00:00,10:00:00,0,0,0,0,0,,,,0
ME:stop:32,ME:trip:3-0,1,10:13:00,10:15:00,0,0,0,0,0,,,,0
ME:stop:33,ME:trip:3-0,2,10:20:00,10:25:00,0,0,0,0,0,,,,0
ME:stop:33,ME:trip:4-0,2,20:17:00,20:19:00,0,0,2,0,1,,,,0
ME:stop:33,ME:trip:4-1,2,20:47:00,20:49:00,0,0,2,0,1,,,,0
ME:stop:33,ME:trip:4-2,2,21:17:00,21:19:00,0,0,2,0,1,,,,0
ME:stop:33,ME:trip:4-3,2,21:47:00,21:49:00,0,0,2,0,1,,,,0
ME:stop:51,ME:trip:5-0,0,23:00:00,23:00:00,0,0,2,0,0,,,,0
ME:stop:51,ME:trip:5-1,0,23:50:00,23:50:00,0,0,2,0,0,,,,0
ME:stop:51,ME:trip:5-2,0,00:40:00,00:40:00,0,0,2,0,0,,,,0
ME:stop:52,ME:trip:5-0,1,23:47:00,23:47:00,0,0,2,0,0,,,,0
ME:stop:52,ME:trip:5-1,1,24:37:00,24:37:00,0,0,2,0,0,,,,0
ME:stop:52,ME:trip:5-2,1,01:27:00,01:27:00,0,0,2,0,0,,,,0
ME:stop:53,ME:trip:5-0,2,24:17:00,24:17:00,0,0,0,2,0,,,,0
ME:stop:53,ME:trip:5-1,2,25:07:00,25:07:00,0,0,0,2,0,,,,0
ME:stop:53,ME:trip:5-2,2,01:57:00,01:57:00,0,0,0,2,0,,,,0
ME:stop:61,ME:trip:6,0,14:40:00,14:40:00,0,0,2,0,0,,,,0
ME:stop:61,ME:trip:6,1,15:20:00,15:20:00,0,0,2,0,0,,,,0
ME:stop:11,ME:Defaul:trip:4-0,0,20:00:00,20:00:00,0,0,2,0,1,,,,0
ME:stop:11,ME:Defaul:trip:4-1,0,20:30:00,20:30:00,0,0,2,0,1,,,,0
ME:stop:11,ME:Defaul:trip:4-2,0,21:00:00,21:00:00,0,0,2,0,1,,,,0
ME:stop:11,ME:Defaul:trip:4-3,0,21:30:00,21:30:00,0,0,2,0,1,,,,0
ME:stop:22,ME:Defaul:trip:4-0,1,20:09:00,20:09:00,0,0,2,0,1,,,,0
ME:stop:22,ME:Defaul:trip:4-1,1,20:39:00,20:39:00,0,0,2,0,1,,,,0
ME:stop:22,ME:Defaul:trip:4-2,1,21:09:00,21:09:00,0,0,2,0,1,,,,0
ME:stop:22,ME:Defaul:trip:4-3,1,21:39:00,21:39:00,0,0,2,0,1,,,,0
ME:stop:31,ME:Defaul:trip:3-0,0,10:00:00,10:00:00,0,0,0,0,0,,,,0
ME:stop:32,ME:Defaul:trip:3-0,1,10:13:00,10:15:00,0,0,0,0,0,,,,0
ME:stop:33,ME:Defaul:trip:3-0,2,10:20:00,10:25:00,0,0,0,0,0,,,,0
ME:stop:33,ME:Defaul:trip:4-0,2,20:17:00,20:19:00,0,0,2,0,1,,,,0
ME:stop:33,ME:Defaul:trip:4-1,2,20:47:00,20:49:00,0,0,2,0,1,,,,0
ME:stop:33,ME:Defaul:trip:4-2,2,21:17:00,21:19:00,0,0,2,0,1,,,,0
ME:stop:33,ME:Defaul:trip:4-3,2,21:47:00,21:49:00,0,0,2,0,1,,,,0
ME:stop:51,ME:Defaul:trip:5-0,0,23:00:00,23:00:00,0,0,2,0,0,,,,0
ME:stop:51,ME:Defaul:trip:5-1,0,23:50:00,23:50:00,0,0,2,0,0,,,,0
ME:stop:51,ME:Defaul:trip:5-2,0,00:40:00,00:40:00,0,0,2,0,0,,,,0
ME:stop:52,ME:Defaul:trip:5-0,1,23:47:00,23:47:00,0,0,2,0,0,,,,0
ME:stop:52,ME:Defaul:trip:5-1,1,24:37:00,24:37:00,0,0,2,0,0,,,,0
ME:stop:52,ME:Defaul:trip:5-2,1,01:27:00,01:27:00,0,0,2,0,0,,,,0
ME:stop:53,ME:Defaul:trip:5-0,2,24:17:00,24:17:00,0,0,0,2,0,,,,0
ME:stop:53,ME:Defaul:trip:5-1,2,25:07:00,25:07:00,0,0,0,2,0,,,,0
ME:stop:53,ME:Defaul:trip:5-2,2,01:57:00,01:57:00,0,0,0,2,0,,,,0
ME:stop:61,ME:Defaul:trip:6,0,14:40:00,14:40:00,0,0,2,0,0,,,,0
ME:stop:61,ME:Defaul:trip:6,1,15:20:00,15:20:00,0,0,2,0,0,,,,0
4 changes: 2 additions & 2 deletions tests/fixtures/gtfs2ntfs/full_output/trip_properties.txt
Original file line number Diff line number Diff line change
@@ -1,3 +1,3 @@
trip_property_id,wheelchair_accessible,bike_accepted,air_conditioned,visual_announcement,audible_announcement,appropriate_escort,appropriate_signage,school_vehicle_type
ME:1,1,0,0,0,0,0,0,0
ME:2,2,0,0,0,0,0,0,0
ME:Defaul:1,1,0,0,0,0,0,0,0
ME:Defaul:2,2,0,0,0,0,0,0,0
18 changes: 9 additions & 9 deletions tests/fixtures/gtfs2ntfs/full_output/trips.txt
Original file line number Diff line number Diff line change
@@ -1,10 +1,10 @@
trip_id,route_id,physical_mode_id,dataset_id,service_id,trip_headsign,trip_short_name,block_id,company_id,trip_property_id,geometry_id,journey_pattern_id
ME:trip:3-0,ME:route:2,Metro,ME:DefaultDatasetId,ME:service:1,pouet,,,ME:1,ME:1,,
ME:trip:4-0,ME:route:2,Metro,ME:DefaultDatasetId,ME:service:1,pouet,,,ME:1,ME:1,,
ME:trip:4-1,ME:route:2,Metro,ME:DefaultDatasetId,ME:service:1,pouet,,,ME:1,ME:1,,
ME:trip:4-2,ME:route:2,Metro,ME:DefaultDatasetId,ME:service:1,pouet,,,ME:1,ME:1,,
ME:trip:4-3,ME:route:2,Metro,ME:DefaultDatasetId,ME:service:1,pouet,,,ME:1,ME:1,,
ME:trip:5-0,ME:route:3,Metro,ME:DefaultDatasetId,ME:service:2,pouet,,,ME:2,ME:2,,
ME:trip:5-1,ME:route:3,Metro,ME:DefaultDatasetId,ME:service:2,pouet,,,ME:2,ME:2,,
ME:trip:5-2,ME:route:3,Metro,ME:DefaultDatasetId,ME:service:2:+1days,pouet,,,ME:2,ME:2,,
ME:trip:6,ME:route:3,Metro,ME:DefaultDatasetId,ME:service:2,pouet,,,ME:2,,,
ME:Defaul:trip:3-0,ME:route:2,Metro,ME:DefaultDatasetId,ME:Defaul:service:1,pouet,,,ME:1,ME:Defaul:1,,
ME:Defaul:trip:4-0,ME:route:2,Metro,ME:DefaultDatasetId,ME:Defaul:service:1,pouet,,,ME:1,ME:Defaul:1,,
ME:Defaul:trip:4-1,ME:route:2,Metro,ME:DefaultDatasetId,ME:Defaul:service:1,pouet,,,ME:1,ME:Defaul:1,,
ME:Defaul:trip:4-2,ME:route:2,Metro,ME:DefaultDatasetId,ME:Defaul:service:1,pouet,,,ME:1,ME:Defaul:1,,
ME:Defaul:trip:4-3,ME:route:2,Metro,ME:DefaultDatasetId,ME:Defaul:service:1,pouet,,,ME:1,ME:Defaul:1,,
ME:Defaul:trip:5-0,ME:route:3,Metro,ME:DefaultDatasetId,ME:Defaul:service:2,pouet,,,ME:2,ME:Defaul:2,,
ME:Defaul:trip:5-1,ME:route:3,Metro,ME:DefaultDatasetId,ME:Defaul:service:2,pouet,,,ME:2,ME:Defaul:2,,
ME:Defaul:trip:5-2,ME:route:3,Metro,ME:DefaultDatasetId,ME:Defaul:service:2:+1days,pouet,,,ME:2,ME:Defaul:2,,
ME:Defaul:trip:6,ME:route:3,Metro,ME:DefaultDatasetId,ME:Defaul:service:2,pouet,,,ME:2,,,
Loading

0 comments on commit 206e52a

Please sign in to comment.