Skip to content

Commit 3c643b9

Browse files
Merge pull request #141 from OneBusAway/feat/gtfs-tidy
Feat/gtfs-tidy
2 parents 195be96 + e13e5d5 commit 3c643b9

File tree

13 files changed

+250
-11
lines changed

13 files changed

+250
-11
lines changed

Makefile

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,9 +3,12 @@
33
run: build
44
bin/maglev -f config.json
55

6-
build:
6+
build: gtfstidy
77
go build -gcflags "all=-N -l" -o bin/maglev ./cmd/api
88

9+
gtfstidy:
10+
go build -o bin/gtfstidy github.com/patrickbr/gtfstidy
11+
912
clean:
1013
go clean
1114
rm -f maglev

README.markdown

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,8 @@ Example `config.json`:
5050
"gtfs-static-feed": {
5151
"url": "https://example.com/gtfs.zip",
5252
"auth-header-name": "Authorization",
53-
"auth-header-value": "Bearer token456"
53+
"auth-header-value": "Bearer token456",
54+
"enable-gtfs-tidy": true
5455
},
5556
"gtfs-rt-feeds": [
5657
{

cmd/api/main.go

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,9 +3,10 @@ package main
33
import (
44
"flag"
55
"log/slog"
6+
"os"
7+
68
"maglev.onebusaway.org/internal/appconf"
79
"maglev.onebusaway.org/internal/gtfs"
8-
"os"
910
)
1011

1112
func main() {
@@ -72,6 +73,7 @@ func main() {
7273
GTFSDataPath: gtfsCfgData.GTFSDataPath,
7374
Env: gtfsCfgData.Env,
7475
Verbose: gtfsCfgData.Verbose,
76+
EnableGTFSTidy: gtfsCfgData.EnableGTFSTidy,
7577
}
7678
} else {
7779
// Use command-line flags for configuration

config.example.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,8 @@
55
"api-keys": ["test"],
66
"rate-limit": 100,
77
"gtfs-static-feed": {
8-
"url": "https://www.soundtransit.org/GTFS-rail/40_gtfs.zip"
8+
"url": "https://www.soundtransit.org/GTFS-rail/40_gtfs.zip",
9+
"enable-gtfs-tidy": false
910
},
1011
"gtfs-rt-feeds": [
1112
{

config.schema.json

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,11 @@
5050
"auth-header-value": {
5151
"type": "string",
5252
"description": "Optional header value for static GTFS feed authentication"
53+
},
54+
"enable-gtfs-tidy": {
55+
"type": "boolean",
56+
"description": "Enable GTFS tidying with gtfstidy tool (requires gtfstidy to be installed)",
57+
"default": false
5358
}
5459
},
5560
"required": ["url"],

go.mod

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,10 @@ require (
3131
github.com/jinzhu/inflection v1.0.0 // indirect
3232
github.com/mattn/go-isatty v0.0.20 // indirect
3333
github.com/ncruces/go-strftime v0.1.9 // indirect
34+
github.com/patrickbr/gtfsparser v0.0.0-20250811204933-790d4e1c69c1 // indirect
35+
github.com/patrickbr/gtfstidy v0.0.0-20251119090422-df802af33868 // indirect
36+
github.com/patrickbr/gtfswriter v0.0.0-20240919073412-98e3602c6cd8 // indirect
37+
github.com/paulmach/go.geojson v1.5.0 // indirect
3438
github.com/pganalyze/pg_query_go/v6 v6.1.0 // indirect
3539
github.com/pingcap/errors v0.11.5-0.20240311024730-e056997136bb // indirect
3640
github.com/pingcap/failpoint v0.0.0-20240528011301-b51a646c7c86 // indirect
@@ -45,6 +49,7 @@ require (
4549
github.com/stoewer/go-strcase v1.2.0 // indirect
4650
github.com/tetratelabs/wazero v1.9.0 // indirect
4751
github.com/tidwall/geoindex v1.7.0 // indirect
52+
github.com/valyala/fastjson v1.6.4 // indirect
4853
github.com/wasilibs/go-pgquery v0.0.0-20250409022910-10ac41983c07 // indirect
4954
github.com/wasilibs/wazero-helpers v0.0.0-20240620070341-3dff1577cd52 // indirect
5055
go.uber.org/atomic v1.11.0 // indirect

go.sum

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,14 @@ github.com/mattn/go-sqlite3 v1.14.24 h1:tpSp2G2KyMnnQu99ngJ47EIkWVmliIizyZBfPrBW
6464
github.com/mattn/go-sqlite3 v1.14.24/go.mod h1:Uh1q+B4BYcTPb+yiD3kU8Ct7aC0hY9fxUwlHK0RXw+Y=
6565
github.com/ncruces/go-strftime v0.1.9 h1:bY0MQC28UADQmHmaF5dgpLmImcShSi2kHU9XLdhx/f4=
6666
github.com/ncruces/go-strftime v0.1.9/go.mod h1:Fwc5htZGVVkseilnfgOVb9mKy6w1naJmn9CehxcKcls=
67+
github.com/patrickbr/gtfsparser v0.0.0-20250811204933-790d4e1c69c1 h1:ei2LAhpj7frAPBzbjqTA9ICXi7H2KhBXlYzO0WwP8hI=
68+
github.com/patrickbr/gtfsparser v0.0.0-20250811204933-790d4e1c69c1/go.mod h1:WsjXLsxSQc+KfBJ7APQhk3yz+4DztzMYARQ+EfxKYSQ=
69+
github.com/patrickbr/gtfstidy v0.0.0-20251119090422-df802af33868 h1:5RbZdJNYJbywbCwaQOzHUckzJ+F0w54imKZhkL0eUB0=
70+
github.com/patrickbr/gtfstidy v0.0.0-20251119090422-df802af33868/go.mod h1:qNytqg0F2xv/NCYHECvfjr/QPioK94q2rhPTC7NI4KA=
71+
github.com/patrickbr/gtfswriter v0.0.0-20240919073412-98e3602c6cd8 h1:xEQhft28izewbL3fnF10Yj8zSNu2r+lW157GQq+eaaY=
72+
github.com/patrickbr/gtfswriter v0.0.0-20240919073412-98e3602c6cd8/go.mod h1:zYAfZRXtDhc4Tq+LYrvyksefggNiViL2pKMRUrGvUbE=
73+
github.com/paulmach/go.geojson v1.5.0 h1:7mhpMK89SQdHFcEGomT7/LuJhwhEgfmpWYVlVmLEdQw=
74+
github.com/paulmach/go.geojson v1.5.0/go.mod h1:DgdUy2rRVDDVgKqrjMe2vZAHMfhDTrjVKt3LmHIXGbU=
6775
github.com/pganalyze/pg_query_go/v6 v6.1.0 h1:jG5ZLhcVgL1FAw4C/0VNQaVmX1SUJx71wBGdtTtBvls=
6876
github.com/pganalyze/pg_query_go/v6 v6.1.0/go.mod h1:nvTHIuoud6e1SfrUaFwHqT0i4b5Nr+1rPWVds3B5+50=
6977
github.com/pingcap/errors v0.11.0/go.mod h1:Oi8TUi2kEtXXLMJk9l1cGmz20kV3TaQ0usTwv5KuLY8=
@@ -113,6 +121,8 @@ github.com/tidwall/rtree v1.10.0 h1:+EcI8fboEaW1L3/9oW/6AMoQ8HiEIHyR7bQOGnmz4Mg=
113121
github.com/tidwall/rtree v1.10.0/go.mod h1:iDJQ9NBRtbfKkzZu02za+mIlaP+bjYPnunbSNidpbCQ=
114122
github.com/twpayne/go-polyline v1.1.1 h1:/tSF1BR7rN4HWj4XKqvRUNrCiYVMCvywxTFVofvDV0w=
115123
github.com/twpayne/go-polyline v1.1.1/go.mod h1:ybd9IWWivW/rlXPXuuckeKUyF3yrIim+iqA7kSl4NFY=
124+
github.com/valyala/fastjson v1.6.4 h1:uAUNq9Z6ymTgGhcm0UynUAB6tlbakBrz6CQFax3BXVQ=
125+
github.com/valyala/fastjson v1.6.4/go.mod h1:CLCAqky6SMuOcxStkYQvblddUtoRxhYMGLrsQns1aXY=
116126
github.com/wasilibs/go-pgquery v0.0.0-20250409022910-10ac41983c07 h1:mJdDDPblDfPe7z7go8Dvv1AJQDI3eQ/5xith3q2mFlo=
117127
github.com/wasilibs/go-pgquery v0.0.0-20250409022910-10ac41983c07/go.mod h1:Ak17IJ037caFp4jpCw/iQQ7/W74Sqpb1YuKJU6HTKfM=
118128
github.com/wasilibs/wazero-helpers v0.0.0-20240620070341-3dff1577cd52 h1:OvLBa8SqJnZ6P+mjlzc2K7PM22rRUPE1x32G9DTPrC4=

internal/appconf/json_config.go

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ type GtfsStaticFeed struct {
1414
URL string `json:"url"`
1515
AuthHeaderName string `json:"auth-header-name"`
1616
AuthHeaderValue string `json:"auth-header-value"`
17+
EnableGTFSTidy bool `json:"enable-gtfs-tidy"`
1718
}
1819

1920
// GtfsRtFeed represents a single GTFS-RT feed configuration
@@ -187,6 +188,7 @@ type GtfsConfigData struct {
187188
GTFSDataPath string
188189
Env Environment
189190
Verbose bool
191+
EnableGTFSTidy bool
190192
}
191193

192194
// ToGtfsConfigData converts JSONConfig to GtfsConfigData
@@ -199,6 +201,7 @@ func (j *JSONConfig) ToGtfsConfigData() GtfsConfigData {
199201
GTFSDataPath: j.DataPath,
200202
Env: EnvFlagToEnvironment(j.Env),
201203
Verbose: true, // Always set to true like in main.go
204+
EnableGTFSTidy: j.GtfsStaticFeed.EnableGTFSTidy,
202205
}
203206

204207
// Use first GTFS-RT feed if available

internal/gtfs/config.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ type Config struct {
1616
GTFSDataPath string
1717
Env appconf.Environment
1818
Verbose bool
19+
EnableGTFSTidy bool
1920
}
2021

2122
func (config Config) realTimeDataEnabled() bool {

internal/gtfs/gtfs_manager.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@ type Manager struct {
4646
func InitGTFSManager(config Config) (*Manager, error) {
4747
isLocalFile := !strings.HasPrefix(config.GtfsURL, "http://") && !strings.HasPrefix(config.GtfsURL, "https://")
4848

49-
staticData, err := loadGTFSData(config.GtfsURL, isLocalFile, config.StaticAuthHeaderKey, config.StaticAuthHeaderValue)
49+
staticData, err := loadGTFSData(config.GtfsURL, isLocalFile, config)
5050
if err != nil {
5151
return nil, err
5252
}

0 commit comments

Comments
 (0)