@golemio/public-transport 0.1.0-dev.2775960314 → 0.1.0-dev.2780325741
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/integration-engine/gtfs/transformations/GtfsTransformation.js +16 -1
- package/dist/integration-engine/gtfs/transformations/GtfsTransformation.js.map +1 -1
- package/dist/integration-engine/gtfs/workers/timetables/tasks/ImportGtfsFromStorageTask.js +23 -20
- package/dist/integration-engine/gtfs/workers/timetables/tasks/ImportGtfsFromStorageTask.js.map +1 -1
- package/package.json +1 -1
|
@@ -32,6 +32,21 @@ let GtfsTransformation = class GtfsTransformation extends AbstractTransformation
|
|
|
32
32
|
return acc;
|
|
33
33
|
}, {});
|
|
34
34
|
const { feedId } = input;
|
|
35
|
+
// some feed exports (e.g. IDS JMK) prepend a UTF-8 BOM to every file; left in place it
|
|
36
|
+
// sticks to the first header name (e.g. "stop_id"), which then fails to match any
|
|
37
|
+
// known column and gets dropped, nulling out the whole first column (often the PK).
|
|
38
|
+
let bomChecked = false;
|
|
39
|
+
const stripBom = new stream_1.Transform({
|
|
40
|
+
transform(chunk, _encoding, callback) {
|
|
41
|
+
if (!bomChecked) {
|
|
42
|
+
bomChecked = true;
|
|
43
|
+
if (chunk.length >= 3 && chunk[0] === 0xef && chunk[1] === 0xbb && chunk[2] === 0xbf) {
|
|
44
|
+
chunk = chunk.subarray(3);
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
callback(null, chunk);
|
|
48
|
+
},
|
|
49
|
+
});
|
|
35
50
|
const addColumns = new stream_1.Transform({
|
|
36
51
|
objectMode: true,
|
|
37
52
|
transform(chunk, _encoding, callback) {
|
|
@@ -51,7 +66,7 @@ let GtfsTransformation = class GtfsTransformation extends AbstractTransformation
|
|
|
51
66
|
callback();
|
|
52
67
|
},
|
|
53
68
|
});
|
|
54
|
-
const out = (0, stream_1.pipeline)(input.sourceStream, (0, csv_parser_1.default)(), addColumns, (0, csv_stringify_1.default)({ header: true }), (err) => {
|
|
69
|
+
const out = (0, stream_1.pipeline)(input.sourceStream, stripBom, (0, csv_parser_1.default)(), addColumns, (0, csv_stringify_1.default)({ header: true }), (err) => {
|
|
55
70
|
if (err) {
|
|
56
71
|
integration_engine_1.log.error(`Datasets: transformation error (${input.name}): ${err.toString()}`);
|
|
57
72
|
throw err;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"GtfsTransformation.js","sourceRoot":"","sources":["../../../../src/integration-engine/gtfs/transformations/GtfsTransformation.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAAA,2DAAiC;AAEjC,8EAA4D;AAC5D,6GAA0G;AAC1G,iEAAgE;AAChE,4DAA6B;AAC7B,kEAAsC;AACtC,mCAAuD;AAShD,IAAM,kBAAkB,GAAxB,MAAM,kBAAmB,SAAQ,+CAAyD;IAG7F;QACI,KAAK,EAAE,CAAC;QAIF,sBAAiB,GAAG,CAAC,KAA8B,EAAY,EAAE;YACvE,iEAAiE;YACjE,MAAM,4BAA4B,GAAG,MAAM,CAAC,IAAI,CAAC,WAAI,CAAC,KAAK,CAAC,IAAkB,CAAC,CAAC,yBAAyB,CAAC;iBACrG,MAAM,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC;iBACnD,MAAM,CAAC,CAAC,GAAG,EAAE,IAAI,EAAE,EAAE;gBAClB,GAAG,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;gBACjB,OAAO,GAAG,CAAC;YACf,CAAC,EAAE,EAA0B,CAAC,CAAC;YAEnC,MAAM,EAAE,MAAM,EAAE,GAAG,KAAK,CAAC;YAEzB,MAAM,UAAU,GAAG,IAAI,kBAAS,CAAC;gBAC7B,UAAU,EAAE,IAAI;gBAChB,SAAS,CAAC,KAAK,EAAE,SAAS,EAAE,QAAQ;oBAChC,IAAI,CAAC,IAAI,CAAC;wBACN,sEAAsE;wBACtE,GAAG,4BAA4B;wBAC/B,kEAAkE;wBAClE,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC;6BAChB,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,IAAI,4BAA4B,CAAC;6BACpD,MAAM,CAAC,CAAC,GAAQ,EAAE,GAAG,EAAE,EAAE;4BACtB,GAAG,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC;4BACtB,OAAO,GAAG,CAAC;wBACf,CAAC,EAAE,EAAE,CAAC;wBACV,qEAAqE;wBACrE,OAAO,EAAE,MAAM;qBAClB,CAAC,CAAC;oBACH,QAAQ,EAAE,CAAC;gBACf,CAAC;aACJ,CAAC,CAAC;YAEH,MAAM,GAAG,GAAG,IAAA,iBAAQ,EAAC,KAAK,CAAC,YAAY,EAAE,IAAA,oBAAG,GAAE,EAAE,UAAU,EAAE,IAAA,uBAAS,EAAC,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE;
|
|
1
|
+
{"version":3,"file":"GtfsTransformation.js","sourceRoot":"","sources":["../../../../src/integration-engine/gtfs/transformations/GtfsTransformation.ts"],"names":[],"mappings":"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"}
|
|
@@ -37,31 +37,33 @@ const node_os_1 = __importDefault(require("node:os"));
|
|
|
37
37
|
const constants_1 = require("../constants");
|
|
38
38
|
const HelperTypes_1 = require("./helpers/HelperTypes");
|
|
39
39
|
const ImportGtfsFromStorageSchema_1 = require("./schema/ImportGtfsFromStorageSchema");
|
|
40
|
-
// The
|
|
41
|
-
// imported feed is validated against it.
|
|
40
|
+
// The GTFS spec's core dataset -- every feed must carry these, regardless of IDS region.
|
|
42
41
|
const REQUIRED_GTFS_FILES = [
|
|
43
42
|
"agency.txt",
|
|
44
43
|
"calendar.txt",
|
|
45
44
|
"calendar_dates.txt",
|
|
46
|
-
"feed_info.txt",
|
|
47
|
-
"route_sub_agencies.txt",
|
|
48
45
|
"routes.txt",
|
|
49
|
-
"shapes.txt",
|
|
50
46
|
"stop_times.txt",
|
|
51
47
|
"stops.txt",
|
|
52
|
-
"transfers.txt",
|
|
53
48
|
"trips.txt",
|
|
54
49
|
];
|
|
55
|
-
//
|
|
56
|
-
//
|
|
57
|
-
|
|
50
|
+
// Present in some feeds but not universally (e.g. IDS JMK ships none of these) -- ingested
|
|
51
|
+
// when included in the zip, skipped otherwise. feed_info.txt has no corresponding gtfs_*
|
|
52
|
+
// table/transformation yet (follow-up), so it's never ingested even when present.
|
|
53
|
+
// run_numbers.txt is not a GTFS file at all -- it's the ROPID run-numbers crosswalk (normally
|
|
54
|
+
// FTP-only, see DownloadDatasetsTask), included here so a feed can bundle its own equivalent
|
|
55
|
+
// in the same zip and get the richer run-based matching (see TripScheduleRepository.populate).
|
|
56
|
+
const OPTIONAL_GTFS_FILES = ["feed_info.txt", "route_sub_agencies.txt", "run_numbers.txt", "shapes.txt", "transfers.txt"];
|
|
57
|
+
const KNOWN_GTFS_FILES = [...REQUIRED_GTFS_FILES, ...OPTIONAL_GTFS_FILES];
|
|
58
|
+
const datasetForFile = (fileName) => fileName === "run_numbers.txt" ? DatasetEnum_1.DatasetEnum.RUN_NUMBERS : DatasetEnum_1.DatasetEnum.GTFS;
|
|
58
59
|
// Feed zips live under one folder in the blob container: "gtfs-static/<feedCode>.zip".
|
|
59
60
|
const STORAGE_FOLDER = "gtfs-static";
|
|
60
61
|
// Plays the role DownloadDatasetsTask plays for the FTP path, but for a feed zip uploaded to blob
|
|
61
|
-
// storage as "gtfs-static/<feedCode>.zip" (import is triggered manually via this queue's message).
|
|
62
|
-
// tagged with the same DatasetEnum
|
|
63
|
-
//
|
|
64
|
-
// the feed identity, which is carried separately
|
|
62
|
+
// storage as "gtfs-static/<feedCode>.zip" (import is triggered manually via this queue's message). Files are
|
|
63
|
+
// tagged per datasetForFile() with the same DatasetEnum bundle type the FTP path uses for the equivalent
|
|
64
|
+
// file (DatasetEnum.GTFS for the static schedule files, DatasetEnum.RUN_NUMBERS for run_numbers.txt) -- that
|
|
65
|
+
// enum value identifies the *shape* of the file bundle, not the feed identity, which is carried separately
|
|
66
|
+
// via feedCode.
|
|
65
67
|
let ImportGtfsFromStorageTask = class ImportGtfsFromStorageTask extends workers_1.AbstractTask {
|
|
66
68
|
constructor(metadataRepository, gtfsRepository, feedRepository, staticFileRedisRepository, gtfsRedisChannel, storageService, logger) {
|
|
67
69
|
super(constants_1.TIMETABLE_WORKER_NAME);
|
|
@@ -95,7 +97,7 @@ let ImportGtfsFromStorageTask = class ImportGtfsFromStorageTask extends workers_
|
|
|
95
97
|
let extractionPath;
|
|
96
98
|
const stagedFiles = [];
|
|
97
99
|
try {
|
|
98
|
-
const inflated = await compressor.inflateBuffer(zipBuffer, (name) =>
|
|
100
|
+
const inflated = await compressor.inflateBuffer(zipBuffer, (name) => KNOWN_GTFS_FILES.includes(name));
|
|
99
101
|
extractionPath = inflated.extractionPath;
|
|
100
102
|
const foundNames = new Set(inflated.files.map((file) => file.name));
|
|
101
103
|
const missing = REQUIRED_GTFS_FILES.filter((name) => !foundNames.has(name));
|
|
@@ -103,14 +105,14 @@ let ImportGtfsFromStorageTask = class ImportGtfsFromStorageTask extends workers_
|
|
|
103
105
|
throw new golemio_errors_1.GeneralError(`Feed zip "${blobKey}" is missing required GTFS file(s): ${missing.join(", ")}`, this.constructor.name);
|
|
104
106
|
}
|
|
105
107
|
for (const file of inflated.files) {
|
|
106
|
-
if (
|
|
108
|
+
if (file.name === "feed_info.txt") {
|
|
107
109
|
continue;
|
|
108
110
|
}
|
|
109
111
|
const redisKey = `${feedCode}/${file.name}`;
|
|
110
112
|
await this.staticFileRedisRepository.pipeStream(redisKey, node_fs_1.default.createReadStream(file.path));
|
|
111
113
|
// downstream (datasetFileModelMap/GtfsTransformation) keys on the bare model name,
|
|
112
114
|
// e.g. "agency", never the file name "agency.txt"
|
|
113
|
-
stagedFiles.push({ name: file.name.replace(/\.txt$/, ""), redisKey });
|
|
115
|
+
stagedFiles.push({ name: file.name.replace(/\.txt$/, ""), redisKey, dataset: datasetForFile(file.name) });
|
|
114
116
|
}
|
|
115
117
|
return stagedFiles;
|
|
116
118
|
}
|
|
@@ -131,9 +133,9 @@ let ImportGtfsFromStorageTask = class ImportGtfsFromStorageTask extends workers_
|
|
|
131
133
|
const version = dbLastModified.version + 1;
|
|
132
134
|
const cachedDatasets = [];
|
|
133
135
|
for (const file of files) {
|
|
134
|
-
const key = (0, HelperTypes_1.datasetFileModelMap)(
|
|
136
|
+
const key = (0, HelperTypes_1.datasetFileModelMap)(file.dataset, file.name);
|
|
135
137
|
const metaStates = (Array.isArray(key) ? key : [key]).map((name) => ({
|
|
136
|
-
dataset:
|
|
138
|
+
dataset: file.dataset,
|
|
137
139
|
key: name,
|
|
138
140
|
type: RopidMetadataModel_1.MetaTypeEnum.STATE,
|
|
139
141
|
value: RopidMetadataModel_1.MetaStateEnum.DOWNLOADED,
|
|
@@ -145,7 +147,7 @@ let ImportGtfsFromStorageTask = class ImportGtfsFromStorageTask extends workers_
|
|
|
145
147
|
cachedDatasets.push({
|
|
146
148
|
filepath: file.redisKey,
|
|
147
149
|
name: file.name,
|
|
148
|
-
dataset:
|
|
150
|
+
dataset: file.dataset,
|
|
149
151
|
feedCode,
|
|
150
152
|
});
|
|
151
153
|
}
|
|
@@ -187,7 +189,8 @@ let ImportGtfsFromStorageTask = class ImportGtfsFromStorageTask extends workers_
|
|
|
187
189
|
}
|
|
188
190
|
finally {
|
|
189
191
|
await subscriber.unsubscribe();
|
|
190
|
-
const
|
|
192
|
+
const datasets = [...new Set(cachedDatasets.map((cachedDataset) => cachedDataset.dataset))];
|
|
193
|
+
const datasetsInput = { datasets, feedCode };
|
|
191
194
|
integration_engine_1.QueueManager.sendMessageToExchange(this.queuePrefix, "checkSavedRowsAndReplaceTables", datasetsInput);
|
|
192
195
|
}
|
|
193
196
|
}
|
package/dist/integration-engine/gtfs/workers/timetables/tasks/ImportGtfsFromStorageTask.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ImportGtfsFromStorageTask.js","sourceRoot":"","sources":["../../../../../../src/integration-engine/gtfs/workers/timetables/tasks/ImportGtfsFromStorageTask.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;AAAA,4EAAyE;AACzE,gFAA6E;AAC7E,wEAAqE;AACrE,oGAAiG;AACjG,8DAA2D;AAC3D,wEAAqE;AACrE,8EAAoG;AACpG,wEAAqE;AAErE,kHAA+G;AAC/G,8EAAqE;AACrE,qFAA8F;AAC9F,iGAA8F;AAC9F,mEAA2E;AAC3E,2EAA6E;AAC7E,6EAA8F;AAC9F,iEAAwE;AACxE,sDAAyB;AACzB,sDAAyB;AACzB,4CAAqD;AACrD,
|
|
1
|
+
{"version":3,"file":"ImportGtfsFromStorageTask.js","sourceRoot":"","sources":["../../../../../../src/integration-engine/gtfs/workers/timetables/tasks/ImportGtfsFromStorageTask.ts"],"names":[],"mappings":"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"}
|