File: renderers.py

package info (click to toggle)
gavodachs 2.3%2Bdfsg-3
  • links: PTS, VCS
  • area: main
  • in suites: bullseye
  • size: 7,260 kB
  • sloc: python: 58,359; xml: 8,882; javascript: 3,453; ansic: 661; sh: 158; makefile: 22
file content (73 lines) | stat: -rw-r--r-- 2,780 bytes parent folder | download
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