VOTT: VO Text Treasures
VOTT is a formatted list of educational/outreach texts
on using the VO: use cases, tutorials, courses, and such.
VOTT contains material for all settings, from pre-school to
graduate.
It is generated from the documents known to the VO Registry.
2016-05-31T15:13:00
500
virtual-observatories
software-tutorials
Demleitner, M.
Research
Amateur
General
EPOResource
Library
"""
SELECT ivoid, short_name, res_title, updated, content_level,
res_description, reference_url, creator_seq, waveband,
detail_paths, detail_values, access_url, last_checked
FROM rr.resource
NATURAL JOIN rr.capability
NATURAL JOIN rr.interface
NATURAL JOIN (
SELECT ivoid, cap_index,
string_agg(detail_xpath, '#') as detail_paths,
string_agg(detail_value, '#SEP#') as detail_values
FROM rr.res_detail
GROUP BY ivoid, cap_index) AS details
NATURAL LEFT OUTER JOIN (
SELECT ivoid, date_value as last_checked
FROM rr.res_date
WHERE value_role='inspected') as dates
WHERE
res_type='doc:document'
AND intf_role='rendered'
ORDER BY creator_seq, ivoid, cap_index"""
import itertools
from gavo import votable
def toList(literal):
if literal is None:
return []
return literal.split("#")
class Edition(dict):
def __init__(self, access_url, detail_paths, detail_values, parent):
dict.__init__(self)
self["access_url"] = access_url
details_dict = dict(p for p in
zip(detail_paths.split("#"), detail_values.split("#SEP#")))
self["languageCode"] = details_dict.get(
'/capability/languageCode', 'en')
self["title"] = details_dict.get(
'/capability/locTitle', parent["title"])
class Document(dict):
def __init__(self, ivoid):
dict.__init__(self)
self["ivoid"] = ivoid
self["editions"] = []
@classmethod
def from_matches(cls, rows):
self = cls(rows[0]["ivoid"])
self["title"] = rows[0]["res_title"]
self["short_name"] = rows[0]["short_name"] or ""
self["updated"] = rows[0]["updated"]
self["content_levels"] = toList(rows[0]["content_level"])
self["description"] = rows[0]["res_description"] or ""
self["reference_url"] = rows[0]["reference_url"] or ""
self["creator"] = rows[0]["creator_seq"] or ""
self["wavebands"] = toList(rows[0]["waveband"])
self["last_checked"] = rows[0]["last_checked"] or ""
self["min_level"] = 3
if "general" in self["content_levels"]:
self["min_level"] = 1
if "amateur" in self["content_levels"]:
self["min_level"] = 2
default_access_url = None
for row in rows:
edition = Edition(
row["access_url"],
row["detail_paths"],
row["detail_values"],
self)
self["editions"].append(edition)
if (default_access_url is None
or edition["languageCode"]=="en"):
default_access_url = edition["access_url"]
self["default_access_url"] = default_access_url
return self
def getDocs():
with base.getTableConn() as conn:
rows = conn.queryToDicts(DOC_QUERY)
return [
Document.from_matches(list(chunk))
for _, chunk in itertools.groupby(
rows,
lambda row: row["ivoid"])]
rd.documentMeta = getDocs()
VOTT
res/response.html
# this will be true until update-documents has succeeded at least once
import os
if not hasattr(service.rd, "documentMeta") or not service.rd.documentMeta:
return ctx.tag
else:
return ""
# adds a src attribute pointing to our thumbnail service
# This expects to see the resource's ivoid as the img's child.
return ctx.tag(
src=service.rd.getById("thumbnails").getURL("custom"
)+urllib.parse.quote(tag.slotData["ivoid"].split(":/", 1)[-1]))
# adds checked attributes to order radio buttons
args = inevow.IRequest(ctx).args
sortOrder = args.get(b"order", [b"authors"])[0].decode("ascii")
if ctx.tag.attributes["value"]=="author":
if sortOrder not in b["min_level", b"last_checked"]:
return ctx.tag(checked="checked")
else:
if ctx.tag.attributes["value"]==sortOrder:
return ctx.tag(checked="checked")
return ctx.tag
# returns a sequence of document metadata or an empty list
# if they've not been retrieved yet
args = inevow.IRequest(ctx).args
sortOrder = args.get(b"order", [b"authors"])[0]
try:
if sortOrder==b'last_checked':
return sorted(
[r for r in service.rd.documentMeta if r["last_checked"]],
key=lambda r: r["last_checked"],
reverse=True)
elif sortOrder==b'min_level':
return sorted(service.rd.documentMeta,
key=lambda r: r["min_level"])
return service.rd.documentMeta
except AttributeError:
return []
Thumbnails service for VOTT
reslist/volatile ',
'Please reload in a moment.',
''
)
else:
self.assertHasStrings(
'',
'linear size and apparent angular size,')
]]>thumbnails/custom/edu.gavo.org/hd/arvo_dfbs
self.assertHeader("content-type", "image/jpeg")
self.assertHasStrings("JFIF")