Изменения

начиная с 501 вызова не крашиться, а просто не проверять существование статьи и добавляться в Категория:Страницы со слишком большим количеством вызовов ресурсоёмких функций
Строка 3: Строка 3:  
local function is_empty(param)
 
local function is_empty(param)
 
return param == nil or param == ''
 
return param == nil or param == ''
 +
end
 +
 +
local function getTitle(page)
 +
local success, result = pcall(function()
 +
local title = mw.title.new(page)
 +
return { exists = title.exists, isRedirect = title.isRedirect }
 +
end)
 +
if success then
 +
return result
 +
else
 +
return nil
 +
end
 
end
 
end
   Строка 149: Строка 161:  
 
 
-- получение страницы, чтобы знать, существует ли она и является ли она перенаправлением
 
-- получение страницы, чтобы знать, существует ли она и является ли она перенаправлением
local ru_page = mw.title.new(title)
+
local ru_page = getTitle(title) -- дорогая функция, после 500 вызова крашится
if ru_page == nil then
+
local ru_page_exists
return throwError('некорректные символы в названии русской статьи', 'error', allow_cat) -- или кончились дорогие функции
+
local ru_page_isRedirect
 +
if ru_page then
 +
ru_page_exists = ru_page.exists
 +
ru_page_isRedirect = ru_page.isRedirect
 +
else -- после 500 вызова или если в названии есть некорректные символы
 +
ru_page_exists = false
 +
ru_page_isRedirect = false
 
end
 
end
local ru_page_exists = ru_page.exists -- потому что это expensive function
  −
local ru_page_isRedirect = ru_page.isRedirect -- потому что это expensive function
   
local leave = ru_page_exists and not leave_always and not (ru_page_isRedirect and leave_if_redirect)
 
local leave = ru_page_exists and not leave_always and not (ru_page_isRedirect and leave_if_redirect)
 
 
 
-- проверка правильности обработанных параметров
 
-- проверка правильности обработанных параметров
--if not is_empty(iw_title) and mw.title.new(iw_title) == nil then -- TODO: ищется в рувики
  −
-- return throwError('некорректные символы в названии статьи в другом разделе', 'error', allow_cat)
  −
--end
   
if lang ~= 'd' and languages[lang] == nil then
 
if lang ~= 'd' and languages[lang] == nil then
 
return throwError('некорректный ISO-код «' .. lang .. '»', 'error', allow_cat)
 
return throwError('некорректный ISO-код «' .. lang .. '»', 'error', allow_cat)
Строка 167: Строка 180:  
return throwError('шаблон Не переведено 2 не поддерживает Викиданные вместо языка')
 
return throwError('шаблон Не переведено 2 не поддерживает Викиданные вместо языка')
 
end
 
end
if mode == 2 and not mw.title.new('Template:Lang-' .. lang).exists then
+
if mode == 2 and not mw.title.new('Template:Lang-' .. lang).exists then -- дорогая функция
 
return throwError('не найден шаблон ' .. frame:expandTemplate{ title = 'tl', args = { 'lang-' .. lang } },
 
return throwError('не найден шаблон ' .. frame:expandTemplate{ title = 'tl', args = { 'lang-' .. lang } },
 
'lang-not-exists', allow_cat)
 
'lang-not-exists', allow_cat)
Анонимный участник