initial commit
All checks were successful
GTFS Route Modification / modify_routes (push) Successful in 21s

This commit is contained in:
Charles P. 2024-05-31 20:55:22 +02:00 committed by Charles P.
parent 3539f4a221
commit 9903cbee0a
Signed by: aeris
GPG key ID: 73DB72EFCC60AB96
6 changed files with 107 additions and 1 deletions

View file

@ -0,0 +1,16 @@
name: GTFS Route Modification
on: [push]
jobs:
modify_routes:
runs-on: docker
steps:
- name: Checkout repository
uses: actions/checkout@v4
- name: Run GTFS Route Modifier
uses: gtfs-actions/route-type-modifier@v1
with:
gtfs_file: 'path/to/your/gtfs.zip'
routes: '1:3,2:5'

11
Dockerfile Normal file
View file

@ -0,0 +1,11 @@
FROM python:3.12-slim
WORKDIR /app
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt
COPY modify_gtfs.py .
COPY action.yml .
ENTRYPOINT ["python", "modify_gtfs.py"]

View file

@ -1,2 +1,20 @@
# route-type-modifier
# GTFS Route Type Modifier
### Usage
```yaml
name: GTFS Route Type Modification
on: [push]
jobs:
modify_routes:
runs-on: ubuntu-latest
steps:
- name: Checkout repository
uses: actions/checkout@v4
- name: Run GTFS Route Modifier
uses: gtfs-actions/route-type-modifier@v1
with:
gtfs_file: 'path/to/your/gtfs.zip'
routes: '1:3,2:5'
```

18
action.yml Normal file
View file

@ -0,0 +1,18 @@
name: 'GTFS Route Type Modifier'
description: 'Change route type in a GTFS feed.'
inputs:
gtfs_file:
description: 'Path to GTFS .zip file.'
required: true
routes:
description: 'List of routes and types.'
required: true
output_file:
description: 'Path to output .zip file.'
required: false
default: ''
runs:
using: 'docker'
image: 'Dockerfile'

42
modify_gtfs.py Normal file
View file

@ -0,0 +1,42 @@
import os
import sys
import zipfile
import pandas as pd
import tempfile
def modify_routes(gtfs_file, routes, output_file=None):
if not output_file:
output_file = gtfs_file
# unzip gtfs feed
with tempfile.TemporaryDirectory() as tmpdirname:
with zipfile.ZipFile(gtfs_file, 'r') as zip_ref:
zip_ref.extractall(tmpdirname)
# load routes.txt in a DataFrame
routes_path = os.path.join(tmpdirname, 'routes.txt')
routes_df = pd.read_csv(routes_path)
# edit route types
for route_change in routes.split(','):
route_id, new_type = route_change.split(':')
routes_df.loc[routes_df['route_id'] == route_id, 'route_type'] = int(new_type)
# save to routes.txt
routes_df.to_csv(routes_path, index=False)
# recreate zip file
with zipfile.ZipFile(output_file, 'w') as zip_ref:
for foldername, subfolders, filenames in os.walk(tmpdirname):
for filename in filenames:
file_path = os.path.join(foldername, filename)
zip_ref.write(file_path, os.path.relpath(file_path, tmpdirname))
if __name__ == "main":
gtfs_file = sys.argv[1]
routes = sys.argv[2]
output_file = sys.argv[3]
modify_routes(gtfs_file, routes, output_file)

1
requirements.txt Normal file
View file

@ -0,0 +1 @@
pandas~=2.2.2