Exemple #1
0
def fetch_mods (query):
    res = conn.search (query)
    mods_list = []
    for r in res:
        marc_obj = zmarc.MARC (r.data)
        mods_list.append (marc_obj.toMODS ())
    return mods_list
Exemple #2
0
def render_OPAC(opac_data):
    s_list = []
    biblio_oid = opac_data.bibliographicRecord.direct_reference
    if (biblio_oid == z3950.Z3950_RECSYN_USMARC_ov):
        bib_marc = zmarc.MARC(opac_data.bibliographicRecord.encoding[1])
        s_list.append("Bibliographic %s\n" % (str(bib_marc), ))
    else:
        s_list.append("Unknown bibliographicRecord OID: " + str(biblio_oid))
    for i, hd in my_enumerate(opac_data.holdingsData):
        typ, data = hd
        s_list.append('Holdings %d:' % (i, ))
        if typ == 'holdingsAndCirc':

            def render(item, level=1):
                s_list = []
                if isinstance(item, asn1.StructBase):
                    for attr, val in item.__dict__.items():
                        if attr[0] <> '_':
                            s_list.append("%s%s: %s" %
                                          ("\t" * level, attr, "\n".join(
                                              render(val, level + 1))))
                elif (isinstance(item, type([])) and len(item) > 0
                      and isinstance(item[0], asn1.StructBase)):
                    s_list.append("")  # generate newline
                    for i, v in my_enumerate(item):
                        s_list.append("\t" * (level + 1) + str(i))
                        s_list += render(v, level + 1)
                else:
                    s_list.append(repr(item))
                return s_list

            s_list.append("\n".join(render(data)))
        elif typ == 'marcHoldingsRecord':
            hold_oid = data.direct_reference
            if hold_oid == z3950.Z3950_RECSYN_USMARC_ov:
                holdings_marc = zmarc.MARC(data.encoding[1])
                s_list.append("Holdings %s\n" % (str(holdings_marc), ))
            else:
                s_list.append("Unknown holdings OID: " + str(hold_oid))
        else:
            s_list.append("Unknown holdings type: " + typ)
            # shouldn't happen unless z39.50 definition is extended
    return "\n".join(s_list)
Exemple #3
0
def ParseRecord(sMARCfilename):
    """Given a MARC file, open & parse it
    See <http://www.loc.gov/marc/umb/> for the basics regarding the MARC
    format,
    or <http://www.loc.gov/marc/bibliographic/ecbdhome.html> for more
    details.  Unfortunately the terminology used in these two documents
    is not quite the same.
    """

    #try to open MARC file
    try:
        fz = open(sMARCfilename, "rb")
        vMARC = zmarc.MARC(fz.read())
        names_fields = [100, 700]
        #100 Main entry -- Personal name -- (primary author)
        #700 additional personal name entry
        
        for fieldno in names_fields: #show raw zmarc structure
            if fieldno not in vMARC.fields:
                continue
            
            print("Raw zmarc structure, field %d: %s" %  (
                fieldno, str(vMARC.fields[fieldno])))

            subfield_key = 'a' # text of author's name
            
            # Now, iterate over possibly multiple fields, unpacking
            # indicator 1, indicator 2, and subfields
            for (ind1, ind2, subfields) in vMARC.fields [fieldno]:
                sx = _GetValue(subfield_key, subfields)
                # Note that most of the other subfields may be
                # required to distinguish among authors, too.
                if sx != None:
                    print("Author field %d sub %s: %s" % (fieldno,
                                                          subfield_key, sx))
                else:
                    print("No $%s subfield for %d" % (subfield_key, fieldno))
    finally:
        fz.close()
Exemple #4
0
 def print_marc(marc):
     print str(zmarc.MARC(marc))
Exemple #5
0
        elif typ == 'marcHoldingsRecord':
            hold_oid = data.direct_reference
            if hold_oid == z3950.Z3950_RECSYN_USMARC_ov:
                holdings_marc = zmarc.MARC(data.encoding[1])
                s_list.append("Holdings %s\n" % (str(holdings_marc), ))
            else:
                s_list.append("Unknown holdings OID: " + str(hold_oid))
        else:
            s_list.append("Unknown holdings type: " + typ)
            # shouldn't happen unless z39.50 definition is extended
    return "\n".join(s_list)


_RecordType('USMARC',
            z3950.Z3950_RECSYN_USMARC_ov,
            renderer=lambda v: str(zmarc.MARC(v)))
_RecordType('UKMARC',
            z3950.Z3950_RECSYN_UKMARC_ov,
            renderer=lambda v: str(zmarc.MARC(v)))
_RecordType('SUTRS', z3950.Z3950_RECSYN_SUTRS_ov)
_RecordType('XML', z3950.Z3950_RECSYN_MIME_XML_ov)
_RecordType('SGML', z3950.Z3950_RECSYN_MIME_SGML_ov)
_RecordType('GRS-1',
            z3950.Z3950_RECSYN_GRS1_ov,
            renderer=lambda v: str(v),
            preproc=grs1.preproc)
_RecordType('OPAC', z3950.Z3950_RECSYN_OPAC_ov, renderer=render_OPAC)
_RecordType('EXPLAIN',
            z3950.Z3950_RECSYN_EXPLAIN_ov,
            renderer=lambda v: str(v))
Exemple #6
0
                return s_list
            s_list.append ("\n".join (render (data)))
        elif typ == 'marcHoldingsRecord':
            hold_oid = data.direct_reference
            if hold_oid == z3950.Z3950_RECSYN_USMARC_ov:
                holdings_marc = zmarc.MARC (data.encoding [1])
                s_list.append ("Holdings %s\n" % (str (holdings_marc),))
            else:
                s_list.append ("Unknown holdings OID: " + str (hold_oid))
        else:
            s_list.append ("Unknown holdings type: " + typ)
            # shouldn't happen unless z39.50 definition is extended
    return "\n".join (s_list)

_RecordType ('USMARC', z3950.Z3950_RECSYN_USMARC_ov,
            renderer = lambda v: str(zmarc.MARC(v)))
_RecordType ('USMARCnonstrict', z3950.Z3950_RECSYN_USMARC_ov,
            renderer = lambda v: str(zmarc.MARC(v, strict=0)))
_RecordType ('UKMARC', z3950.Z3950_RECSYN_UKMARC_ov,
            renderer = lambda v: str(zmarc.MARC(v)))
_RecordType ('UNIMARC', z3950.Z3950_RECSYN_UNIMARC_ov,
            renderer = lambda v: str(zmarc.MARC(v)))
_RecordType ('SUTRS', z3950.Z3950_RECSYN_SUTRS_ov)
_RecordType ('XML', z3950.Z3950_RECSYN_MIME_XML_ov)
_RecordType ('SGML', z3950.Z3950_RECSYN_MIME_SGML_ov)
_RecordType ('GRS-1', z3950.Z3950_RECSYN_GRS1_ov,
             renderer = lambda v: str (v),
             preproc = grs1.preproc)
_RecordType ('OPAC', z3950.Z3950_RECSYN_OPAC_ov, renderer = render_OPAC)
_RecordType ('EXPLAIN', z3950.Z3950_RECSYN_EXPLAIN_ov,
             renderer = lambda v: str (v))