1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73
|
"""
A manual registry of renderers.
Renderers are the glue between a core and some output. A service is the
combination of a subset of renderers and a core.
Renderers are actually defined in web.grend, but we need some way to
get at them from svcs and above, so the registry is kept here.
"""
#c Copyright 2008-2020, the GAVO project
#c
#c This program is free software, covered by the GNU GPL. See the
#c COPYING file in the source distribution.
import functools
from gavo import base
from gavo import utils
RENDERER_REGISTRY = {
'admin': ("web.adminrender", "AdminRenderer"),
'api': ("web.vodal", "APIRenderer"),
'authcheck': ("web.adminrender", "AuthcheckRenderer"),
'availability': ("web.vosi", "VOSIAvailabilityRenderer"),
'capabilities': ("web.vosi", "VOSICapabilityRenderer"),
'coverage': ("web.metarender", "CoverageRenderer"),
'custom': ("web.customrender", "CustomRenderer"),
'dlasync': ("web.vodal", "DatalinkAsyncRenderer"),
'dlget': ("web.vodal", "DatalinkGetDataRenderer"),
'dlmeta': ("web.vodal", "DatalinkGetMetaRenderer"),
'edition': ("web.metarender", "EditionRenderer"),
'examples': ("web.examplesrender", "Examples"),
'external': ("web.metarender", "ExternalRenderer"),
'fixed': ("web.constantrender", "FixedPageRenderer"),
'form': ("web.formrender", "FormRenderer"),
'get': ("web.productrender", "ProductRenderer"),
'howtocite': ("web.metarender", "HowToCiteRenderer"),
'info': ("web.metarender", "ServiceInfoRenderer"),
'mupload': ("web.uploadservice", "MachineUploader"),
'pubreg.xml': ("web.vodal", "RegistryRenderer"),
'qp': ("web.qprenderer", "QPRenderer"),
'rdinfo': ("web.metarender", "RDInfoRenderer"),
'scs.xml': ("web.vodal", "SCSRenderer"),
'siap.xml': ("web.vodal", "SIAPRenderer"),
'siap2.xml': ("web.vodal", "SIAP2Renderer"),
'slap.xml': ("web.vodal", "SLAPRenderer"),
'soap': ("web.soaprender", "SOAPRenderer"),
'ssap.xml': ("web.vodal", "SSAPRenderer"),
'static': ("web.constantrender", "StaticRenderer"),
'tableinfo': ("web.metarender", "TableInfoRenderer"),
'tableMetadata': ("web.vosi", "VOSITablesetRenderer"),
'tablenote': ("web.metarender", "TableNoteRenderer"),
'tap': ("web.taprender", "TAPRenderer"),
'upload': ("web.uploadservice", "Uploader"),
'uws.xml': ("web.vodal", "UWSAsyncRenderer"),
'volatile': ("web.constantrender", "VolatilePageRenderer"),
}
@functools.lru_cache()
def getRenderer(name):
if name not in RENDERER_REGISTRY:
raise base.NotFoundError(name, "renderer", "registred renderers")
cls = utils.loadInternalObject(*RENDERER_REGISTRY[name])
if cls.name!=name:
raise base.ReportableError("Internal Error: Renderer %s is registred"
" under the wrong name."%name,
hint="This is probably a typo in svcs.renderers; it needs"
" to be fixed there")
return cls
|