gavo.web.ifpages module

Infrastructure pages.

class gavo.web.ifpages.ACMEChallenge[source]

Bases: Resource

A resource for letsencrypt and friends.

acmeChallengeDir = '/home/msdemlei/gavo/state/acme-challenge'
getChild(name, request)[source]

Retrieve a ‘child’ resource from me.

Implement this to create dynamic resource generation – resources which are always available may be registered with self.putChild().

This will not be called if the class-level variable ‘isLeaf’ is set in your subclass; instead, the ‘postpath’ attribute of the request will be left as a list of the remaining path elements.

For example, the URL /foo/bar/baz will normally be:

| site.resource.getChild('foo').getChild('bar').getChild('baz').

However, if the resource returned by ‘bar’ has isLeaf set to true, then the getChild call will never be made on it.

Parameters and return value have the same meaning and requirements as those defined by L{IResource.getChildWithDefault}.

render(request)[source]

Render a given resource. See L{IResource}’s render method.

I delegate to methods of self with the form ‘render_METHOD’ where METHOD is the HTTP that was used to make the request. Examples: render_GET, render_HEAD, render_POST, and so on. Generally you should implement those methods instead of overriding this one.

render_METHOD methods are expected to return a byte string which will be the rendered page, unless the return value is C{server.NOT_DONE_YET}, in which case it is this class’s responsibility to write the results using C{request.write(data)} and then call C{request.finish()}.

Old code that overrides render() directly is likewise expected to return a byte string or NOT_DONE_YET.

@see: L{IResource.render}

class gavo.web.ifpages.Authors[source]

Bases: JSONQuery

query = "SELECT author, count(*) as numMatch FROM dc.authors   NATURAL JOIN dc.sets WHERE setname='local' AND NOT deleted GROUP BY author ORDER BY author"
class gavo.web.ifpages.ByAuthor[source]

Bases: JSONQuery

query = "SELECT title, accessurl, referenceurl, sourcerd, resid, owner, browseable  FROM dc.resources    NATURAL JOIN dc.interfaces    NATURAL JOIN dc.authors    NATURAL JOIN dc.sets WHERE setname='local' AND author=%(author)s AND NOT deleted ORDER BY title"
class gavo.web.ifpages.ByFulltext[source]

Bases: JSONQuery

query = "SELECT DISTINCT title, accessurl, referenceurl, sourcerd, resid, owner, browseable FROM dc.resources   NATURAL JOIN dc.interfaces   NATURAL JOIN dc.subjects   NATURAL JOIN dc.sets WHERE setname='local' AND NOT deleted AND (to_tsvector('english', description) || to_tsvector(subject)    || to_tsvector('english', title) || to_tsvector(authors))  @@ plainto_tsquery(%(q)s) ORDER BY title"
class gavo.web.ifpages.BySubject[source]

Bases: JSONQuery

query = "SELECT title, accessurl, referenceurl, sourcerd, resid, owner, browseable FROM dc.resources   NATURAL JOIN dc.interfaces   NATURAL JOIN dc.subjects   NATURAL JOIN dc.sets WHERE setname='local' AND subject=%(subject)s AND NOT deleted ORDER BY title"
class gavo.web.ifpages.CurReaders[source]

Bases: Resource

A page returning an approximate number of clients served currently.

render(request)[source]

Render a given resource. See L{IResource}’s render method.

I delegate to methods of self with the form ‘render_METHOD’ where METHOD is the HTTP that was used to make the request. Examples: render_GET, render_HEAD, render_POST, and so on. Generally you should implement those methods instead of overriding this one.

render_METHOD methods are expected to return a byte string which will be the rendered page, unless the return value is C{server.NOT_DONE_YET}, in which case it is this class’s responsibility to write the results using C{request.write(data)} and then call C{request.finish()}.

Old code that overrides render() directly is likewise expected to return a byte string or NOT_DONE_YET.

@see: L{IResource.render}

