Source code for capitains_nautilus.response

# -*- coding: utf-8 -*-
"""
    Response generator for the queries
"""
from __future__ import unicode_literals
from six import text_type as str

from collections import OrderedDict
from copy import copy
from MyCapytain.resources.inventory import TextInventory
from MyCapytain.common.reference import URN

JSON = "application/text"
XML = "text/xml"
CTS_XML = "text/xml:CTS"
MY_CAPYTAIN = "MyCapytain"


[docs]def getcapabilities(texts, page=None, count=None, output=XML, **kwargs): """ Transform a list of texts into a string representation :param texts: List of Text objects :return: String representation of the Inventory """ inventory = TextInventory() for text in texts: tg_urn = str(text.parents[1].urn) wk_urn = str(text.parents[0].urn) txt_urn = str(text.urn) if tg_urn not in inventory.textgroups: # Use another variable to avoid pointer ? # Try to see what is most optimized inventory.textgroups[tg_urn] = copy(text.parents[1]) inventory.textgroups[tg_urn].works = OrderedDict() if wk_urn not in inventory.textgroups[tg_urn].works: inventory.textgroups[tg_urn].works[wk_urn] = copy(text.parents[0]) inventory.textgroups[tg_urn].works[wk_urn].parents = tuple( [inventory, inventory.textgroups[tg_urn]] ) inventory.textgroups[tg_urn].works[wk_urn].texts = OrderedDict() __text = copy(text) inventory.textgroups[tg_urn].works[wk_urn].texts[txt_urn] = __text __text.parents = tuple([ inventory, inventory.textgroups[tg_urn], inventory.textgroups[tg_urn].works[wk_urn] ]) if output == JSON: return None elif output == CTS_XML: return str(inventory) else: return """ <GetCapabilities xmlns="http://chs.harvard.edu/xmlns/cts"> <request> <requestName>GetInventory</requestName> <requestFilters>{filters}</requestFilters> </request> <reply> {inventory} </reply> </GetCapabilities>""".format( inventory=str(inventory), filters=", ".join("{0}={1}".format(key, value) for key, value in kwargs.items() if value is not None) )
[docs]def getpassage(passage, metadata, request_urn, output=XML): if output == XML: return """ <GetPassage xmlns:tei="http://www.tei-c.org/ns/1.0" xmlns="http://chs.harvard.edu/xmlns/cts"> <request> <requestName>GetPassage</requestName> <requestUrn>{request_urn}</requestUrn> </request> <reply> <urn>{full_urn}</urn> <passage> {passage} </passage> </reply> </GetPassage>""".format( request_urn=request_urn, full_urn=str(passage.urn), category=metadata.subtype.lower(), urn=str(metadata.urn), lang=metadata.lang, passage=passage.tostring(encoding=str) )
[docs]def getpassageplus(passage, metadata, request_urn, output=XML): _prev = None _next = None if passage.prev: _prev = URN("{}:{}".format(passage.urn.upTo(URN.VERSION), str(passage.prev))) if passage.next: _next = URN("{}:{}".format(passage.urn.upTo(URN.VERSION), str(passage.next))) if output == XML: return """ <GetPassagePlus xmlns:tei="http://www.tei-c.org/ns/1.0" xmlns="http://chs.harvard.edu/xmlns/cts"> <request> <requestName>GetPassage</requestName> <requestUrn>{request_urn}</requestUrn> </request> <reply> <urn>{full_urn}</urn> <passage> {passage} </passage> <prevnext> <prev><urn>{prev}</urn></prev> <next><urn>{next}</urn></next> </prevnext> <label>{metadata}</label> </reply> </GetPassagePlus>""".format( request_urn=request_urn, full_urn=str(passage.urn), category=metadata.subtype.lower(), urn=str(metadata.urn), lang=metadata.lang, passage=passage.tostring(encoding=str), prev=_prev or "", next=_next or "", metadata=metadata )
[docs]def getvalidreff(reffs, level, request_urn, output=XML): if output == XML: return """ <GetValidReff xmlns:tei="http://www.tei-c.org/ns/1.0" xmlns="http://chs.harvard.edu/xmlns/cts"> <request> <requestName>GetValidReff</requestName> <requestUrn>{request_urn}</requestUrn> <requestLevel>{level}</requestLevel> </request> <reply> <reff>{reffs}</reff> </reply> </GetValidReff>""".format( request_urn=request_urn, reffs="".join(["<urn>{}</urn>".format(reff) for reff in reffs]), level=level )
[docs]def getprevnext(passage, request_urn, output=XML): _prev = "" _next = "" if passage.prev: _prev = URN("{}:{}".format(passage.urn.upTo(URN.VERSION), str(passage.prev))) if passage.next: _next = URN("{}:{}".format(passage.urn.upTo(URN.VERSION), str(passage.next))) if output == XML: return """ <GetPrevNext xmlns:tei="http://www.tei-c.org/ns/1.0" xmlns="http://chs.harvard.edu/xmlns/cts"> <request> <requestName>GetPrevNext</requestName> <requestUrn>{request_urn}</requestUrn> </request> <reply> <urn>{full_urn}</urn> <prevnext> <prev><urn>{prev}</urn></prev> <next><urn>{next}</urn></next> </prevnext> </reply> </GetPrevNext>""".format( request_urn=request_urn, full_urn=str(passage.urn), prev=str(_prev), next=str(_next) )
[docs]def getfirst(passage, request_urn, output=XML): _first = None if passage.first: _first = URN("{}:{}".format(passage.urn.upTo(URN.VERSION), str(passage.first))) if output == XML: return """ <GetFirstPassage xmlns:tei="http://www.tei-c.org/ns/1.0" xmlns="http://chs.harvard.edu/xmlns/cts"> <request> <requestName>GetPrevNext</requestName> <requestUrn>{request_urn}</requestUrn> </request> <reply> <urn>{full_urn}</urn> <first> <urn>{first}</urn> </first> </reply> </GetFirstPassage>""".format( request_urn=request_urn, full_urn=passage.urn, first=_first )
[docs]def getlabel(metadata, full_urn, request_urn, output=XML): if output == XML: return """ <GetLabel xmlns:tei="http://www.tei-c.org/ns/1.0" xmlns="http://chs.harvard.edu/xmlns/cts"> <request> <requestName>GetPassage</requestName> <requestUrn>{request_urn}</requestUrn> </request> <reply> <urn>{full_urn}</urn> <label>{metadata}</label> </reply> </GetLabel>""".format( request_urn=request_urn, full_urn=full_urn, metadata=metadata )