Home
Random
Recent changes
Special pages
Community portal
Preferences
About Stockhub
Disclaimers
Search
User menu
Talk
Contributions
Create account
Log in
Editing
Module:Sandbox/genewiki/experimental
Warning:
You are not logged in. Your IP address will be publicly visible if you make any edits. If you
log in
or
create an account
, your edits will be attributed to your username, along with other benefits.
Anti-spam check. Do
not
fill this in!
--uncomment and add this to the debug console to run code. --frame = mw.getCurrentFrame() --frame.args = {"a", "b", from ="Q14865053"} --print(p.hello(frame)) ---require('Module:Wikidata') -- All Lua modules on Wikipedia must begin by defining a variable that will hold their -- externally accessible functions. They can have any name and may also hold data. p = { devmode = false } p.getQualifierID = function(frame) local propertyID = mw.text.trim(frame.args[1] or "") local qualifierID = mw.text.trim(frame.args[2] or "") local input_parm = mw.text.trim(frame.args[3] or "") local itemID = mw.text.trim(frame.args[4] or "") --if direct link from wikidata item if input_parm == "FETCH_WIKIDATA" then local entity = "" if itemID ~= "" then entity = mw.wikibase.getEntityObject(itemID) else entity = mw.wikibase.getEntityObject() end if entity.claims[propertyID] ~= nil then local out = {} for k, v in pairs(entity.claims[propertyID]) do for k2, v2 in pairs(v.qualifiers[qualifierID]) do if v2.snaktype == 'value' then out[#out + 1] = "Q" .. v2.datavalue.value["numeric-id"] end end end return table.concat(out, ", ") else return "" end else return input_parm end end --- Try to replace this with one function that fails gracefully --- Get the image URL associated the current article ---{{#invoke:Wikidata|getValueFromID|{{#invoke:Sandbox/genewiki/geneboxdev |getQIDFromID |{{#invoke:Wikidata|pageId}} |P688}}|P18|FETCH_WIKIDATA}} --- breaks apart to be ---{{#invoke:Wikidata|getValueFromID| --- {{#invoke:Sandbox/genewiki/geneboxdev |getQIDFromID | --- {{#invoke:Wikidata|pageId}} --- |P688}} ---|P18|FETCH_WIKIDATA}} --- testing on ARF6 Q14865053 p.testEntityId = function(wikidata_qid) --pcall pattern does not not work for this.. --local entity = mw.wikibase.getEntity(wikidata_qid) --but it does for locally generated errors like this local entity = 2+"error" return entity end -- test entry point -- local qid = mw.text.trim(frame.args['from']) p.hello = function( frame ) local qid = "1Q14865053" local out = "" --this is like a try statement local worked,value = pcall(p.testEntityId, qid) if(worked) then out = value else out = "error! "..value end return out end --gets an image for a qif, doesn't die if no qid is given to it. --frame = mw.getCurrentFrame() --frame.args = {QID="Q14865053"} --print(p.getDefaultImage(frame)) p.getDefaultImage = function(frame) local wikidata_id = mw.text.trim(frame.args['QID'] or "") -- "nil" (a string, not the value nil), "number", "string", "boolean", "table", "function", "thread", and "userdata". if wikidata_id == nil then return "" elseif string.len(wikidata_id) < 3 then return "" end local propertyID = "P18" local sep = mw.text.trim(" ") local imgsize = mw.text.trim("220px") local entity = mw.wikibase.getEntity(wikidata_id) local claims if entity and entity.claims then claims = entity.claims[propertyID] end if claims then if (claims[1] and claims[1].mainsnak.datatype == "commonsMedia") then local out = {} for k, v in pairs(claims) do local filename = v.mainsnak.datavalue.value out[#out + 1] = "[[File:" .. filename .. "|" .. imgsize .. "]]" end return table.concat(out, sep) else return "" end else return input_parm end end function p.ViewSomething(frame) local itemID ="Q14865053" local data = mw.wikibase.getEntityObject(itemID) if not data then return nil end --- local f = frame.args[1] and frame or frame:getParent() local i = 1 while true do --- local index = f.args[i] --- if not index then if type(data) == "table" then return mw.text.jsonEncode(data, mw.text.JSON_PRESERVE_KEYS + mw.text.JSON_PRETTY) else return tostring(data) end --- end data = data[index] or data[tonumber(index)] if not data then return end i = i + 1 end end p.getChromosomeLocJulia = function(frame) local propertyID = mw.text.trim(frame.args[1] or "") local qualifierID = mw.text.trim(frame.args[2] or "") local input_parm = mw.text.trim(frame.args[3] or "") local qualifierIds = p.getQualifierID(frame) local newest_build = "" local preferred_value = "not set" if qualifierIds then local list_itemID = mw.text.split(qualifierIds,",") for index,value in ipairs(list_itemID) do local entity = mw.wikibase.getEntityObject(value) local alias = "" if entity['aliases'] ~= nil then local test = entity['aliases']['en'] for key, value in ipairs(test) do if string.match(value['value'], '^hg') then alias = value['value'] end end local build_no = alias:gsub("hg", "") if newest_build < build_no or newest_build == "" then newest_build = build_no preferred_value = "path here" end end end return preferred_value else return "nnn" end return "mmm" end ---getChromosomeLoc ---input propertyID ie(Genomic start) P644 --- qualifierID (ie GenLoc Assembly) P659 --- input_parm (ie FETCH_WIKIDATA) --- {{#invoke:Sandbox/genewiki/geneboxdev|getChromosomeLoc|P644|P659|FETCH_WIKIDATA}} ---output preferred chromosome location start value in this case it would be 49893092 --for debug window -- Q14865053 --frame = mw.getCurrentFrame() --frame.args = {"P644","P659","FETCH_WIKIDATA","Q14865053"} --print(p.getChromosomeLoc(frame)) p.getChromosomeLoc = function(frame) -- will contain the numeric value for the requested coordinate local output = "" local sep = " " -- can only be P644 (genomic start) or P645 (genomic end) for this to work -- should probably try to catch that. Might also increase legibility to use specific variable names when possible local propertyID = mw.text.trim(frame.args[1] or "") -- this can really only be P659 right now. I'm not sure of the value of including it as a parameter as other values will likely break this function local qualifierID = mw.text.trim(frame.args[2] or "") -- Why do we include this here? What should happen if FETCH_WIKIDATA is not included? local input_parm = mw.text.trim(frame.args[3] or "") -- this can needs to be fed to the function either by a call to {{#invoke:Wikidata|pageId}} or by setting it directly (e.g. if the function was applied on a page other than the targeted gene) --alert if this id is not a valid thing in wikidata, a Lua error will occur that says --The ID entered is unknown to the system. Please use a valid entity ID. local itemID = mw.text.trim(frame.args[4] or "") -- will track the different builds pulled from the qualifiers local newest_build = "0" -- starts the process local entity = mw.wikibase.getEntityObject(itemID) local claims --gets a table of claims on the (genomic start or end) property Q19847637 if entity and entity.claims then claims = entity.claims[propertyID] end --will return nothing if no claims are found if claims then --checking to be sure claims is populated, not sure it its needed if (claims[1] ) then --useful for debugging --local out = {} --pulls the genome location from the claim for k, v in pairs(claims) do local location = v.mainsnak.datavalue.value --debugging --out[#out + 1] = k.." location:" .. location.. " || " --gets the qualifiers linked to the current claim local quals = v.qualifiers.P659 --if there are any if quals then for qk, qv in pairs(quals) do local qual_obj_id = "Q"..qv.datavalue.value["numeric-id"] --get to the entity targeted by the qualifier property. Genome builds are Items in wikidata local qual_obj = mw.wikibase.getEntityObject(qual_obj_id) local alias = "" --this uses the aliases to pull out version numbers --seems like there ought to be a better way to do this, but likely would need to change the data added by the bot if qual_obj["aliases"] ~= nil then local test = qual_obj["aliases"]["en"] for key, value in ipairs(test) do if string.match(value['value'], '^hg') then alias = value['value'] local build_no = alias:gsub("hg","") --report only the most location associated with the most recent build --if there is more than one location per build, just give one back as that is not our problem right now. if build_no > newest_build then output = location newest_build = build_no end end end end end --in case there are no qualifiers, but there is a location, might as well return it else output = location end end return output else return "" end else return "" --debug --"no claims for "..itemID.." prop "..propertyID end end -- All modules end by returning the variable containing its functions to Wikipedia. return p -- We can now use this module by calling {{#invoke: HelloWorld | hello }}. -- The #invoke command begins with the module's name, in this case "HelloWorld", -- then takes the name of one of its functions as an argument, in this case "hello".
Summary:
Please note that all contributions to Stockhub may be edited, altered, or removed by other contributors. If you do not want your writing to be edited mercilessly, then do not submit it here.
You are also promising us that you wrote this yourself, or copied it from a public domain or similar free resource (see
Stockhub:Copyrights
for details).
Do not submit copyrighted work without permission!
Cancel
Editing help
(opens in new window)
Template used on this page:
Module:Sandbox/genewiki/experimental/doc
(
edit
)