Module:DatasetLoader: Difference between revisions
Appearance
// via Wikitext Extension for VSCode Tag: Reverted |
// via Wikitext Extension for VSCode Tag: Reverted |
||
| Line 45: | Line 45: | ||
end | end | ||
-- DEBUG: Log what we loaded for | -- DEBUG: Log what we loaded for any Campaign request | ||
if name | if name:match("Campaigns/") then | ||
local ErrorHandling = require('Module:ErrorHandling') | local ErrorHandling = require('Module:ErrorHandling') | ||
local context = ErrorHandling.createContext('DatasetLoader') | local context = ErrorHandling.createContext('DatasetLoader') | ||
ErrorHandling.addStatus(context, 'datasetLoader', ' | ErrorHandling.addStatus(context, 'datasetLoader', 'Campaign request: "' .. name .. '" via ' .. loadMethod, 'FullName: "' .. fullName .. '"') | ||
if data and type(data) == "table" then | |||
if data.defaults then | |||
local titleValue = data.defaults.title or "MISSING" | |||
ErrorHandling.addStatus(context, 'datasetLoader', 'Campaign data structure found', 'Title field: "' .. tostring(titleValue) .. '"') | |||
else | |||
ErrorHandling.addStatus(context, 'datasetLoader', 'Campaign data loaded but no defaults', 'Keys: ' .. table.concat(vim.tbl_keys(data or {}), ", ")) | |||
end | |||
else | |||
ErrorHandling.addStatus(context, 'datasetLoader', 'Campaign data load failed', 'Data type: ' .. type(data)) | |||
end | |||
-- Force output the debug info immediately | -- Force output the debug info immediately | ||
mw.log(ErrorHandling.formatCombinedOutput(context)) | mw.log(ErrorHandling.formatCombinedOutput(context)) | ||
Revision as of 02:13, 2 August 2025
Documentation for this module may be created at Module:DatasetLoader/doc
-- Module:DatasetLoader
-- Central loader for Data: JSON assets via JsonConfig or mw.loadData, cached per render
local DatasetLoader = {}
local cache = {}
-- Retrieve a dataset by name (without extension). Returns a Lua table or {}.
function DatasetLoader.get(name)
-- Return cached if available
if cache[name] then
return cache[name]
end
-- Ensure filename has .json extension
local fullName = name
if not fullName:match('%.%w+$') then
fullName = fullName .. '.json'
end
local data
local loadMethod = "none"
-- Try JsonConfig extension (mw.ext.data.get)
local success, result = pcall(function()
return mw.ext.data.get(fullName)
end)
if success and type(result) == 'table' then
data = result
loadMethod = "JsonConfig"
else
-- Fallback to mw.loadData from Data: namespace
success, result = pcall(function()
return mw.loadData('Data:' .. fullName)
end)
if success and type(result) == 'table' then
data = result
loadMethod = "mw.loadData"
end
end
-- Default to empty table on any failure
if not data or type(data) ~= 'table' then
data = {}
loadMethod = "failed"
end
-- DEBUG: Log what we loaded for any Campaign request
if name:match("Campaigns/") then
local ErrorHandling = require('Module:ErrorHandling')
local context = ErrorHandling.createContext('DatasetLoader')
ErrorHandling.addStatus(context, 'datasetLoader', 'Campaign request: "' .. name .. '" via ' .. loadMethod, 'FullName: "' .. fullName .. '"')
if data and type(data) == "table" then
if data.defaults then
local titleValue = data.defaults.title or "MISSING"
ErrorHandling.addStatus(context, 'datasetLoader', 'Campaign data structure found', 'Title field: "' .. tostring(titleValue) .. '"')
else
ErrorHandling.addStatus(context, 'datasetLoader', 'Campaign data loaded but no defaults', 'Keys: ' .. table.concat(vim.tbl_keys(data or {}), ", "))
end
else
ErrorHandling.addStatus(context, 'datasetLoader', 'Campaign data load failed', 'Data type: ' .. type(data))
end
-- Force output the debug info immediately
mw.log(ErrorHandling.formatCombinedOutput(context))
end
-- Cache and return
cache[name] = data
return data
end
return DatasetLoader