initial commit
All checks were successful
GTFS Route Modification / modify_routes (push) Successful in 21s
All checks were successful
GTFS Route Modification / modify_routes (push) Successful in 21s
This commit is contained in:
parent
3539f4a221
commit
9903cbee0a
6 changed files with 107 additions and 1 deletions
16
.forgejo/workflows/test.yml
Normal file
16
.forgejo/workflows/test.yml
Normal 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
11
Dockerfile
Normal 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"]
|
20
README.md
20
README.md
|
@ -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
18
action.yml
Normal 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
42
modify_gtfs.py
Normal 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
1
requirements.txt
Normal file
|
@ -0,0 +1 @@
|
|||
pandas~=2.2.2
|
Loading…
Reference in a new issue