class gavo.web.ifpages.DirectoryLister(pathname, dirs=None, contentTypes={'.%': 'application/x-trash', '.123': 'application/vnd.lotus-1-2-3', '.1905.1': 'application/vnd.ieee.1905', '.1clr': 'application/clr', '.1km': 'application/vnd.1000minds.decision-model+xml', '.210': 'application/p21', '.3dm': 'text/vnd.in3d.3dml', '.3dml': 'text/vnd.in3d.3dml', '.3g2': 'audio/3gpp2', '.3gp': 'audio/3gpp', '.3gpp': 'audio/3gpp', '.3gpp2': 'audio/3gpp2', '.3mf': 'application/vnd.ms-3mfdocument', '.3tz': 'application/vnd.maxar.archive.3tz+zip', '.726': 'audio/32kadpcm', '.7z': 'application/x-7z-compressed', '.AMR': 'audio/AMR', '.AWB': 'audio/AMR-WB', '.CQL': 'text/cql', '.ELN': 'application/vnd.eln+zip', '.PGB': 'image/vnd.globalgraphics.pgb', '.QCP': 'audio/EVRC-QCP', '.SAR': 'application/vnd.sar', '.VES': 'application/vnd.ves.encrypted', '.VFK': 'text/vnd.exchangeable', '.a': 'text/vnd.a', '.a2l': 'application/A2L', '.aa3': 'audio/ATRAC3', '.aac': 'audio/aac', '.aal': 'audio/ATRAC-ADVANCED-LOSSLESS', '.abc': 'text/vnd.abc', '.abw': 'application/x-abiword', '.ac': 'application/pkix-attr-cert', '.ac2': 'application/vnd.banana-accounting', '.ac3': 'audio/ac3', '.acc': 'application/vnd.americandynamics.acc', '.acn': 'audio/asc', '.acu': 'application/vnd.acucobol', '.acutc': 'application/vnd.acucorp', '.adts': 'audio/aac', '.aep': 'application/vnd.audiograph', '.afp': 'application/vnd.afpc.modca', '.age': 'application/vnd.age', '.ahead': 'application/vnd.ahead.space', '.ai': 'application/postscript', '.aif': 'audio/x-aiff', '.aifc': 'audio/x-aiff', '.aiff': 'audio/x-aiff', '.aion': 'application/vnd.veritone.aion+json', '.ait': 'application/vnd.dvb.ait', '.alc': 'chemical/x-alchemy', '.ami': 'application/vnd.amiga.ami', '.aml': 'application/AML', '.amlx': 'application/automationml-amlx+zip', '.amr': 'audio/AMR', '.anx': 'application/annodex', '.apex': 'application/vnd.apexlang', '.apexlang': 'application/vnd.apexlang', '.apk': 'application/vnd.android.package-archive', '.apkg': 'application/vnd.anki', '.apng': 'image/apng', '.appcache': 'text/cache-manifest', '.apr': 'application/vnd.lotus-approach', '.apxml': 'application/auth-policy+xml', '.arrow': 'application/vnd.apache.arrow.file', '.arrows': 'application/vnd.apache.arrow.stream', '.art': 'message/rfc822', '.artisan': 'application/vnd.artisan+json', '.asc': 'application/pgp-keys', '.ascii': 'application/octet-stream', '.asf': 'application/vnd.ms-asf', '.asice': 'application/vnd.etsi.asic-e+zip', '.asics': 'application/vnd.etsi.asic-s+zip', '.asn': 'chemical/x-ncbi-asn1-spec', '.aso': 'chemical/x-ncbi-asn1-binary', '.ass': 'audio/aac', '.at3': 'audio/ATRAC3', '.atc': 'application/vnd.acucorp', '.atf': 'application/ATF', '.atfx': 'application/ATFX', '.atom': 'application/atom+xml', '.atomcat': 'application/atomcat+xml', '.atomdeleted': 'application/atomdeleted+xml', '.atomsrv': 'application/atomserv+xml', '.atomsvc': 'application/atomsvc+xml', '.atx': 'audio/ATRAC-X', '.atxml': 'application/ATXML', '.au': 'audio/basic', '.auc': 'application/tamp-apex-update-confirm', '.avci': 'image/avci', '.avcs': 'image/avcs', '.avi': 'video/x-msvideo', '.avif': 'image/avif', '.awb': 'audio/AMR-WB', '.axa': 'audio/annodex', '.axv': 'video/annodex', '.azf': 'application/vnd.airzip.filesecure.azf', '.azs': 'application/vnd.airzip.filesecure.azs', '.azv': 'image/vnd.airzip.accelerator.azv', '.azw3': 'application/vnd.amazon.mobi8-ebook', '.b': 'chemical/x-molconn-Z', '.b16': 'image/vnd.pco.b16', '.bak': 'application/x-trash', '.bar': 'application/vnd.qualcomm.brew-app-res', '.bat': 'application/x-msdos-program', '.bcpio': 'application/x-bcpio', '.bdm': 'application/vnd.syncml.dm+wbxml', '.bed': 'application/vnd.realvnc.bed', '.bh2': 'application/vnd.fujitsu.oasysprs', '.bib': 'text/x-bibtex', '.bik': 'video/vnd.radgamettools.bink', '.bin': 'application/octet-stream', '.bk2': 'video/vnd.radgamettools.bink', '.bkm': 'application/vnd.nervana', '.bmed': 'multipart/vnd.bint.med-plus', '.bmi': 'application/vnd.bmi', '.bmml': 'application/vnd.balsamiq.bmml+xml', '.bmp': 'image/bmp', '.bmpr': 'application/vnd.balsamiq.bmpr', '.boo': 'text/x-boo', '.book': 'application/x-maker', '.box': 'application/vnd.previewsystems.box', '.bpd': 'application/vnd.hbci', '.brf': 'text/plain', '.bsd': 'chemical/x-crossfire', '.bsp': 'model/vnd.valve.source.compiled-map', '.btf': 'image/prs.btif', '.btif': 'image/prs.btif', '.c': 'text/x-csrc', '.c++': 'text/x-c++src', '.c11amc': 'application/vnd.cluetrust.cartomobile-config', '.c11amz': 'application/vnd.cluetrust.cartomobile-config-pkg', '.c3d': 'chemical/x-chem3d', '.c3ex': 'application/cccex', '.c4d': 'application/vnd.clonk.c4group', '.c4f': 'application/vnd.clonk.c4group', '.c4g': 'application/vnd.clonk.c4group', '.c4p': 'application/vnd.clonk.c4group', '.c4u': 'application/vnd.clonk.c4group', '.c9r': 'application/vnd.cryptomator.encrypted', '.c9s': 'application/vnd.cryptomator.encrypted', '.cab': 'application/vnd.ms-cab-compressed', '.cac': 'chemical/x-cache', '.cache': 'chemical/x-cache', '.cap': 'application/vnd.tcpdump.pcap', '.car': 'application/vnd.ipld.car', '.carjson': 'application/vnd.eu.kasparian.car+json', '.cascii': 'chemical/x-cactvs-binary', '.cat': 'application/vnd.ms-pki.seccat', '.cbin': 'chemical/x-cactvs-binary', '.cbor': 'application/cbor', '.cbr': 'application/vnd.comicbook-rar', '.cbz': 'application/vnd.comicbook+zip', '.cc': 'text/x-c++src', '.ccc': 'text/vnd.net2phone.commcenter.command', '.ccmp': 'application/ccmp+xml', '.ccxml': 'application/ccxml+xml', '.cda': 'application/x-cdf', '.cdbcmsg': 'application/vnd.contact.cmsg', '.cdf': 'application/x-cdf', '.cdfx': 'application/CDFX+XML', '.cdkey': 'application/vnd.mediastation.cdkey', '.cdmia': 'application/cdmi-capability', '.cdmic': 'application/cdmi-container', '.cdmid': 'application/cdmi-domain', '.cdmio': 'application/cdmi-object', '.cdmiq': 'application/cdmi-queue', '.cdr': 'image/x-coreldraw', '.cdt': 'image/x-coreldrawtemplate', '.cdx': 'chemical/x-cdx', '.cdxml': 'application/vnd.chemdraw+xml', '.cdy': 'application/vnd.cinderella', '.cea': 'application/CEA', '.cef': 'chemical/x-cxf', '.cellml': 'application/cellml+xml', '.cer': 'application/pkix-cert', '.cgm': 'image/cgm', '.chm': 'chemical/x-chemdraw', '.chrt': 'application/vnd.kde.kchart', '.cif': 'chemical/x-cif', '.cii': 'application/vnd.anser-web-certificate-issue-initiation', '.cil': 'application/vnd.ms-artgalry', '.cl': 'application/simple-filter+xml', '.cla': 'application/vnd.claymore', '.class': 'application/java-vm', '.cld': 'model/vnd.cld', '.clkk': 'application/vnd.crick.clicker.keyboard', '.clkp': 'application/vnd.crick.clicker.palette', '.clkt': 'application/vnd.crick.clicker.template', '.clkw': 'application/vnd.crick.clicker.wordbank', '.clkx': 'application/vnd.crick.clicker', '.cls': 'text/x-tex', '.clue': 'application/clue_info+xml', '.cmc': 'application/vnd.cosmocaller', '.cmdf': 'chemical/x-cmdf', '.cml': 'chemical/x-cml', '.cmp': 'application/vnd.yellowriver-custom-menu', '.cmsc': 'application/cms', '.cnd': 'text/jcr-cnd', '.cod': 'application/vnd.rim.cod', '.coffee': 'application/vnd.coffeescript', '.com': 'application/x-msdos-program', '.conf': 'text/plain', '.copyright': 'text/vnd.debian.copyright', '.coswid': 'application/swid+cbor', '.cpa': 'chemical/x-compass', '.cpio': 'application/x-cpio', '.cpkg': 'application/vnd.xmpie.cpkg', '.cpl': 'application/cpl+xml', '.cpp': 'text/x-c++src', '.cpt': 'image/x-corelphotopaint', '.cr2': 'image/x-canon-cr2', '.crl': 'application/pkix-crl', '.crt': 'application/x-x509-ca-cert', '.crtr': 'application/vnd.multiad.creator', '.crw': 'image/x-canon-crw', '.cryptomator': 'application/vnd.cryptomator.vault', '.cryptonote': 'application/vnd.rig.cryptonote', '.csd': 'audio/csound', '.csf': 'chemical/x-cache-csf', '.csh': 'text/x-csh', '.csl': 'application/vnd.citationstyles.style+xml', '.csm': 'chemical/x-csml', '.csml': 'chemical/x-csml', '.csp': 'application/vnd.commonspace', '.csrattrs': 'application/csrattrs', '.css': 'text/css', '.cst': 'application/vnd.commonspace', '.csv': 'text/csv', '.csvs': 'text/csv-schema', '.ctab': 'chemical/x-cactvs-binary', '.ctx': 'chemical/x-ctx', '.cu': 'application/cu-seeme', '.cub': 'chemical/x-gaussian-cube', '.cuc': 'application/tamp-community-update-confirm', '.curl': 'text/vnd.curl', '.cw': 'application/prs.cww', '.cwl': 'application/cwl', '.cwl.json': 'application/cwl+json', '.cww': 'application/prs.cww', '.cxf': 'chemical/x-cxf', '.cxx': 'text/x-c++src', '.d': 'text/x-dsrc', '.dae': 'model/vnd.collada+xml', '.daf': 'application/vnd.Mobius.DAF', '.dart': 'application/vnd.dart', '.dataless': 'application/vnd.fdsn.seed', '.davmount': 'application/davmount+xml', '.dbf': 'application/vnd.dbf', '.dcd': 'application/DCD', '.dcm': 'application/dicom', '.dcr': 'application/x-director', '.dd2': 'application/vnd.oma.dd2+xml', '.ddd': 'application/vnd.fujixerox.ddd', '.ddeb': 'application/vnd.debian.binary-package', '.ddf': 'application/vnd.syncml.dmddf+xml', '.deb': 'application/vnd.debian.binary-package', '.deploy': 'application/octet-stream', '.dfac': 'application/vnd.dreamfactory', '.dif': 'video/dv', '.diff': 'text/plain', '.dii': 'application/DII', '.dim': 'application/vnd.fastcopy-disk-image', '.dir': 'application/x-director', '.dis': 'application/vnd.Mobius.DIS', '.dist': 'application/vnd.apple.installer+xml', '.distz': 'application/vnd.apple.installer+xml', '.dit': 'application/DIT', '.dive': 'application/vnd.patentdive', '.djv': 'image/vnd.djvu', '.djvu': 'image/vnd.djvu', '.dl': 'application/vnd.datalog', '.dll': 'application/x-msdos-program', '.dls': 'audio/dls', '.dmg': 'application/x-apple-diskimage', '.dmp': 'application/vnd.tcpdump.pcap', '.dms': 'text/vnd.DMClientScript', '.dna': 'application/vnd.dna', '.doc': 'application/msword', '.docjson': 'application/vnd.document+json', '.docm': 'application/vnd.ms-word.document.macroEnabled.12', '.docx': 'application/vnd.openxmlformats-officedocument.wordprocessingml.document', '.dor': 'model/vnd.gdl', '.dot': 'text/vnd.graphviz', '.dotm': 'application/vnd.ms-word.template.macroEnabled.12', '.dotx': 'application/vnd.openxmlformats-officedocument.wordprocessingml.template', '.dp': 'application/vnd.osgi.dp', '.dpg': 'application/vnd.dpgraph', '.dpgraph': 'application/vnd.dpgraph', '.dpkg': 'application/vnd.xmpie.dpkg', '.dpx': 'image/dpx', '.drle': 'image/dicom-rle', '.dsc': 'text/prs.lines.tag', '.dsm': 'application/vnd.desmume.movie', '.dssc': 'application/dssc+der', '.dtd': 'application/xml-dtd', '.dts': 'audio/vnd.dts', '.dtshd': 'audio/vnd.dts.hd', '.dv': 'video/dv', '.dvb': 'video/vnd.dvb.file', '.dvc': 'application/dvcs', '.dvi': 'application/x-dvi', '.dwd': 'application/atsc-dwd+xml', '.dwf': 'model/vnd.dwf', '.dwg': 'image/vnd.dwg', '.dx': 'chemical/x-jcamp-dx', '.dxf': 'image/vnd.dxf', '.dxp': 'application/vnd.spotfire.dxp', '.dxr': 'application/x-director', '.dzr': 'application/vnd.dzr', '.ebuild': 'application/vnd.gentoo.ebuild', '.ecelp4800': 'audio/vnd.nuera.ecelp4800', '.ecelp7470': 'audio/vnd.nuera.ecelp7470', '.ecelp9600': 'audio/vnd.nuera.ecelp9600', '.ecig': 'application/vnd.evolv.ecig.settings', '.ecigprofile': 'application/vnd.evolv.ecig.profile', '.ecigtheme': 'application/vnd.evolv.ecig.theme', '.eclass': 'application/vnd.gentoo.eclass', '.edm': 'application/vnd.novadigm.EDM', '.edx': 'application/vnd.novadigm.EDX', '.efi': 'application/efi', '.efif': 'application/vnd.picsel', '.ei6': 'application/vnd.pg.osasli', '.emb': 'chemical/x-embl-dl-nucleotide', '.embl': 'chemical/x-embl-dl-nucleotide', '.emf': 'image/emf', '.eml': 'message/rfc822', '.emm': 'application/vnd.ibm.electronic-media', '.emma': 'application/emma+xml', '.emotionml': 'application/emotionml+xml', '.ent': 'application/xml-external-parsed-entity', '.entity': 'application/vnd.nervana', '.enw': 'audio/EVRCNW', '.eol': 'audio/vnd.digital-winds', '.eot': 'application/vnd.ms-fontobject', '.ep': 'application/vnd.bluetooth.ep.oob', '.eps': 'application/postscript', '.eps2': 'application/postscript', '.eps3': 'application/postscript', '.epsf': 'application/postscript', '.epsi': 'application/postscript', '.epub': 'application/epub+zip', '.erf': 'image/x-epson-erf', '.es': 'text/javascript', '.es3': 'application/vnd.eszigno3+xml', '.esa': 'application/vnd.osgi.subsystem', '.esf': 'application/vnd.epson.esf', '.espass': 'application/vnd.espass-espass+zip', '.et3': 'application/vnd.eszigno3+xml', '.etx': 'text/x-setext', '.evb': 'audio/EVRCB', '.evc': 'audio/EVRC', '.evw': 'audio/EVRCWB', '.exe': 'application/x-msdos-program', '.exi': 'application/exi', '.exp': 'application/express', '.exr': 'image/aces', '.ext': 'application/vnd.novadigm.EXT', '.ez': 'application/andrew-inset', '.ez2': 'application/vnd.ezpix-album', '.ez3': 'application/vnd.ezpix-package', '.f': 'text/x-fortran', '.f90': 'text/x-fortran', '.fb': 'application/x-maker', '.fbdoc': 'application/x-maker', '.fbs': 'image/vnd.fastbidsheet', '.fcdt': 'application/vnd.adobe.formscentral.fcdt', '.fch': 'chemical/x-gaussian-checkpoint', '.fchk': 'chemical/x-gaussian-checkpoint', '.fcs': 'application/vnd.isac.fcs', '.fdf': 'application/fdf', '.fdt': 'application/fdt+xml', '.fe_launch': 'application/vnd.denovo.fcselayout-link', '.fg5': 'application/vnd.fujitsu.oasysgp', '.fig': 'application/x-xfig', '.finf': 'application/fastinfoset', '.fit': 'image/fits', '.fits': 'image/fits', '.fitstable': 'application/fits', '.fla': 'application/vnd.dtg.local.flash', '.flac': 'audio/x-flac', '.flb': 'application/vnd.ficlab.flb+zip', '.fli': 'video/fli', '.flo': 'application/vnd.micrografx.flo', '.flt': 'text/vnd.ficlab.flt', '.flv': 'video/x-flv', '.flw': 'application/vnd.kde.kivio', '.flx': 'text/vnd.fmi.flexstor', '.fly': 'text/vnd.fly', '.fm': 'application/x-maker', '.fo': 'application/vnd.software602.filler.form+xml', '.fpx': 'image/vnd.fpx', '.frame': 'application/x-maker', '.frm': 'application/x-maker', '.fsc': 'application/vnd.fsc.weblaunch', '.fst': 'image/vnd.fst', '.ftc': 'application/vnd.fluxtime.clip', '.fti': 'application/vnd.anser-web-funds-transfer-initiation', '.fts': 'image/fits', '.fvt': 'video/vnd.fvt', '.fxp': 'application/vnd.adobe.fxp', '.fxpl': 'application/vnd.adobe.fxp', '.fzs': 'application/vnd.fuzzysheet', '.g2w': 'application/vnd.geoplan', '.g3w': 'application/vnd.geospace', '.gac': 'application/vnd.groove-account', '.gal': 'chemical/x-gaussian-log', '.gam': 'chemical/x-gamess-input', '.gamin': 'chemical/x-gamess-input', '.gan': 'application/x-ganttproject', '.gau': 'chemical/x-gaussian-input', '.gbr': 'application/rpki-ghostbusters', '.gcd': 'text/x-pcs-gcd', '.gcf': 'application/x-graphing-calculator', '.gcg': 'chemical/x-gcg8-sequence', '.gdl': 'model/vnd.gdl', '.gdz': 'application/vnd.familysearch.gedcom+zip', '.ged': 'text/vnd.familysearch.gedcom', '.gen': 'chemical/x-genbank', '.genozip': 'application/vnd.genozip', '.geo': 'application/vnd.dynageo', '.geojson': 'application/geo+json', '.gex': 'application/vnd.geometry-explorer', '.gf': 'application/x-tex-gf', '.gff3': 'text/gff3', '.ggb': 'application/vnd.geogebra.file', '.ggs': 'application/vnd.geogebra.slides', '.ggt': 'application/vnd.geogebra.tool', '.ghf': 'application/vnd.groove-help', '.gif': 'image/gif', '.gim': 'application/vnd.groove-identity-message', '.gjc': 'chemical/x-gaussian-input', '.gjf': 'chemical/x-gaussian-input', '.gl': 'video/gl', '.glb': 'model/gltf-binary', '.glbin': 'application/gltf-buffer', '.glbuf': 'application/gltf-buffer', '.gltf': 'model/gltf+json', '.gml': 'application/gml+xml', '.gnumeric': 'application/x-gnumeric', '.gph': 'application/vnd.FloGraphIt', '.gpkg': 'application/geopackage+sqlite3', '.gpkg.tar': 'application/vnd.gentoo.gpkg', '.gpt': 'chemical/x-mopac-graph', '.gqf': 'application/vnd.grafeq', '.gqs': 'application/vnd.grafeq', '.gram': 'application/srgs', '.grd': 'application/vnd.gentics.grd+json', '.gre': 'application/vnd.geometry-explorer', '.grv': 'application/vnd.groove-injector', '.grxml': 'application/srgs+xml', '.gsf': 'application/x-font', '.gsheet': 'application/urc-grpsheet+xml', '.gsm': 'model/vnd.gdl', '.gtar': 'application/x-gtar', '.gtm': 'application/vnd.groove-tool-message', '.gtw': 'model/vnd.gtw', '.gv': 'text/vnd.graphviz', '.gxt': 'application/vnd.geonext', '.gz': 'application/gzip', '.h': 'text/x-chdr', '.h++': 'text/x-c++hdr', '.h5': 'application/x-hdf5', '.hal': 'application/vnd.hal+xml', '.hans': 'text/vnd.hans', '.hbc': 'application/vnd.hbci', '.hbci': 'application/vnd.hbci', '.hdf': 'application/x-hdf', '.hdr': 'image/vnd.radiance', '.hdt': 'application/vnd.hdt', '.heic': 'image/heic', '.heics': 'image/heic-sequence', '.heif': 'image/heif', '.heifs': 'image/heif-sequence', '.hej2': 'image/hej2k', '.held': 'application/atsc-held+xml', '.hgl': 'text/vnd.hgl', '.hh': 'text/x-c++hdr', '.hif': 'image/avif', '.hin': 'chemical/x-hin', '.hpgl': 'application/vnd.hp-HPGL', '.hpi': 'application/vnd.hp-hpid', '.hpid': 'application/vnd.hp-hpid', '.hpp': 'text/x-c++hdr', '.hps': 'application/vnd.hp-hps', '.hpub': 'application/prs.hpub+zip', '.hqx': 'application/mac-binhex40', '.hs': 'text/x-haskell', '.hsj2': 'image/hsj2', '.hta': 'application/hta', '.htc': 'text/x-component', '.htke': 'application/vnd.kenameaapp', '.htm': 'text/html', '.html': 'text/html', '.hvd': 'application/vnd.yamaha.hv-dic', '.hvp': 'application/vnd.yamaha.hv-voice', '.hvs': 'application/vnd.yamaha.hv-script', '.hwp': 'application/x-hwp', '.hxx': 'text/x-c++hdr', '.i2g': 'application/vnd.intergeo', '.ic0': 'application/vnd.commerce-battelle', '.ic1': 'application/vnd.commerce-battelle', '.ic2': 'application/vnd.commerce-battelle', '.ic3': 'application/vnd.commerce-battelle', '.ic4': 'application/vnd.commerce-battelle', '.ic5': 'application/vnd.commerce-battelle', '.ic6': 'application/vnd.commerce-battelle', '.ic7': 'application/vnd.commerce-battelle', '.ic8': 'application/vnd.commerce-battelle', '.ica': 'application/x-ica', '.icc': 'application/vnd.iccprofile', '.icd': 'application/vnd.commerce-battelle', '.icf': 'application/vnd.commerce-battelle', '.icm': 'application/vnd.iccprofile', '.ico': 'image/vnd.microsoft.icon', '.ics': 'text/calendar', '.ief': 'image/ief', '.ifb': 'text/calendar', '.ifc': 'application/p21', '.ifm': 'application/vnd.shana.informed.formdata', '.iges': 'model/iges', '.igl': 'application/vnd.igloader', '.igm': 'application/vnd.insors.igm', '.ign': 'application/vnd.coreos.ignition+json', '.ignition': 'application/vnd.coreos.ignition+json', '.igs': 'model/iges', '.igx': 'application/vnd.micrografx.igx', '.iif': 'application/vnd.shana.informed.interchange', '.iii': 'application/x-iphone', '.imf': 'application/vnd.imagemeter.folder+zip', '.imgcal': 'application/vnd.3lightssoftware.imagescal', '.imi': 'application/vnd.imagemeter.image+zip', '.imp': 'application/vnd.accpac.simply.imp', '.ims': 'application/vnd.ms-ims', '.imscc': 'application/vnd.ims.imsccv1p1', '.info': 'application/x-info', '.ink': 'application/inkml+xml', '.inkml': 'application/inkml+xml', '.inp': 'chemical/x-gamess-input', '.ins': 'application/x-internet-signup', '.iota': 'application/vnd.astraea-software.iota', '.ipfix': 'application/ipfix', '.ipk': 'application/vnd.shana.informed.package', '.irm': 'application/vnd.ibm.rights-management', '.irp': 'application/vnd.irepository.package+xml', '.ism': 'model/vnd.gdl', '.iso': 'application/x-iso9660-image', '.isp': 'application/x-internet-signup', '.ist': 'chemical/x-isostar', '.istc': 'application/vnd.veryant.thin', '.istr': 'chemical/x-isostar', '.isws': 'application/vnd.veryant.thin', '.itp': 'application/vnd.shana.informed.formtemplate', '.its': 'application/its+xml', '.ivp': 'application/vnd.immervision-ivp', '.ivu': 'application/vnd.immervision-ivu', '.jad': 'text/vnd.sun.j2me.app-descriptor', '.jam': 'application/vnd.jam', '.jar': 'application/java-archive', '.java': 'text/plain', '.jdx': 'chemical/x-jcamp-dx', '.jfif': 'image/jpeg', '.jhc': 'image/jphc', '.jisp': 'application/vnd.jisp', '.jls': 'image/jls', '.jlt': 'application/vnd.hp-jlyt', '.jmz': 'application/x-jmol', '.jng': 'image/x-jng', '.jnlp': 'application/x-java-jnlp-file', '.joda': 'application/vnd.joost.joda-archive', '.jp2': 'image/jp2', '.jpe': 'image/jpeg', '.jpeg': 'image/jpeg', '.jpf': 'image/jpx', '.jpg': 'image/jpeg', '.jpg2': 'image/jp2', '.jpgm': 'image/jpm', '.jph': 'image/jph', '.jphc': 'image/jphc', '.jpm': 'image/jpm', '.jpx': 'image/jpx', '.jrd': 'application/jrd+json', '.js': 'text/javascript', '.json': 'application/json', '.json-patch': 'application/json-patch+json', '.jsonld': 'application/ld+json', '.jsontd': 'application/td+json', '.jsontm': 'application/tm+json', '.jt': 'model/JT', '.jtd': 'text/vnd.esmertec.theme-descriptor', '.jxl': 'image/jxl', '.jxr': 'image/jxr', '.jxra': 'image/jxrA', '.jxrs': 'image/jxrS', '.jxs': 'image/jxs', '.jxsc': 'image/jxsc', '.jxsi': 'image/jxsi', '.jxss': 'image/jxss', '.karbon': 'application/vnd.kde.karbon', '.kcm': 'application/vnd.nervana', '.key': 'application/pgp-keys', '.keynote': 'application/vnd.apple.keynote', '.kfo': 'application/vnd.kde.kformula', '.kia': 'application/vnd.kidspiration', '.kil': 'application/x-killustrator', '.kin': 'chemical/x-kinemage', '.kml': 'application/vnd.google-earth.kml+xml', '.kmz': 'application/vnd.google-earth.kmz', '.kne': 'application/vnd.Kinar', '.knp': 'application/vnd.Kinar', '.kom': 'application/vnd.hbci', '.kon': 'application/vnd.kde.kontour', '.koz': 'audio/vnd.audiokoz', '.kpr': 'application/vnd.kde.kpresenter', '.kpt': 'application/vnd.kde.kpresenter', '.ksh': 'text/plain', '.ksp': 'application/vnd.kde.kspread', '.ktr': 'application/vnd.kahootz', '.ktx': 'image/ktx', '.ktx2': 'image/ktx2', '.ktz': 'application/vnd.kahootz', '.kwd': 'application/vnd.kde.kword', '.kwt': 'application/vnd.kde.kword', '.l16': 'audio/L16', '.las': 'application/vnd.las', '.lasjson': 'application/vnd.las.las+json', '.lasxml': 'application/vnd.las.las+xml', '.latex': 'application/x-latex', '.lbc': 'audio/iLBC', '.lbd': 'application/vnd.llamagraphics.life-balance.desktop', '.lbe': 'application/vnd.llamagraphics.life-balance.exchange+xml', '.lca': 'application/vnd.logipipe.circuit+zip', '.lcs': 'application/vnd.logipipe.circuit+zip', '.le': 'application/vnd.bluetooth.le.oob', '.les': 'application/vnd.hhe.lesson-player', '.lgr': 'application/lgr+xml', '.lha': 'application/x-lha', '.lhs': 'text/x-literate-haskell', '.lhzd': 'application/vnd.belightsoft.lhzd+zip', '.lhzl': 'application/vnd.belightsoft.lhzl+zip', '.lin': 'application/bbolin', '.line': 'application/vnd.nebumind.line', '.link66': 'application/vnd.route66.link66+xml', '.list3820': 'application/vnd.afpc.modca', '.listafp': 'application/vnd.afpc.modca', '.lmp': 'model/vnd.gdl', '.loas': 'audio/usac', '.loom': 'application/vnd.loom', '.lostsyncxml': 'application/lostsync+xml', '.lostxml': 'application/lost+xml', '.lpf': 'application/lpf+zip', '.lrm': 'application/vnd.ms-lrm', '.lsf': 'video/x-la-asf', '.lsx': 'video/x-la-asf', '.ltx': 'text/x-tex', '.lvp': 'audio/vnd.lucent.voice', '.lwp': 'application/vnd.lotus-wordpro', '.lxf': 'application/LXF', '.ly': 'text/x-lilypond', '.lyx': 'application/x-lyx', '.lzh': 'application/x-lzh', '.lzx': 'application/x-lzx', '.m': 'application/vnd.wolfram.mathematica.package', '.m1v': 'video/mpeg', '.m21': 'application/mp21', '.m2v': 'video/mpeg', '.m3g': 'application/m3g', '.m3u': 'audio/mpegurl', '.m3u8': 'application/vnd.apple.mpegurl', '.m4a': 'audio/mp4', '.m4s': 'video/iso.segment', '.m4u': 'video/vnd.mpegurl', '.m4v': 'video/mp4', '.ma': 'application/mathematica', '.mads': 'application/mads+xml', '.maei': 'application/mmt-aei+xml', '.mag': 'application/vnd.ecowin.chart', '.mail': 'message/rfc822', '.maker': 'application/x-maker', '.man': 'application/x-troff-man', '.manifest': 'text/cache-manifest', '.markdown': 'text/markdown', '.mb': 'application/mathematica', '.mbk': 'application/vnd.Mobius.MBK', '.mbox': 'application/mbox', '.mc1': 'application/vnd.medcalcdata', '.mc2': 'text/vnd.senx.warpscript', '.mcd': 'application/vnd.mcd', '.mcif': 'chemical/x-mmcif', '.mcm': 'chemical/x-macmolecule', '.md': 'text/markdown', '.mdb': 'application/msaccess', '.mdc': 'application/vnd.marlin.drm.mdcf', '.mdi': 'image/vnd.ms-modi', '.me': 'application/x-troff-me', '.mesh': 'model/mesh', '.meta4': 'application/metalink4+xml', '.mets': 'application/mets+xml', '.mf4': 'application/MF4', '.mfm': 'application/vnd.mfmp', '.mft': 'application/rpki-manifest', '.mgp': 'application/vnd.osgeo.mapguide.package', '.mgz': 'application/vnd.proteus.magazine', '.mhas': 'audio/mhas', '.mht': 'message/rfc822', '.mhtml': 'message/rfc822', '.mid': 'audio/sp-midi', '.mif': 'application/vnd.mif', '.miz': 'text/mizar', '.mj2': 'video/mj2', '.mjp2': 'video/mj2', '.mjs': 'text/javascript', '.mkv': 'video/x-matroska', '.ml2': 'application/vnd.sybyl.mol2', '.mlp': 'audio/vnd.dolby.mlp', '.mm': 'application/x-freemind', '.mmd': 'application/vnd.chipnuts.karaoke-mmd', '.mmdb': 'application/vnd.maxmind.maxmind-db', '.mmf': 'application/vnd.smaf', '.mml': 'application/mathml+xml', '.mmod': 'chemical/x-macromodel-input', '.mmr': 'image/vnd.fujixerox.edmics-mmr', '.mng': 'video/x-mng', '.moc': 'text/x-moc', '.mod': 'application/xml-dtd', '.model-inter': 'application/vnd.vd-study', '.mods': 'application/mods+xml', '.mol': 'chemical/x-mdl-molfile', '.mol2': 'application/vnd.sybyl.mol2', '.moml': 'model/vnd.moml+xml', '.moo': 'chemical/x-mopac-out', '.mop': 'chemical/x-mopac-input', '.mopcrt': 'chemical/x-mopac-input', '.mov': 'video/quicktime', '.movie': 'video/x-sgi-movie', '.mp1': 'audio/mpeg', '.mp2': 'audio/mpeg', '.mp21': 'application/mp21', '.mp3': 'audio/mpeg', '.mp4': 'video/mp4', '.mpa': 'video/mpeg', '.mpc': 'chemical/x-mopac-input', '.mpd': 'application/dash+xml', '.mpdd': 'application/dashdelta', '.mpe': 'video/mpeg', '.mpeg': 'video/mpeg', '.mpega': 'audio/mpeg', '.mpf': 'text/vnd.ms-mediapackage', '.mpg': 'video/mpeg', '.mpg4': 'video/mp4', '.mpga': 'audio/mpeg', '.mph': 'application/x-comsol', '.mpkg': 'application/vnd.apple.installer+xml', '.mpm': 'application/vnd.blueice.multipass', '.mpn': 'application/vnd.mophun.application', '.mpp': 'application/vnd.ms-project', '.mpt': 'application/vnd.ms-project', '.mpv': 'video/x-matroska', '.mpw': 'application/vnd.exstream-empower+zip', '.mpy': 'application/vnd.ibm.MiniPay', '.mqy': 'application/vnd.Mobius.MQY', '.mrc': 'application/marc', '.mrcx': 'application/marcxml+xml', '.ms': 'application/x-troff-ms', '.msa': 'application/vnd.msa-disk-image', '.msd': 'application/vnd.fdsn.mseed', '.mseed': 'application/vnd.fdsn.mseed', '.mseq': 'application/vnd.mseq', '.msf': 'application/vnd.epson.msf', '.msh': 'model/mesh', '.msi': 'application/x-msi', '.msl': 'application/vnd.Mobius.MSL', '.msm': 'model/vnd.gdl', '.msp': 'application/octet-stream', '.msty': 'application/vnd.muvee.style', '.msu': 'application/octet-stream', '.mtl': 'model/mtl', '.mts': 'model/vnd.mts', '.multitrack': 'audio/vnd.presonus.multitrack', '.mus': 'application/vnd.musician', '.musd': 'application/mmt-usd+xml', '.mvb': 'chemical/x-mopac-vib', '.mvt': 'application/vnd.mapbox-vector-tile', '.mwc': 'application/vnd.dpgraph', '.mwf': 'application/vnd.MFER', '.mxf': 'application/mxf', '.mxi': 'application/vnd.vd-study', '.mxl': 'application/vnd.recordare.musicxml', '.mxmf': 'audio/mobile-xmf', '.mxml': 'application/xv+xml', '.mxs': 'application/vnd.triscape.mxs', '.mxu': 'video/vnd.mpegurl', '.n3': 'text/n3', '.nb': 'application/vnd.wolfram.mathematica', '.nbp': 'application/vnd.wolfram.player', '.nc': 'application/x-netcdf', '.ndc': 'application/vnd.osa.netdeploy', '.ndl': 'application/vnd.lotus-notes', '.nds': 'application/vnd.nintendo.nitro.rom', '.nebul': 'application/vnd.nebumind.line', '.nef': 'image/x-nikon-nef', '.ngdat': 'application/vnd.nokia.n-gage.data', '.nim': 'video/vnd.nokia.interleaved-multimedia', '.nimn': 'application/vnd.nimn', '.nitf': 'application/vnd.nitf', '.nlu': 'application/vnd.neurolanguage.nlu', '.nml': 'application/vnd.enliven', '.nnd': 'application/vnd.noblenet-directory', '.nns': 'application/vnd.noblenet-sealer', '.nnw': 'application/vnd.noblenet-web', '.notebook': 'application/vnd.smart.notebook', '.nq': 'application/n-quads', '.ns2': 'application/vnd.lotus-notes', '.ns3': 'application/vnd.lotus-notes', '.ns4': 'application/vnd.lotus-notes', '.nsf': 'application/vnd.lotus-notes', '.nsg': 'application/vnd.lotus-notes', '.nsh': 'application/vnd.lotus-notes', '.nt': 'application/n-triples', '.ntf': 'application/vnd.lotus-notes', '.numbers': 'application/vnd.apple.numbers', '.nwc': 'application/x-nwc', '.nws': 'message/rfc822', '.o': 'application/x-object', '.oa2': 'application/vnd.fujitsu.oasys2', '.oa3': 'application/vnd.fujitsu.oasys3', '.oas': 'application/vnd.fujitsu.oasys', '.obg': 'application/vnd.openblox.game-binary', '.obgx': 'application/vnd.openblox.game+xml', '.obj': 'model/obj', '.oda': 'application/ODA', '.odb': 'application/vnd.oasis.opendocument.base', '.odc': 'application/vnd.oasis.opendocument.chart', '.odd': 'application/tei+xml', '.odf': 'application/vnd.oasis.opendocument.formula', '.odg': 'application/vnd.oasis.opendocument.graphics', '.odi': 'application/vnd.oasis.opendocument.image', '.odm': 'application/vnd.oasis.opendocument.text-master', '.odp': 'application/vnd.oasis.opendocument.presentation', '.ods': 'application/vnd.oasis.opendocument.spreadsheet', '.odt': 'application/vnd.oasis.opendocument.text', '.odx': 'application/ODX', '.oeb': 'application/vnd.openeye.oeb', '.oga': 'audio/ogg', '.ogex': 'model/vnd.opengex', '.ogg': 'audio/ogg', '.ogv': 'video/ogg', '.ogx': 'application/ogg', '.old': 'application/x-trash', '.omg': 'audio/ATRAC3', '.one': 'application/onenote', '.onepkg': 'application/onenote', '.onetmp': 'application/onenote', '.onetoc2': 'application/onenote', '.opf': 'application/oebps-package+xml', '.oprc': 'application/vnd.palm', '.opus': 'audio/ogg', '.or2': 'application/vnd.lotus-organizer', '.or3': 'application/vnd.lotus-organizer', '.orc': 'audio/csound', '.orf': 'image/x-olympus-orf', '.org': 'application/vnd.lotus-organizer', '.orq': 'application/ocsp-request', '.ors': 'application/ocsp-response', '.osf': 'application/vnd.yamaha.openscoreformat', '.osm': 'application/vnd.openstreetmap.data+xml', '.ota': 'application/vnd.android.ota', '.otc': 'application/vnd.oasis.opendocument.chart-template', '.otf': 'font/otf', '.otg': 'application/vnd.oasis.opendocument.graphics-template', '.oth': 'application/vnd.oasis.opendocument.text-web', '.oti': 'application/vnd.oasis.opendocument.image-template', '.otp': 'application/vnd.oasis.opendocument.presentation-template', '.ots': 'application/vnd.oasis.opendocument.spreadsheet-template', '.ott': 'application/vnd.oasis.opendocument.text-template', '.ovl': 'application/vnd.afpc.modca-overlay', '.oxlicg': 'application/vnd.oxli.countgraph', '.oxps': 'application/oxps', '.oxt': 'application/vnd.openofficeorg.extension', '.oz': 'text/x-oz', '.oza': 'application/x-oz-application', '.p': 'text/x-pascal', '.p10': 'application/pkcs10', '.p12': 'application/pkcs12', '.p21': 'application/p21', '.p2p': 'application/vnd.wfa.p2p', '.p7c': 'application/pkcs7-mime', '.p7m': 'application/pkcs7-mime', '.p7r': 'application/x-pkcs7-certreqresp', '.p7s': 'application/pkcs7-signature', '.p7z': 'application/pkcs7-mime', '.p8': 'application/pkcs8', '.p8e': 'application/pkcs8-encrypted', '.pac': 'application/x-ns-proxy-autoconfig', '.package': 'application/vnd.autopackage', '.pages': 'application/vnd.apple.pages', '.pas': 'text/x-pascal', '.pat': 'image/x-coreldrawpattern', '.patch': 'text/plain', '.paw': 'application/vnd.pawaafile', '.pbd': 'application/vnd.powerbuilder6', '.pbm': 'image/x-portable-bitmap', '.pcap': 'application/vnd.tcpdump.pcap', '.pcf': 'application/x-font-pcf', '.pcf.Z': 'application/x-font-pcf', '.pcl': 'application/vnd.hp-PCL', '.pcx': 'image/vnd.zbrush.pcx', '.pdb': 'chemical/x-pdb', '.pdf': 'application/pdf', '.pdx': 'application/PDX', '.pem': 'application/pem-certificate-chain', '.pfa': 'application/x-font', '.pfb': 'application/x-font', '.pfr': 'application/font-tdpfr', '.pfx': 'application/pkcs12', '.pgb': 'image/vnd.globalgraphics.pgb', '.pgm': 'image/x-portable-graymap', '.pgn': 'application/vnd.chess-pgn', '.pgp': 'application/pgp-encrypted', '.pil': 'application/vnd.piaccess.application-licence', '.pk': 'application/x-tex-pk', '.pkd': 'application/vnd.hbci', '.pkg': 'application/vnd.apple.installer+xml', '.pki': 'application/pkixcmp', '.pkipath': 'application/pkix-pkipath', '.pl': 'text/x-perl', '.plb': 'application/vnd.3gpp.pic-bw-large', '.plc': 'application/vnd.Mobius.PLC', '.plf': 'application/vnd.pocketlearn', '.plj': 'audio/vnd.everad.plj', '.plp': 'application/vnd.panoply', '.pls': 'audio/x-scpls', '.pm': 'text/x-perl', '.pml': 'application/vnd.ctc-posml', '.png': 'image/png', '.pnm': 'image/x-portable-anymap', '.portpkg': 'application/vnd.macports.portpkg', '.pot': 'text/plain', '.potm': 'application/vnd.ms-powerpoint.template.macroEnabled.12', '.potx': 'application/vnd.openxmlformats-officedocument.presentationml.template', '.ppa': 'application/vnd.ms-powerpoint', '.ppam': 'application/vnd.ms-powerpoint.addin.macroEnabled.12', '.ppd': 'application/vnd.cups-ppd', '.ppkg': 'application/vnd.xmpie.ppkg', '.ppm': 'image/x-portable-pixmap', '.pps': 'application/vnd.ms-powerpoint', '.ppsm': 'application/vnd.ms-powerpoint.slideshow.macroEnabled.12', '.ppsx': 'application/vnd.openxmlformats-officedocument.presentationml.slideshow', '.ppt': 'application/vnd.ms-powerpoint', '.pptm': 'application/vnd.ms-powerpoint.presentation.macroEnabled.12', '.ppttc': 'application/vnd.think-cell.ppttc+json', '.pptx': 'application/vnd.openxmlformats-officedocument.presentationml.presentation', '.pqa': 'application/vnd.palm', '.prc': 'model/prc', '.pre': 'application/vnd.lotus-freelance', '.preminet': 'application/vnd.preminet', '.prf': 'application/pics-rules', '.provn': 'text/provenance-notation', '.provx': 'application/provenance+xml', '.prt': 'chemical/x-ncbi-asn1-ascii', '.prz': 'application/vnd.lotus-freelance', '.ps': 'application/postscript', '.psb': 'application/vnd.3gpp.pic-bw-small', '.psd': 'image/vnd.adobe.photoshop', '.pseg3820': 'application/vnd.afpc.modca', '.psfs': 'application/vnd.psfs', '.psg': 'application/vnd.afpc.modca-pagesegment', '.psid': 'audio/prs.sid', '.pskcxml': 'application/pskc+xml', '.pt': 'application/vnd.snesdev-page-table', '.pti': 'image/prs.pti', '.ptid': 'application/vnd.pvi.ptid1', '.ptrom': 'application/vnd.snesdev-page-table', '.pub': 'application/vnd.exstream-package', '.pvb': 'application/vnd.3gpp.pic-bw-var', '.pwn': 'application/vnd.3M.Post-it-Notes', '.pwz': 'application/vnd.ms-powerpoint', '.py': 'text/x-python', '.pya': 'audio/vnd.ms-playready.media.pya', '.pyc': 'application/x-python-code', '.pyo': 'application/x-python-code', '.pyox': 'model/vnd.pytha.pyox', '.pyv': 'video/vnd.ms-playready.media.pyv', '.qam': 'application/vnd.epson.quickanime', '.qbo': 'application/vnd.intu.qbo', '.qca': 'application/vnd.ericsson.quickcall', '.qcall': 'application/vnd.ericsson.quickcall', '.qcp': 'audio/EVRC-QCP', '.qfx': 'application/vnd.intu.qfx', '.qgs': 'application/x-qgis', '.qps': 'application/vnd.publishare-delta-tree', '.qt': 'video/quicktime', '.qtl': 'application/x-quicktimeplayer', '.quiz': 'application/vnd.quobject-quoxdocument', '.quox': 'application/vnd.quobject-quoxdocument', '.qvd': 'application/vnd.theqvd', '.qwd': 'application/vnd.Quark.QuarkXPress', '.qwt': 'application/vnd.Quark.QuarkXPress', '.qxb': 'application/vnd.Quark.QuarkXPress', '.qxd': 'application/vnd.Quark.QuarkXPress', '.qxl': 'application/vnd.Quark.QuarkXPress', '.qxt': 'application/vnd.Quark.QuarkXPress', '.ra': 'audio/x-pn-realaudio', '.ram': 'audio/x-pn-realaudio', '.rapd': 'application/route-apd+xml', '.rar': 'application/vnd.rar', '.ras': 'image/x-cmu-raster', '.rb': 'application/x-ruby', '.rcprofile': 'application/vnd.ipunplugged.rcprofile', '.rct': 'application/prs.nprend', '.rd': 'application/x-gavo-descriptor+xml', '.rdf': 'application/rdf+xml', '.rdf-crypt': 'application/prs.rdf-xml-crypt', '.rdp': 'application/x-rdp', '.rdz': 'application/vnd.data-vision.rdz', '.relo': 'application/p2p-overlay+xml', '.reload': 'application/vnd.resilient.logic', '.rep': 'application/vnd.businessobjects', '.request': 'application/vnd.nervana', '.rfcxml': 'application/rfc+xml', '.rgb': 'image/x-rgb', '.rgbe': 'image/vnd.radiance', '.rif': 'application/reginfo+xml', '.rip': 'audio/vnd.rip', '.rl': 'application/resource-lists+xml', '.rlc': 'image/vnd.fujixerox.edmics-rlc', '.rld': 'application/resource-lists-diff+xml', '.rlm': 'application/vnd.resilient.logic', '.rm': 'audio/x-pn-realaudio', '.rms': 'application/vnd.jcp.javame.midlet-rms', '.rnc': 'application/relax-ng-compact-syntax', '.rnd': 'application/prs.nprend', '.roa': 'application/rpki-roa', '.roff': 'text/troff', '.ros': 'chemical/x-rosdal', '.rp9': 'application/vnd.cloanto.rp9', '.rpm': 'application/x-redhat-package-manager', '.rpss': 'application/vnd.nokia.radio-presets', '.rpst': 'application/vnd.nokia.radio-preset', '.rq': 'application/sparql-query', '.rs': 'application/rls-services+xml', '.rsat': 'application/atsc-rsat+xml', '.rsheet': 'application/urc-ressheet+xml', '.rsm': 'model/vnd.gdl', '.rss': 'application/x-rss+xml', '.rst': 'text/prs.fallenstein.rst', '.rtf': 'application/rtf', '.rtx': 'text/richtext', '.rusd': 'application/route-usd+xml', '.rxn': 'chemical/x-mdl-rxnfile', '.rxt': 'application/vnd.medicalholodeck.recordxr', '.s11': 'video/vnd.sealed.mpeg1', '.s14': 'video/vnd.sealed.mpeg4', '.s1a': 'application/vnd.sealedmedia.softseal.pdf', '.s1e': 'application/vnd.sealed.xls', '.s1g': 'image/vnd.sealedmedia.softseal.gif', '.s1h': 'application/vnd.sealedmedia.softseal.html', '.s1j': 'image/vnd.sealedmedia.softseal.jpg', '.s1m': 'audio/vnd.sealedmedia.softseal.mpeg', '.s1n': 'image/vnd.sealed.png', '.s1p': 'application/vnd.sealed.ppt', '.s1q': 'video/vnd.sealedmedia.softseal.mov', '.s1w': 'application/vnd.sealed.doc', '.s3df': 'application/vnd.sealed.3df', '.sac': 'application/tamp-sequence-adjust-confirm', '.saf': 'application/vnd.yamaha.smaf-audio', '.sam': 'application/vnd.lotus-wordpro', '.sarif': 'application/sarif+json', '.sarif-external-properties': 'application/sarif-external-properties+json', '.sarif-external-properties.json': 'application/sarif-external-properties+json', '.sarif.json': 'application/sarif+json', '.sc': 'application/vnd.ibm.secure-container', '.scala': 'text/x-scala', '.scd': 'application/vnd.scribus', '.sce': 'application/x-scilab', '.sci': 'application/x-scilab', '.scim': 'application/scim+json', '.scl': 'application/vnd.sycle+xml', '.scld': 'application/vnd.doremir.scorecloud-binary-document', '.scm': 'application/vnd.lotus-screencam', '.sco': 'audio/csound', '.scq': 'application/scvp-cv-request', '.scr': 'application/x-silverlight', '.scs': 'application/scvp-cv-response', '.scsf': 'application/vnd.sealed.csf', '.sd': 'chemical/x-mdl-sdfile', '.sd2': 'audio/x-sd2', '.sda': 'application/vnd.stardivision.draw', '.sdc': 'application/vnd.stardivision.calc', '.sdd': 'application/vnd.stardivision.impress', '.sdf': 'chemical/x-mdl-sdfile', '.sdkd': 'application/vnd.solent.sdkm+xml', '.sdkm': 'application/vnd.solent.sdkm+xml', '.sdo': 'application/vnd.sealed.doc', '.sdoc': 'application/vnd.sealed.doc', '.sdp': 'application/sdp', '.sds': 'application/vnd.stardivision.chart', '.sdw': 'application/vnd.stardivision.writer', '.see': 'application/vnd.seemail', '.seed': 'application/vnd.fdsn.seed', '.sem': 'application/vnd.sealed.eml', '.sema': 'application/vnd.sema', '.semd': 'application/vnd.semd', '.semf': 'application/vnd.semf', '.seml': 'application/vnd.sealed.eml', '.senml': 'application/senml+json', '.senml-etchc': 'application/senml-etch+cbor', '.senml-etchj': 'application/senml-etch+json', '.senmlc': 'application/senml+cbor', '.senmle': 'application/senml-exi', '.senmlx': 'application/senml+xml', '.sensml': 'application/sensml+json', '.sensmlc': 'application/sensml+cbor', '.sensmle': 'application/sensml-exi', '.sensmlx': 'application/sensml+xml', '.ser': 'application/java-serialized-object', '.sfc': 'application/vnd.nintendo.snes.rom', '.sfd': 'application/vnd.font-fontforge-sfd', '.sfd-hdstx': 'application/vnd.hydrostatix.sof-data', '.sfs': 'application/vnd.spotfire.sfs', '.sfv': 'text/x-sfv', '.sgf': 'application/x-go-sgf', '.sgi': 'image/vnd.sealedmedia.softseal.gif', '.sgif': 'image/vnd.sealedmedia.softseal.gif', '.sgl': 'application/vnd.stardivision.writer-global', '.sgm': 'text/SGML', '.sgml': 'text/SGML', '.sh': 'text/x-sh', '.shaclc': 'text/shaclc', '.shar': 'application/x-shar', '.shc': 'text/shaclc', '.shex': 'text/shex', '.shf': 'application/shf+xml', '.shp': 'application/x-qgis', '.shtml': 'text/nevow-template', '.shx': 'application/x-qgis', '.si': 'text/vnd.wap.si', '.sic': 'application/vnd.wap.sic', '.sid': 'audio/prs.sid', '.sieve': 'application/sieve', '.sig': 'application/pgp-signature', '.sik': 'application/x-trash', '.silo': 'model/mesh', '.sis': 'application/vnd.symbian.install', '.sit': 'application/x-stuffit', '.sitx': 'application/x-stuffit', '.siv': 'application/sieve', '.sjp': 'image/vnd.sealedmedia.softseal.jpg', '.sjpg': 'image/vnd.sealedmedia.softseal.jpg', '.skd': 'application/vnd.koan', '.skm': 'application/vnd.koan', '.skp': 'application/vnd.koan', '.skt': 'application/vnd.koan', '.skyglow': 'text/plain', '.sl': 'text/vnd.wap.sl', '.sla': 'application/vnd.scribus', '.slaz': 'application/vnd.scribus', '.slc': 'application/vnd.wap.slc', '.sldm': 'application/vnd.ms-powerpoint.slide.macroEnabled.12', '.sldx': 'application/vnd.openxmlformats-officedocument.presentationml.slide', '.sls': 'application/route-s-tsid+xml', '.slt': 'application/vnd.epson.salt', '.sm': 'application/vnd.stepmania.stepchart', '.smc': 'application/vnd.nintendo.snes.rom', '.smf': 'application/vnd.stardivision.math', '.smh': 'application/vnd.sealed.mht', '.smht': 'application/vnd.sealed.mht', '.smi': 'application/smil+xml', '.smil': 'application/smil+xml', '.smk': 'video/vnd.radgamettools.smacker', '.sml': 'application/smil+xml', '.smo': 'video/vnd.sealedmedia.softseal.mov', '.smov': 'video/vnd.sealedmedia.softseal.mov', '.smp': 'audio/vnd.sealedmedia.softseal.mpeg', '.smp3': 'audio/vnd.sealedmedia.softseal.mpeg', '.smpg': 'video/vnd.sealed.mpeg1', '.sms': 'application/vnd.3gpp2.sms', '.smv': 'audio/SMV', '.smzip': 'application/vnd.stepmania.package', '.snd': 'audio/basic', '.so': 'application/octet-stream', '.soa': 'text/dns', '.soc': 'application/sgml-open-catalog', '.sofa': 'audio/sofa', '.sos': 'text/vnd.sosi', '.spc': 'chemical/x-galactic-spc', '.spd': 'application/vnd.sealedmedia.softseal.pdf', '.spdf': 'application/vnd.sealedmedia.softseal.pdf', '.spdx': 'text/spdx', '.spdx.json': 'application/spdx+json', '.spf': 'application/vnd.yamaha.smaf-phrase', '.spl': 'application/futuresplash', '.spn': 'image/vnd.sealed.png', '.spng': 'image/vnd.sealed.png', '.spo': 'text/vnd.in3d.spot', '.spot': 'text/vnd.in3d.spot', '.spp': 'application/scvp-vp-response', '.sppt': 'application/vnd.sealed.ppt', '.spq': 'application/scvp-vp-request', '.spx': 'audio/ogg', '.sql': 'application/sql', '.sqlite': 'application/vnd.sqlite3', '.sqlite3': 'application/vnd.sqlite3', '.sr': 'application/vnd.sigrok.session', '.src': 'application/x-wais-source', '.srt': 'text/plain', '.sru': 'application/sru+xml', '.srx': 'application/sparql-results+xml', '.sse': 'application/vnd.kodak-descriptor', '.ssf': 'application/vnd.epson.ssf', '.ssml': 'application/ssml+xml', '.ssv': 'application/vnd.shade-save-file', '.ssvc': 'application/vnd.crypto-shade-file', '.ssw': 'video/vnd.sealed.swf', '.sswf': 'video/vnd.sealed.swf', '.st': 'application/vnd.sailingtracker.track', '.stc': 'application/vnd.sun.xml.calc.template', '.std': 'application/vnd.sun.xml.draw.template', '.step': 'model/step', '.stf': 'application/vnd.wt.stf', '.sti': 'application/vnd.sun.xml.impress.template', '.stif': 'application/vnd.sealed.tiff', '.stix': 'application/stix+json', '.stk': 'application/hyperstudio', '.stl': 'model/stl', '.stml': 'application/vnd.sealedmedia.softseal.html', '.stp': 'model/step', '.stpnc': 'application/p21', '.stpx': 'model/step+xml', '.stpxz': 'model/step-xml+zip', '.stpz': 'model/step+zip', '.str': 'application/vnd.pg.format', '.study-inter': 'application/vnd.vd-study', '.stw': 'application/vnd.sun.xml.writer.template', '.sty': 'text/x-tex', '.sus': 'application/vnd.sus-calendar', '.susp': 'application/vnd.sus-calendar', '.sv4cpio': 'application/x-sv4cpio', '.sv4crc': 'application/x-sv4crc', '.svc': 'application/vnd.dvb.service', '.svg': 'image/svg+xml', '.svgz': 'image/svg+xml', '.sw': 'chemical/x-swissprot', '.swf': 'application/x-shockwave-flash', '.swi': 'application/vnd.aristanetworks.swi', '.swidtag': 'application/swid+xml', '.sxc': 'application/vnd.sun.xml.calc', '.sxd': 'application/vnd.sun.xml.draw', '.sxg': 'application/vnd.sun.xml.writer.global', '.sxi': 'application/vnd.sun.xml.impress', '.sxl': 'application/vnd.sealed.xls', '.sxls': 'application/vnd.sealed.xls', '.sxm': 'application/vnd.sun.xml.math', '.sxw': 'application/vnd.sun.xml.writer', '.sy2': 'application/vnd.sybyl.mol2', '.syft.json': 'application/vnd.syft+json', '.t': 'text/troff', '.tag': 'text/prs.lines.tag', '.taglet': 'application/vnd.mynfc', '.tam': 'application/vnd.onepager', '.tamp': 'application/vnd.onepagertamp', '.tamx': 'application/vnd.onepagertamx', '.tao': 'application/vnd.tao.intent-module-archive', '.tap': 'image/vnd.tencent.tap', '.tar': 'application/x-tar', '.tat': 'application/vnd.onepagertat', '.tatp': 'application/vnd.onepagertatp', '.tatx': 'application/vnd.onepagertatx', '.tau': 'application/tamp-apex-update', '.taz': 'application/x-gtar-compressed', '.tcap': 'application/vnd.3gpp2.tcap', '.tcl': 'text/x-tcl', '.tcu': 'application/tamp-community-update', '.td': 'application/urc-targetdesc+xml', '.teacher': 'application/vnd.smart.teacher', '.tei': 'application/tei+xml', '.teiCorpus': 'application/tei+xml', '.ter': 'application/tamp-error', '.tex': 'text/x-tex', '.texi': 'application/x-texinfo', '.texinfo': 'application/x-texinfo', '.text': 'text/plain', '.tfi': 'application/thraud+xml', '.tfx': 'image/tiff-fx', '.tgf': 'chemical/x-mdl-tgf', '.tgz': 'application/x-gtar-compressed', '.thmx': 'application/vnd.ms-officetheme', '.tif': 'image/tiff', '.tiff': 'image/tiff', '.tk': 'text/x-tcl', '.tlclient': 'application/vnd.cendio.thinlinc.clientconf', '.tm': 'text/texmacs', '.tm.json': 'application/tm+json', '.tm.jsonld': 'application/tm+json', '.tmo': 'application/vnd.tmobile-livetv', '.tnef': 'application/vnd.ms-tnef', '.tnf': 'application/vnd.ms-tnef', '.torrent': 'application/x-bittorrent', '.tpl': 'application/vnd.groove-tool-template', '.tpt': 'application/vnd.trid.tpt', '.tr': 'text/troff', '.tra': 'application/vnd.trueapp', '.tree': 'application/vnd.rainstor.data', '.trig': 'application/trig', '.ts': 'text/vnd.trolltech.linguist', '.tsa': 'application/tamp-sequence-adjust', '.tsd': 'application/timestamped-data', '.tsp': 'application/dsptype', '.tsq': 'application/timestamp-query', '.tsr': 'application/timestamp-reply', '.tst': 'application/vnd.etsi.timestamp-token', '.tsv': 'text/tab-separated-values', '.ttc': 'font/collection', '.ttf': 'font/ttf', '.ttl': 'text/turtle', '.ttml': 'application/ttml+xml', '.tuc': 'application/tamp-update-confirm', '.tur': 'application/tamp-update', '.twd': 'application/vnd.SimTech-MindMapper', '.twds': 'application/vnd.SimTech-MindMapper', '.txd': 'application/vnd.genomatix.tuxedo', '.txf': 'application/vnd.Mobius.TXF', '.txt': 'text/plain', '.u3d': 'model/u3d', '.u8dsn': 'message/global-delivery-status', '.u8hdr': 'message/global-headers', '.u8mdn': 'message/global-disposition-notification', '.u8msg': 'message/global', '.udeb': 'application/vnd.debian.binary-package', '.ufd': 'application/vnd.ufdl', '.ufdl': 'application/vnd.ufdl', '.uis': 'application/urc-uisocketdesc+xml', '.umj': 'application/vnd.umajin', '.unityweb': 'application/vnd.unity', '.uo': 'application/vnd.uoml+xml', '.uoml': 'application/vnd.uoml+xml', '.upa': 'application/vnd.hbci', '.uri': 'text/uri-list', '.urim': 'application/vnd.uri-map', '.urimap': 'application/vnd.uri-map', '.uris': 'text/uri-list', '.usda': 'model/vnd.usda', '.usdz': 'model/vnd.usdz+zip', '.ustar': 'application/x-ustar', '.utz': 'application/vnd.uiq.theme', '.uva': 'audio/vnd.dece.audio', '.uvd': 'application/vnd.dece.data', '.uvf': 'application/vnd.dece.data', '.uvg': 'image/vnd.dece.graphic', '.uvh': 'video/vnd.dece.hd', '.uvi': 'image/vnd.dece.graphic', '.uvm': 'video/vnd.dece.mobile', '.uvp': 'video/vnd.dece.pd', '.uvs': 'video/vnd.dece.sd', '.uvt': 'application/vnd.dece.ttml+xml', '.uvu': 'video/vnd.dece.mp4', '.uvv': 'video/vnd.dece.video', '.uvva': 'audio/vnd.dece.audio', '.uvvd': 'application/vnd.dece.data', '.uvvf': 'application/vnd.dece.data', '.uvvg': 'image/vnd.dece.graphic', '.uvvh': 'video/vnd.dece.hd', '.uvvi': 'image/vnd.dece.graphic', '.uvvm': 'video/vnd.dece.mobile', '.uvvp': 'video/vnd.dece.pd', '.uvvs': 'video/vnd.dece.sd', '.uvvt': 'application/vnd.dece.ttml+xml', '.uvvu': 'video/vnd.dece.mp4', '.uvvv': 'video/vnd.dece.video', '.uvvx': 'application/vnd.dece.unspecified', '.uvvz': 'application/vnd.dece.zip', '.uvx': 'application/vnd.dece.unspecified', '.uvz': 'application/vnd.dece.zip', '.val': 'chemical/x-ncbi-asn1-binary', '.vbk': 'audio/vnd.nortel.vbk', '.vbox': 'application/vnd.previewsystems.box', '.vcard': 'text/vcard', '.vcd': 'application/x-cdlink', '.vcf': 'text/vcard', '.vcg': 'application/vnd.groove-vcard', '.vcj': 'application/voucher-cms+json', '.vcs': 'text/x-vcalendar', '.vcx': 'application/vnd.vcx', '.vds': 'model/vnd.sap.vds', '.vew': 'application/vnd.lotus-approach', '.vfr': 'application/vnd.tml', '.viaframe': 'application/vnd.tml', '.vis': 'application/vnd.visionary', '.viv': 'video/vnd.vivo', '.vmd': 'chemical/x-vmd', '.vms': 'chemical/x-vamas-iso14976', '.vmt': 'application/vnd.valve.source.material', '.vot': 'application/x-votable+xml', '.vpm': 'multipart/voice-message', '.vrm': 'model/vrml', '.vrml': 'model/vrml', '.vsc': 'application/vnd.vidsoft.vidconference', '.vsd': 'application/vnd.visio', '.vsf': 'application/vnd.vsf', '.vss': 'application/vnd.visio', '.vst': 'application/vnd.visio', '.vsw': 'application/vnd.visio', '.vtf': 'image/vnd.valve.source.texture', '.vtnstd': 'application/vnd.veritone.aion+json', '.vtt': 'text/vtt', '.vtu': 'model/vnd.vtu', '.vwx': 'application/vnd.vectorworks', '.vxml': 'application/voicexml+xml', '.wad': 'application/x-doom', '.wadl': 'application/vnd.sun.wadl+xml', '.wafl': 'application/vnd.wasmflow.wafl', '.wasm': 'application/wasm', '.wav': 'audio/x-wav', '.wax': 'audio/x-ms-wax', '.wbmp': 'image/vnd.wap.wbmp', '.wbs': 'application/vnd.criticaltools.wbs+xml', '.wbxml': 'application/vnd.wap.wbxml', '.wcm': 'application/vnd.ms-works', '.wdb': 'application/vnd.ms-works', '.webm': 'video/webm', '.webmanifest': 'application/manifest+json', '.webp': 'image/webp', '.wg': 'application/vnd.pmi.widget', '.wgsl': 'text/wgsl', '.wgt': 'application/widget', '.wif': 'application/watcherinfo+xml', '.win': 'model/vnd.gdl', '.wiz': 'application/msword', '.wk': 'application/x-123', '.wk1': 'application/vnd.lotus-1-2-3', '.wk3': 'application/vnd.lotus-1-2-3', '.wk4': 'application/vnd.lotus-1-2-3', '.wks': 'application/vnd.ms-works', '.wlnk': 'application/link-format', '.wm': 'video/x-ms-wm', '.wma': 'audio/x-ms-wma', '.wmc': 'application/vnd.wmc', '.wmd': 'application/x-ms-wmd', '.wmf': 'image/wmf', '.wml': 'text/vnd.wap.wml', '.wmlc': 'application/vnd.wap.wmlc', '.wmls': 'text/vnd.wap.wmlscript', '.wmlsc': 'application/vnd.wap.wmlscriptc', '.wmv': 'video/x-ms-wmv', '.wmx': 'video/x-ms-wmx', '.wmz': 'application/x-ms-wmz', '.woff': 'font/woff', '.woff2': 'font/woff2', '.wpd': 'application/vnd.wordperfect', '.wpl': 'application/vnd.ms-wpl', '.wps': 'application/vnd.ms-works', '.wqd': 'application/vnd.wqd', '.wrl': 'model/vrml', '.wsc': 'application/vnd.wfa.wsc', '.wsdl': 'application/wsdl+xml', '.wspolicy': 'application/wspolicy+xml', '.wtb': 'application/vnd.webturbo', '.wv': 'application/vnd.wv.csp+wbxml', '.wvx': 'video/x-ms-wvx', '.wz': 'application/x-wingz', '.x3d': 'model/x3d+xml', '.x3db': 'model/x3d+fastinfoset', '.x3dv': 'model/x3d-vrml', '.x3dvz': 'model/x3d-vrml', '.x3dz': 'model/x3d+xml', '.x_b': 'model/vnd.parasolid.transmit.binary', '.x_t': 'model/vnd.parasolid.transmit.text', '.xar': 'application/vnd.xara', '.xav': 'application/xcap-att+xml', '.xbd': 'application/vnd.fujixerox.docuworks.binder', '.xbm': 'image/x-xbitmap', '.xca': 'application/xcap-caps+xml', '.xcf': 'image/x-xcf', '.xcos': 'application/x-scilab-xcos', '.xcs': 'application/calendar+xml', '.xct': 'application/vnd.fujixerox.docuworks.container', '.xdd': 'application/bacnet-xdd+zip', '.xdf': 'application/xcap-diff+xml', '.xdm': 'application/vnd.syncml.dm+xml', '.xdp': 'application/vnd.adobe.xdp+xml', '.xdssc': 'application/dssc+xml', '.xdw': 'application/vnd.fujixerox.docuworks', '.xel': 'application/xcap-el+xml', '.xer': 'application/xcap-error+xml', '.xfd': 'application/vnd.xfdl', '.xfdf': 'application/xfdf', '.xfdl': 'application/vnd.xfdl', '.xhe': 'audio/usac', '.xht': 'application/xhtml+xml', '.xhtm': 'application/xhtml+xml', '.xhtml': 'application/xhtml+xml', '.xhvml': 'application/xv+xml', '.xif': 'image/vnd.xiff', '.xla': 'application/vnd.ms-excel', '.xlam': 'application/vnd.ms-excel.addin.macroEnabled.12', '.xlb': 'application/vnd.ms-excel', '.xlc': 'application/vnd.ms-excel', '.xlf': 'application/xliff+xml', '.xlim': 'application/vnd.xmpie.xlim', '.xlm': 'application/vnd.ms-excel', '.xls': 'application/vnd.ms-excel', '.xlsb': 'application/vnd.ms-excel.sheet.binary.macroEnabled.12', '.xlsm': 'application/vnd.ms-excel.sheet.macroEnabled.12', '.xlsx': 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet', '.xlt': 'application/vnd.ms-excel', '.xltm': 'application/vnd.ms-excel.template.macroEnabled.12', '.xltx': 'application/vnd.openxmlformats-officedocument.spreadsheetml.template', '.xlw': 'application/vnd.ms-excel', '.xml': 'application/xml', '.xmls': 'application/dskpp+xml', '.xmt_bin': 'model/vnd.parasolid.transmit.binary', '.xmt_txt': 'model/vnd.parasolid.transmit.text', '.xns': 'application/xcap-ns+xml', '.xo': 'application/vnd.olpc-sugar', '.xodp': 'application/vnd.collabio.xodocuments.presentation', '.xods': 'application/vnd.collabio.xodocuments.spreadsheet', '.xodt': 'application/vnd.collabio.xodocuments.document', '.xop': 'application/xop+xml', '.xotp': 'application/vnd.collabio.xodocuments.presentation-template', '.xots': 'application/vnd.collabio.xodocuments.spreadsheet-template', '.xott': 'application/vnd.collabio.xodocuments.document-template', '.xpak': 'application/vnd.gentoo.xpak', '.xpdl': 'application/xml', '.xpi': 'application/x-xpinstall', '.xpm': 'image/x-xpixmap', '.xpr': 'application/vnd.is-xpr', '.xps': 'application/vnd.ms-xpsdocument', '.xpw': 'application/vnd.intercon.formnet', '.xpx': 'application/vnd.intercon.formnet', '.xsf': 'application/prs.xsf+xml', '.xsl': 'application/xslt+xml', '.xslt': 'application/xslt+xml', '.xsm': 'application/vnd.syncml+xml', '.xspf': 'application/xspf+xml', '.xtel': 'chemical/x-xtel', '.xul': 'application/vnd.mozilla.xul+xml', '.xvm': 'application/xv+xml', '.xvml': 'application/xv+xml', '.xwd': 'image/x-xwindowdump', '.xyz': 'chemical/x-xyz', '.xyze': 'image/vnd.radiance', '.xz': 'application/x-xz', '.yang': 'application/yang', '.yin': 'application/yin+xml', '.yme': 'application/vnd.yaoweme', '.yt': 'video/vnd.youtube.yt', '.zaz': 'application/vnd.zzazz.deck+xml', '.zfc': 'application/vnd.filmit.zfc', '.zfo': 'application/vnd.software602.filler.form-xml-zip', '.zip': 'application/zip', '.zir': 'application/vnd.zul', '.zirz': 'application/vnd.zul', '.zmm': 'application/vnd.HandHeld-Entertainment+xml', '.zmt': 'chemical/x-mopac-input', '.zone': 'text/dns', '.zst': 'application/zstd', '.~': 'application/x-trash'}, contentEncodings={'.bz2': 'bzip2', '.gz': 'gzip'}, defaultType='text/html')[source]

Bases: DirectoryLister

a directory listing – we only have this here because some versions of t.w returned unicode strings here.

render(request)[source]

Render a listing of the content of C{self.path}.

class gavo.web.ifpages.GavoJquery[source]

Bases: Resource

synthesises a query-gavo.js from Debian packages.

INSTALL_ROOT = '/usr/share/javascript/'
PARTS = ['jquery/jquery.js', <_io.StringIO object>, 'jquery-ui/ui/widget.js', 'jquery-ui/ui/position.js', 'jquery-ui/ui/data.js', 'jquery-ui/ui/disable-selection.js', 'jquery-ui/ui/focusable.js', 'jquery-ui/ui/form-reset-mixin.js', 'jquery-ui/ui/jquery-1-7.js', 'jquery-ui/ui/keycode.js', 'jquery-ui/ui/labels.js', 'jquery-ui/ui/scroll-parent.js', 'jquery-ui/ui/tabbable.js', 'jquery-ui/ui/unique-id.js', 'jquery-ui/ui/widgets/mouse.js', <_io.StringIO object>, 'jquery-ui/ui/widgets/draggable.js', 'jquery-ui/ui/widgets/resizable.js', 'jquery-ui/ui/safe-active-element.js', 'jquery-ui/ui/safe-blur.js', <_io.StringIO object>]
render(request)[source]

Render a given resource. See L{IResource}’s render method.

I delegate to methods of self with the form ‘render_METHOD’ where METHOD is the HTTP that was used to make the request. Examples: render_GET, render_HEAD, render_POST, and so on. Generally you should implement those methods instead of overriding this one.

render_METHOD methods are expected to return a byte string which will be the rendered page, unless the return value is C{server.NOT_DONE_YET}, in which case it is this class’s responsibility to write the results using C{request.write(data)} and then call C{request.finish()}.

Old code that overrides render() directly is likewise expected to return a byte string or NOT_DONE_YET.

@see: L{IResource.render}

class gavo.web.ifpages.LoginPage[source]

Bases: TemplatedPage, GavoRenderMixin

a page that logs people in or out.

You should usually give a nextURL parameter in the context, the page the user is returned to after login.

If the user is already authenticated, this will do a logout (by sending a 403).

data_loggedUser(request, tag)[source]
iflogged(request, tag)[source]
ifnotlogged(request, tag)[source]
loader = <XMLFile of '/home/msdemlei/gavo/trunk/gavo/resources/templates/loginout.html'>
nextURL(request, tag)[source]
render(request)[source]

Render a given resource. See L{IResource}’s render method.

I delegate to methods of self with the form ‘render_METHOD’ where METHOD is the HTTP that was used to make the request. Examples: render_GET, render_HEAD, render_POST, and so on. Generally you should implement those methods instead of overriding this one.

render_METHOD methods are expected to return a byte string which will be the rendered page, unless the return value is C{server.NOT_DONE_YET}, in which case it is this class’s responsibility to write the results using C{request.write(data)} and then call C{request.finish()}.

Old code that overrides render() directly is likewise expected to return a byte string or NOT_DONE_YET.

@see: L{IResource.render}

class gavo.web.ifpages.RobotsTxt[source]

Bases: Resource

A page combining some built-in robots.txt material with etc/robots.txt if it exists.

builtin = '\nDisallow: /login\nDisallow: /seffe\n'
is_leaf = True
render(request)[source]

Render a given resource. See L{IResource}’s render method.

I delegate to methods of self with the form ‘render_METHOD’ where METHOD is the HTTP that was used to make the request. Examples: render_GET, render_HEAD, render_POST, and so on. Generally you should implement those methods instead of overriding this one.

render_METHOD methods are expected to return a byte string which will be the rendered page, unless the return value is C{server.NOT_DONE_YET}, in which case it is this class’s responsibility to write the results using C{request.write(data)} and then call C{request.finish()}.

Old code that overrides render() directly is likewise expected to return a byte string or NOT_DONE_YET.

@see: L{IResource.render}

class gavo.web.ifpages.SchemaServer[source]

Bases: TemplatedPage, CommonRenderers

a resource returning our built-in schema files.

This exposes stanxml’s NSRegistry, i.e., everything that’s been introduced to DaCHS using registryPrefix at any point.

This both reacts to prefixes and to the last segments of schema locations.

This needs to look a bit deeper into stanxml.NSRegistry. As long as it’s not operationally relevant, I’ll accept using underscored names here.

TODO: We actually have essentially all of these schema locally (except we don’t necessarily know their canonical prefixes), but the NSRegistry so far only records locations on alnilam. We should probably return them from the local server.

data_schemadata(request, tag)[source]
getChild(name, request)[source]

Retrieve a ‘child’ resource from me.

Implement this to create dynamic resource generation – resources which are always available may be registered with self.putChild().

This will not be called if the class-level variable ‘isLeaf’ is set in your subclass; instead, the ‘postpath’ attribute of the request will be left as a list of the remaining path elements.

For example, the URL /foo/bar/baz will normally be:

| site.resource.getChild('foo').getChild('bar').getChild('baz').

However, if the resource returned by ‘bar’ has isLeaf set to true, then the getChild call will never be made on it.

Parameters and return value have the same meaning and requirements as those defined by L{IResource.getChildWithDefault}.

loader = <gavo.web.common.doctypedStan object>
class gavo.web.ifpages.ServiceInfo[source]

Bases: JSONQuery

doQuery(queryArgs)[source]

returns a list of dictionaries for the query result. The default just executes self.query.

query = "SELECT title, description, authors,    case when dateUpdated is null then 'N/A'       else to_char(dateUpdated, 'YYYY-MM-DD') end as lastupdate,    referenceURL, accessURL  FROM dc.interfaces    NATURAL JOIN dc.sets    RIGHT OUTER JOIN dc.resources USING (sourcerd, resid)  WHERE setname='local'  AND resId=%(resId)s and sourceRd=%(sourceRD)s"
class gavo.web.ifpages.ServiceUnavailable[source]

Bases: Resource

A page to be rendered in emergencies.

Essentially, this is a 503 with a text taken from stateDir/MAINT.

Root checks for the presence of that file before returning this page, so (ignoring race conditions) this page assumes it’s there.

render(request)[source]

Render a given resource. See L{IResource}’s render method.

I delegate to methods of self with the form ‘render_METHOD’ where METHOD is the HTTP that was used to make the request. Examples: render_GET, render_HEAD, render_POST, and so on. Generally you should implement those methods instead of overriding this one.

render_METHOD methods are expected to return a byte string which will be the rendered page, unless the return value is C{server.NOT_DONE_YET}, in which case it is this class’s responsibility to write the results using C{request.write(data)} and then call C{request.finish()}.

Old code that overrides render() directly is likewise expected to return a byte string or NOT_DONE_YET.

@see: L{IResource.render}

class gavo.web.ifpages.StaticFile(fName, cacheRD, defaultType='text/html')[source]

Bases: File

a file from the file system, served pretty directly.

Some of these static files can be javascript (that’s usually minified on the fly) or nevow templates. These we want to cache. For everything else, we don’t win anything by caching, but, when we serve large data, we can DoS ourselves. So, we decide manually whether to cache.

The caches are bound to an RD passed in as cacheRD at construction time. For system resources, that should be getRD(registry.SERVICELIST_ID).

On-the-fly processing is based on certain magic mime types: text/nevow-template is rendered and application/javascript is minified.

defaultType = 'application/octet-stream'
getFileSize()[source]

Return file size.

isLeaf = True
openForReading()[source]

Open a file and return it.

processors: Dict[str, Callable[[str, Any], Data]] = {'.js': <function minifyJS>, '.shtml': <function expandTemplate>}
render(request)[source]

Render a given resource. See L{IResource}’s render method.

I delegate to methods of self with the form ‘render_METHOD’ where METHOD is the HTTP that was used to make the request. Examples: render_GET, render_HEAD, render_POST, and so on. Generally you should implement those methods instead of overriding this one.

render_METHOD methods are expected to return a byte string which will be the rendered page, unless the return value is C{server.NOT_DONE_YET}, in which case it is this class’s responsibility to write the results using C{request.write(data)} and then call C{request.finish()}.

Old code that overrides render() directly is likewise expected to return a byte string or NOT_DONE_YET.

@see: L{IResource.render}

class gavo.web.ifpages.StaticServer[source]

Bases: Resource

is a server for various static files.

This is basically like static.File, except

  • we don’t do directory listings

  • we don’t bother with ranges

  • we look for each file in a user area and then in the system area.

getChild(name, request)[source]

Retrieve a ‘child’ resource from me.

Implement this to create dynamic resource generation – resources which are always available may be registered with self.putChild().

This will not be called if the class-level variable ‘isLeaf’ is set in your subclass; instead, the ‘postpath’ attribute of the request will be left as a list of the remaining path elements.

For example, the URL /foo/bar/baz will normally be:

| site.resource.getChild('foo').getChild('bar').getChild('baz').

However, if the resource returned by ‘bar’ has isLeaf set to true, then the getChild call will never be made on it.

Parameters and return value have the same meaning and requirements as those defined by L{IResource.getChildWithDefault}.

render(request)[source]

Render a given resource. See L{IResource}’s render method.

I delegate to methods of self with the form ‘render_METHOD’ where METHOD is the HTTP that was used to make the request. Examples: render_GET, render_HEAD, render_POST, and so on. Generally you should implement those methods instead of overriding this one.

render_METHOD methods are expected to return a byte string which will be the rendered page, unless the return value is C{server.NOT_DONE_YET}, in which case it is this class’s responsibility to write the results using C{request.write(data)} and then call C{request.finish()}.

Old code that overrides render() directly is likewise expected to return a byte string or NOT_DONE_YET.

@see: L{IResource.render}

class gavo.web.ifpages.Subjects[source]

Bases: JSONQuery

doQuery(queryArgs)[source]

returns a list of dictionaries for the query result. The default just executes self.query.

query = "SELECT subject, count(*) as numMatch FROM dc.subjects   NATURAL JOIN dc.sets WHERE setname='local' AND NOT deleted GROUP BY subject ORDER BY subject"
class gavo.web.ifpages.Teapot[source]

Bases: Resource

getChild(name, request)[source]

Retrieve a ‘child’ resource from me.

Implement this to create dynamic resource generation – resources which are always available may be registered with self.putChild().

This will not be called if the class-level variable ‘isLeaf’ is set in your subclass; instead, the ‘postpath’ attribute of the request will be left as a list of the remaining path elements.

For example, the URL /foo/bar/baz will normally be:

| site.resource.getChild('foo').getChild('bar').getChild('baz').

However, if the resource returned by ‘bar’ has isLeaf set to true, then the getChild call will never be made on it.

Parameters and return value have the same meaning and requirements as those defined by L{IResource.getChildWithDefault}.

render(request)[source]

Render a given resource. See L{IResource}’s render method.

I delegate to methods of self with the form ‘render_METHOD’ where METHOD is the HTTP that was used to make the request. Examples: render_GET, render_HEAD, render_POST, and so on. Generally you should implement those methods instead of overriding this one.

render_METHOD methods are expected to return a byte string which will be the rendered page, unless the return value is C{server.NOT_DONE_YET}, in which case it is this class’s responsibility to write the results using C{request.write(data)} and then call C{request.finish()}.

Old code that overrides render() directly is likewise expected to return a byte string or NOT_DONE_YET.

@see: L{IResource.render}

class gavo.web.ifpages.TemplatedPage(request, fName)[source]

Bases: CustomTemplateMixin, ServiceBasedPage

a “server-wide” template.

For now, they all are based on the dc root service.

checkedRenderer = False
class gavo.web.ifpages.ThirdPartyCachePage[source]

Bases: Resource

A page returning third-party resources I don’t want to distribute with DaCHS for a variety of reason.

I still want them to come from the service itself, if only to keep the number of third-party requests down.

These things are retrieved and cached on first access. They are removed on upgrades.

cacheDir = '/home/msdemlei/gavo/cache/3rdparty'
getCacheName(name)[source]

returns the name of a file the resource name would be cached under.

getChild(name, request)[source]

Retrieve a ‘child’ resource from me.

Implement this to create dynamic resource generation – resources which are always available may be registered with self.putChild().

This will not be called if the class-level variable ‘isLeaf’ is set in your subclass; instead, the ‘postpath’ attribute of the request will be left as a list of the remaining path elements.

For example, the URL /foo/bar/baz will normally be:

| site.resource.getChild('foo').getChild('bar').getChild('baz').

However, if the resource returned by ‘bar’ has isLeaf set to true, then the getChild call will never be made on it.

Parameters and return value have the same meaning and requirements as those defined by L{IResource.getChildWithDefault}.

getFromCache(name)[source]

returns a resource serving name if it’s alreading in the cache, raises a KeyError if not.

render(request)[source]

Render a given resource. See L{IResource}’s render method.

I delegate to methods of self with the form ‘render_METHOD’ where METHOD is the HTTP that was used to make the request. Examples: render_GET, render_HEAD, render_POST, and so on. Generally you should implement those methods instead of overriding this one.

render_METHOD methods are expected to return a byte string which will be the rendered page, unless the return value is C{server.NOT_DONE_YET}, in which case it is this class’s responsibility to write the results using C{request.write(data)} and then call C{request.finish()}.

Old code that overrides render() directly is likewise expected to return a byte string or NOT_DONE_YET.

@see: L{IResource.render}

urlMapping = {b'aladin.min.css': b'https://aladin.u-strasbg.fr/AladinLite/api/v2/latest/aladin.min.css', b'aladin.min.js': b'https://aladin.u-strasbg.fr/AladinLite/api/v2/latest/aladin.min.js'}
class gavo.web.ifpages.Titles[source]

Bases: JSONQuery

query = "SELECT title, accessurl, referenceurl, sourcerd, resid, owner, browseable FROM dc.resources   NATURAL JOIN dc.interfaces   NATURAL JOIN dc.sets WHERE setname='local' AND NOT deleted ORDER BY title"
class gavo.web.ifpages.WellKnown[source]

Bases: Resource

A handler for the .well-known hierarchy.

We only do something for ACME at this point.

getChild(name, request)[source]

Retrieve a ‘child’ resource from me.

Implement this to create dynamic resource generation – resources which are always available may be registered with self.putChild().

This will not be called if the class-level variable ‘isLeaf’ is set in your subclass; instead, the ‘postpath’ attribute of the request will be left as a list of the remaining path elements.

For example, the URL /foo/bar/baz will normally be:

| site.resource.getChild('foo').getChild('bar').getChild('baz').

However, if the resource returned by ‘bar’ has isLeaf set to true, then the getChild call will never be made on it.

Parameters and return value have the same meaning and requirements as those defined by L{IResource.getChildWithDefault}.

gavo.web.ifpages.expandTemplate(request, fName)[source]

renders fName as a template on the root service.

gavo.web.ifpages.minifyJS(request, path)[source]

returns javascript in path minified.

You can turn off auto-minification by setting [web] jsSource to True; that’s sometimes convenient while debugging the javascript.

If jsSource is false (the default), changes to javascript are only picked up on a server reload.