safer MediaWiki functions

This commit is contained in:
2021-09-30 21:05:10 -06:00
parent 28d83a07ee
commit 39971e3b75
2 changed files with 20 additions and 15 deletions

View File

@@ -4,6 +4,7 @@ import kiss.Prelude;
import kiss.List; import kiss.List;
import nat.System; import nat.System;
import haxe.Json; import haxe.Json;
import haxe.ds.Option;
/** /**
* Base System that processes Entries using the HTTP API for any wiki built with MediaWiki * Base System that processes Entries using the HTTP API for any wiki built with MediaWiki

View File

@@ -12,7 +12,7 @@
// TODO make this an externMethod -- // TODO make this an externMethod --
// 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 :Option<Dynamic> query [:Map<String,Array<String>> params]
(let [data (let [data
(Json.parse (Json.parse
(#extern String python (#extern String python
@@ -39,23 +39,27 @@
(assert response.ok "MediaWiki query failed") (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") (if data.query
data.query)) (Some data.query)
None)))
(method :Array<String> queryImageTitles [:Array<String> pageTitles] (method :Array<String> queryImageTitles [:Array<String> pageTitles]
(flatten (ifLet [(Some queryResult) (query [=>"titles" pageTitles =>"prop" ["images"]])]
(for =>_id page (the haxe.DynamicAccess<Dynamic> .pages (query [=>"titles" pageTitles =>"prop" ["images"]])) (flatten
(if page.images (for =>_id page (the haxe.DynamicAccess<Dynamic> queryResult.pages)
(page.images.map ->image image.title) (if page.images
[])))) (page.images.map ->image image.title)
[])))
[]))
(method :Array<String> queryImageUrls [:Array<String> imageTitles] (method :Array<String> queryImageUrls [:Array<String> imageTitles]
(flatten (ifLet [(Some queryResult) (query [=>"titles" imageTitles =>"prop" ["imageinfo"] =>"iiprop" ["url"]])]
(for =>_id image (flatten
(the haxe.DynamicAccess<Dynamic> (for =>_id image
.pages (query [=>"titles" imageTitles =>"prop" ["imageinfo"] =>"iiprop" ["url"]])) (the haxe.DynamicAccess<Dynamic> queryResult.pages)
(if image.imageinfo (if image.imageinfo
(image.imageinfo.map ->image image.url) (image.imageinfo.map ->image image.url)
[])))) [])))
[]))
(var headers [=>"User-Agent" "NatArchiveTool/0.0.0 (https://github.com/NQNStudios/kisslang/tree/main/projects/nat-archive-tool; natquaylenelson@gmail.com) Requests/2.26.0"]) (var headers [=>"User-Agent" "NatArchiveTool/0.0.0 (https://github.com/NQNStudios/kisslang/tree/main/projects/nat-archive-tool; natquaylenelson@gmail.com) Requests/2.26.0"])