Module srwExtensions |
[hide private]
[frames] | no frames]

## Source Code for Module srwExtensions

     1
     2  # All extension functions for SRW should be imported into this space
     3  # even if they're defined elsewhere.
     4
     5  # Functions should modify extra*Data in place.
     6  # Add DOM node for serialization by ZSI.
     7  # Fr'ex:
     8  # object.extraFooData.append(r.fromString('<a:b c="d">e</a:b>'))
     9
    10  # Configuration in SRW ZeeRex file should look like:
    11  #
    12  #  <zeerex:supports type="extension"
    13  #                   c3:type="record"
    14  #                   c3:function="docidRecordHandler"
    15  #                   c3:sruName="x-info2-docid"
    16  #                   c3:sruFunction="docidRequestXform">
    17  #     info:srw/extensions/2/docid-v1.0 docid
    18  #  </zeerex:/supports>
    19  #
    20  # Where c3:type is one of: record, term, search, scan, explain, response
    21
    22  # Useful tools:
    23  from xml.sax.saxutils import escape
    24  from utils import reader
    25  r = reader()
    26
    27  # Simple SRU->SRW transformation
    28
    29 -def simpleRequestXform(item, config):
    30      data = config.sruExtensionMap.get(item[0], None)
    31      if data:
    32          xml = '<ns1:%s xmlns:ns1="%s">%s</ns1:%s>' % (data[1], data[0], item[1], data[1])
    33          val = r.fromString(xml)
    34          return val
    35      return None
    36
    37  # Extension Handler Functions:
    38
    39 -def implementationResponseHandler(req, resp, other=None):
    40      # Put our implementation id into the response
    41      # Stored in ZeeRex, so on config object
    42      # XXX Make dynamic
    43      txt = """
    44      <ident:serverInfo xmlns:ident="info:srw/extensions/1/ident-v1.0">
    45        <ident:institution>University of Liverpool</ident:institution>
    46        <ident:vendor>Cheshire3 Project</ident:vendor>
    47        <ident:application>Cheshire3 SRW Server</ident:application>
    48        <ident:version>0.7.9</ident:version>
    49      </ident:serverInfo>
    50      """
    51      resp.extraResponseData.append(r.fromString(txt))
    52
    53 -def docidRecordHandler(req, ro, other):
    54      # Put the record identifier into extraRecordData
    55      txt = '<docid:recordIdentifier xmlns:docid="info:srw/extensions/2/docid-v1.0">%s</docid:recordIdentifier>' % escape(str(other))
    56      ro.extraRecordData.append(r.fromString(txt))
    57