diff --git a/blocks_to_transfers/__main__.py b/blocks_to_transfers/__main__.py index f508256..857f366 100644 --- a/blocks_to_transfers/__main__.py +++ b/blocks_to_transfers/__main__.py @@ -4,7 +4,7 @@ import json import sys import gtfs_loader -from . import convert_blocks, config, service_days, classify_transfers, simplify_fix, simplify_linear, simplify_export, logs, runtime_config +from . import convert_blocks, config, service_days, classify_transfers, simplify_fix, simplify_linear, simplify_export, logs, runtime_config, set_pickup_drop_off def process(in_dir, @@ -27,6 +27,8 @@ def process(in_dir, output_graph = graph simplify_export.export_visit(output_graph) + set_pickup_drop_off.set_pickup_drop_off(gtfs) + if remove_existing_files: shutil.rmtree(out_dir, ignore_errors=True) diff --git a/blocks_to_transfers/set_pickup_drop_off.py b/blocks_to_transfers/set_pickup_drop_off.py new file mode 100644 index 0000000..e0eae66 --- /dev/null +++ b/blocks_to_transfers/set_pickup_drop_off.py @@ -0,0 +1,16 @@ +from gtfs_loader.schema import TransferType, PickupType + +def set_pickup_drop_off(gtfs): + for from_trip_id, transfers in gtfs.transfers.items(): + for transfer in transfers: + transfer_type = transfer.transfer_type + to_trip_id = transfer.to_trip_id + + if not (from_trip_id and to_trip_id): + continue + + if transfer_type in TransferType and transfer_type != TransferType.IN_SEAT: + continue + + gtfs.stop_times[from_trip_id][-1].pickup_type = PickupType.REGULARLY_SCHEDULED + gtfs.stop_times[to_trip_id][0].drop_off_type = PickupType.REGULARLY_SCHEDULED diff --git a/setup.py b/setup.py index 8ce1b1b..62c140f 100644 --- a/setup.py +++ b/setup.py @@ -2,7 +2,7 @@ import dependency_info setup(name='GTFS-blocks-to-transfers', - version='1.5.3', + version='1.6.0', description='Convert GTFS blocks to trip-to-trip transfers', url='https://github.com/TransitApp/GTFS-blocks-to-transfers', author='Nicholas Paun', diff --git a/tests/test_competing_continuations_on_same_day/expected_linear/stop_times.txt b/tests/test_competing_continuations_on_same_day/expected_linear/stop_times.txt new file mode 100644 index 0000000..4b7d901 --- /dev/null +++ b/tests/test_competing_continuations_on_same_day/expected_linear/stop_times.txt @@ -0,0 +1,13 @@ +trip_id,stop_sequence,stop_id,arrival_time,departure_time,pickup_type,drop_off_type,start_pickup_drop_off_window,end_pickup_drop_off_window,mean_duration_factor,mean_duration_offset,safe_duration_factor,safe_duration_offset +loop,0,nelson-tc,11:41:00,11:41:00,0,0,,,,,, +loop,1,3-08,11:48:00,11:48:00,0,0,,,,,, +loop,2,3-12,11:51:00,11:51:00,0,0,,,,,, +loop,3,nelson-tc,11:56:00,11:56:00,0,0,,,,,, +trip_1_b2t:if_fri-sat,0,castlegar-tc,11:00:00,11:00:00,0,1,,,,,, +trip_1_b2t:if_fri-sat,1,nelson-tc,11:40:00,11:40:00,0,0,,,,,, +trip_1_b2t:if_mon-tues-wed-thurs,0,castlegar-tc,11:00:00,11:00:00,0,1,,,,,, +trip_1_b2t:if_mon-tues-wed-thurs,1,nelson-tc,11:40:00,11:40:00,1,0,,,,,, +trip_3_b2t:if_fri-sat,0,nelson-tc,11:59:00,11:59:00,0,0,,,,,, +trip_3_b2t:if_fri-sat,1,castlegar-tc,12:39:00,12:39:00,1,0,,,,,, +trip_3_b2t:if_mon-tues-wed-thurs,0,nelson-tc,11:59:00,11:59:00,0,1,,,,,, +trip_3_b2t:if_mon-tues-wed-thurs,1,castlegar-tc,12:39:00,12:39:00,1,0,,,,,, diff --git a/tests/test_competing_continuations_on_same_day/expected_standard/stop_times.txt b/tests/test_competing_continuations_on_same_day/expected_standard/stop_times.txt new file mode 100644 index 0000000..6d5112e --- /dev/null +++ b/tests/test_competing_continuations_on_same_day/expected_standard/stop_times.txt @@ -0,0 +1,11 @@ +trip_id,stop_sequence,stop_id,arrival_time,departure_time,pickup_type,drop_off_type,start_pickup_drop_off_window,end_pickup_drop_off_window,mean_duration_factor,mean_duration_offset,safe_duration_factor,safe_duration_offset +loop,0,nelson-tc,11:41:00,11:41:00,0,0,,,,,, +loop,1,3-08,11:48:00,11:48:00,0,0,,,,,, +loop,2,3-12,11:51:00,11:51:00,0,0,,,,,, +loop,3,nelson-tc,11:56:00,11:56:00,0,0,,,,,, +trip_1,0,castlegar-tc,11:00:00,11:00:00,0,1,,,,,, +trip_1,1,nelson-tc,11:40:00,11:40:00,0,0,,,,,, +trip_3_b2t:if_fri-sat,0,nelson-tc,11:59:00,11:59:00,0,0,,,,,, +trip_3_b2t:if_fri-sat,1,castlegar-tc,12:39:00,12:39:00,1,0,,,,,, +trip_3_b2t:if_mon-tues-wed-thurs,0,nelson-tc,11:59:00,11:59:00,0,1,,,,,, +trip_3_b2t:if_mon-tues-wed-thurs,1,castlegar-tc,12:39:00,12:39:00,1,0,,,,,, diff --git a/tests/test_competing_continuations_on_same_day/input/stop_times.txt b/tests/test_competing_continuations_on_same_day/input/stop_times.txt index e01c9de..5a2d3ce 100644 --- a/tests/test_competing_continuations_on_same_day/input/stop_times.txt +++ b/tests/test_competing_continuations_on_same_day/input/stop_times.txt @@ -1,9 +1,9 @@ -trip_id,stop_sequence,stop_id,arrival_time,departure_time -trip_1,0,castlegar-tc,11:00:00,11:00:00 -trip_1,1,nelson-tc,11:40:00,11:40:00 -loop,0,nelson-tc,11:41:00,11:41:00 -loop,1,3-08,11:48:00,11:48:00 -loop,2,3-12,11:51:00,11:51:00 -loop,3,nelson-tc,11:56:00,11:56:00 -trip_3,0,nelson-tc,11:59:00,11:59:00 -trip_3,1,castlegar-tc,12:39:00,12:39:00 +trip_id,stop_sequence,stop_id,arrival_time,departure_time,pickup_type,drop_off_type +trip_1,0,castlegar-tc,11:00:00,11:00:00,0,1 +trip_1,1,nelson-tc,11:40:00,11:40:00,1,0 +loop,0,nelson-tc,11:41:00,11:41:00,0,1 +loop,1,3-08,11:48:00,11:48:00,0,0 +loop,2,3-12,11:51:00,11:51:00,0,0 +loop,3,nelson-tc,11:56:00,11:56:00,1,0 +trip_3,0,nelson-tc,11:59:00,11:59:00,0,1 +trip_3,1,castlegar-tc,12:39:00,12:39:00,1,0 diff --git a/tests/test_full_loops/expected_standard/stop_times.txt b/tests/test_full_loops/expected_standard/stop_times.txt index febb552..d15bc2f 100644 --- a/tests/test_full_loops/expected_standard/stop_times.txt +++ b/tests/test_full_loops/expected_standard/stop_times.txt @@ -1,16 +1,16 @@ -trip_id,stop_sequence,stop_id,arrival_time,departure_time,start_pickup_drop_off_window,end_pickup_drop_off_window,pickup_type,drop_off_type,mean_duration_factor,mean_duration_offset,safe_duration_factor,safe_duration_offset -trip_1,0,junction,22:00:00,22:00:00,,,0,0,,,, -trip_1,1,slocan-park,22:01:00,22:01:00,,,0,0,,,, -trip_1,2,slocan-city,22:02:00,22:02:00,,,0,0,,,, -trip_1,3,nelson-tc,22:03:00,22:03:00,,,0,0,,,, -trip_1,4,junction,22:04:00,22:04:00,,,0,0,,,, -trip_2,0,junction,22:04:00,22:04:00,,,0,0,,,, -trip_2,1,slocan-park,22:05:00,22:05:00,,,0,0,,,, -trip_2,2,slocan-city,22:06:00,22:06:00,,,0,0,,,, -trip_2,3,nelson-tc,22:07:00,22:07:00,,,0,0,,,, -trip_2,4,junction,22:08:00,22:08:00,,,0,0,,,, -trip_3,0,junction,22:08:00,22:08:00,,,0,0,,,, -trip_3,1,slocan-park,22:09:00,22:09:00,,,0,0,,,, -trip_3,2,slocan-city,22:10:00,22:10:00,,,0,0,,,, -trip_3,3,nelson-tc,22:11:00,22:11:00,,,0,0,,,, -trip_3,4,junction,22:12:00,22:12:00,,,0,0,,,, \ No newline at end of file +trip_id,stop_sequence,stop_id,arrival_time,departure_time,pickup_type,drop_off_type,start_pickup_drop_off_window,end_pickup_drop_off_window,mean_duration_factor,mean_duration_offset,safe_duration_factor,safe_duration_offset +trip_1,0,junction,22:00:00,22:00:00,0,1,,,,,, +trip_1,1,slocan-park,22:01:00,22:01:00,0,0,,,,,, +trip_1,2,slocan-city,22:02:00,22:02:00,0,0,,,,,, +trip_1,3,nelson-tc,22:03:00,22:03:00,0,0,,,,,, +trip_1,4,junction,22:04:00,22:04:00,0,0,,,,,, +trip_2,0,junction,22:04:00,22:04:00,0,0,,,,,, +trip_2,1,slocan-park,22:05:00,22:05:00,0,0,,,,,, +trip_2,2,slocan-city,22:06:00,22:06:00,0,0,,,,,, +trip_2,3,nelson-tc,22:07:00,22:07:00,0,0,,,,,, +trip_2,4,junction,22:08:00,22:08:00,0,0,,,,,, +trip_3,0,junction,22:08:00,22:08:00,0,0,,,,,, +trip_3,1,slocan-park,22:09:00,22:09:00,0,0,,,,,, +trip_3,2,slocan-city,22:10:00,22:10:00,0,0,,,,,, +trip_3,3,nelson-tc,22:11:00,22:11:00,0,0,,,,,, +trip_3,4,junction,22:12:00,22:12:00,1,0,,,,,, diff --git a/tests/test_full_loops/input/stop_times.txt b/tests/test_full_loops/input/stop_times.txt index 265f948..5f61256 100644 --- a/tests/test_full_loops/input/stop_times.txt +++ b/tests/test_full_loops/input/stop_times.txt @@ -1,16 +1,16 @@ -trip_id,stop_sequence,stop_id,arrival_time,departure_time -trip_1,0,junction,22:00:00,22:00:00 -trip_1,1,slocan-park,22:01:00,22:01:00 -trip_1,2,slocan-city,22:02:00,22:02:00 -trip_1,3,nelson-tc,22:03:00,22:03:00 -trip_1,4,junction,22:04:00,22:04:00 -trip_2,0,junction,22:04:00,22:04:00 -trip_2,1,slocan-park,22:05:00,22:05:00 -trip_2,2,slocan-city,22:06:00,22:06:00 -trip_2,3,nelson-tc,22:07:00,22:07:00 -trip_2,4,junction,22:08:00,22:08:00 -trip_3,0,junction,22:08:00,22:08:00 -trip_3,1,slocan-park,22:09:00,22:09:00 -trip_3,2,slocan-city,22:10:00,22:10:00 -trip_3,3,nelson-tc,22:11:00,22:11:00 -trip_3,4,junction,22:12:00,22:12:00 +trip_id,stop_sequence,stop_id,arrival_time,departure_time,pickup_type,drop_off_type +trip_1,0,junction,22:00:00,22:00:00,0,1 +trip_1,1,slocan-park,22:01:00,22:01:00,0,0 +trip_1,2,slocan-city,22:02:00,22:02:00,0,0 +trip_1,3,nelson-tc,22:03:00,22:03:00,0,0 +trip_1,4,junction,22:04:00,22:04:00,1,0 +trip_2,0,junction,22:04:00,22:04:00,0,1 +trip_2,1,slocan-park,22:05:00,22:05:00,0,0 +trip_2,2,slocan-city,22:06:00,22:06:00,0,0 +trip_2,3,nelson-tc,22:07:00,22:07:00,0,0 +trip_2,4,junction,22:08:00,22:08:00,1,0 +trip_3,0,junction,22:08:00,22:08:00,0,1 +trip_3,1,slocan-park,22:09:00,22:09:00,0,0 +trip_3,2,slocan-city,22:10:00,22:10:00,0,0 +trip_3,3,nelson-tc,22:11:00,22:11:00,0,0 +trip_3,4,junction,22:12:00,22:12:00,1,0