try to throw specific error for bad MediaWiki query

This commit is contained in:
2021-09-18 14:31:00 -06:00
parent 8d4798ac1f
commit 8ddf03434a
2 changed files with 30 additions and 28 deletions

View File

@@ -13,35 +13,38 @@
// but mediaWikiUrl, headers, and maxLag will still have to be specified, not as args // but mediaWikiUrl, headers, and maxLag will still have to be specified, not as args
// unless all vars and props are passed to externmethods by default // unless all vars and props are passed to externmethods by default
(method :Dynamic query [:Map<String,Array<String>> params] (method :Dynamic query [:Map<String,Array<String>> params]
(Json.parse (let [data
(#extern String python (Json.parse
(object (#extern String python
hxmlFile "extern-files/python/args.hxml" (object
importHxFile "extern-files/python/import.hx" hxmlFile "extern-files/python/args.hxml"
langProjectFile "extern-files/python/requirements.txt") importHxFile "extern-files/python/import.hx"
[:Map<String,Array<String>> params _ :String mediaWikiUrl _ :String maxLag (if maxLag (Std.string maxLag) "1") :Map<String,String> headers _] langProjectFile "extern-files/python/requirements.txt")
[:Map<String,Array<String>> params _ :String mediaWikiUrl _ :String maxLag (if maxLag (Std.string maxLag) "1") :Map<String,String> headers _]
(print "extern query call $params") (print "extern query call $params")
(let [response (let [response
(Requests.get mediaWikiUrl (Requests.get mediaWikiUrl
(let [innerParams (let [innerParams
[ [
=>"action" "query" =>"action" "query"
=>"maxlag" maxLag =>"maxlag" maxLag
=>"format" "json" =>"format" "json"
]] ]]
(doFor =>param paramValues params (dictSet innerParams param (paramValues.join "|"))) (doFor =>param paramValues params (dictSet innerParams param (paramValues.join "|")))
innerParams) innerParams)
(object (object
headers headers headers headers
timeout 2))] timeout 2))]
(assert response.ok) (assert response.ok "MediaWiki query failed")
(print "call finished: ${response.text}") (print "call finished: ${response.text}")
response.text)))) response.text)))]
(assert data.query "MediaWiki response data doesn't contain a query field: $data")
data.query))
(method :Array<String> queryImageTitles [:Array<String> pageTitles] (method :Array<String> queryImageTitles [:Array<String> pageTitles]
(flatten (flatten
(for =>_id page (the haxe.DynamicAccess<Dynamic> .pages .query (query [=>"titles" pageTitles =>"prop" ["images"]])) (for =>_id page (the haxe.DynamicAccess<Dynamic> .pages (query [=>"titles" pageTitles =>"prop" ["images"]]))
(if page.images (if page.images
(page.images.map ->image image.title) (page.images.map ->image image.title)
[])))) []))))
@@ -50,7 +53,7 @@
(flatten (flatten
(for =>_id image (for =>_id image
(the haxe.DynamicAccess<Dynamic> (the haxe.DynamicAccess<Dynamic>
.pages .query (query [=>"titles" imageTitles =>"prop" ["imageinfo"] =>"iiprop" ["url"]])) .pages (query [=>"titles" imageTitles =>"prop" ["imageinfo"] =>"iiprop" ["url"]]))
(if image.imageinfo (if image.imageinfo
(image.imageinfo.map ->image image.url) (image.imageinfo.map ->image image.url)
[])))) []))))

View File

@@ -33,7 +33,6 @@
(let [wikipedia (new MediaWikiSystem "https://en.wikipedia.org/w/api.php" null null 1)] (let [wikipedia (new MediaWikiSystem "https://en.wikipedia.org/w/api.php" null null 1)]
~(wikipedia.queryImageUrls (wikipedia.queryImageTitles ["Phoenix Wright"]))) ~(wikipedia.queryImageUrls (wikipedia.queryImageTitles ["Phoenix Wright"])))
// TODO make a dummy UI for this, instead of passing null
(let [controller (new ArchiveController archive (new DummyUI))] (let [controller (new ArchiveController archive (new DummyUI))]
// TODO test controller // TODO test controller
0)) 0))