Source code for aleph.convertor
#! /usr/bin/env python
# -*- coding: utf-8 -*-
#
# Interpreter version: python 2.7
#
#= Imports ====================================================================
"""
This module exists to provide ability to convert from AMQP data structures to
Aleph's data structures, specifically to convert :class:`.MARCXMLRecord` to
:class:`.EPublication` simplified data structure.
"""
from marcxml import MARCXMLRecord
from datastructures import *
from __init__ import *
#= Functions & objects ========================================================
[docs]def toEPublication(marcxml):
"""
Convert MARCXMLRecord object to :class:`.EPublication` named tuple.
Args:
marcxml (str/MARCXMLRecord): MarcXML which will be converted to
EPublication. In case of str, <record> tag is required.
Returns:
EPublication: named tuple with data about publication.
See Also:
:class:`aleph.datastructures.epublication` for details of
:class:`.EPublication`, structure.
"""
parsed = marcxml
if not isinstance(marcxml, MARCXMLRecord):
parsed = MARCXMLRecord(str(marcxml))
# distributor = "" # FUTURE
# mistoDistribuce = ""
# datumDistribuce = ""
# # parse information about distributors
# distributors = parsed.getCorporations("dst")
# if len(distributors) >= 1:
# mistoDistribuce = distributors[0].place
# datumDistribuce = distributors[0].date
# distributor = distributors[0].name
# zpracovatel
zpracovatel = parsed.getDataRecords("040", "a", False)
zpracovatel = zpracovatel[0] if len(zpracovatel) >= 1 else ""
# url
url = parsed.getDataRecords("856", "u", False)
url = url[0] if len(url) >= 1 else ""
binding = parsed.getBinding()
# i know, that this is not PEP8, but you dont want to see it without proper
# formating (it looks bad, really bad)
return EPublication(
ISBN = parsed.getISBNs(),
nazev = parsed.getName(),
podnazev = parsed.getSubname(),
vazba = binding[0] if len(binding) > 0 else "",
cena = parsed.getPrice(),
castDil = parsed.getPart(),
nazevCasti = parsed.getPartName(),
nakladatelVydavatel = parsed.getPublisher(),
datumVydani = parsed.getPubDate(),
poradiVydani = parsed.getPubOrder(),
zpracovatelZaznamu = zpracovatel,
# mistoDistribuce = mistoDistribuce, # FUTURE
# distributor = distributor,
# datumDistribuce = datumDistribuce,
# datumProCopyright = "",
format = parsed.getFormat(),
url = url,
mistoVydani = parsed.getPubPlace(),
ISBNSouboruPublikaci= [],
autori = map( # convert Persons to amqp's Authors
lambda a: Author(
(a.name + " " + a.second_name).strip(),
a.surname,
a.title
),
parsed.getAuthors()
),
originaly = parsed.getOriginals(),
internal_url = "" # TODO
)