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
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)
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()
def print_marc(marc): print str(zmarc.MARC(marc))
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))
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))