source: mods_util.py @ 12:b209ea521e96

Revision 12:b209ea521e96, 2.8 KB checked in by andre.hagenbruch@rub.de, 7 years ago (diff)

Preparations for feed process refactoring.

Line 
1#!/usr/bin/env python
2# encoding: utf-8
3"""
4mods_solr_util.py
5
6Created by Andre Hagenbruch on 2009-03-07.
7Copyright (c) 2009 University Library Bochum. All rights reserved.
8"""
9
10MODS_NAMESPACE = 'http://www.loc.gov/mods/v3'
11MODS = '{%s}' % MODS_NAMESPACE
12DCTERMS_NAMESPACE = 'http://purl.org/dc/terms'
13DCTERMS = '{%s}' % DCTERMS_NAMESPACE
14
15NSMAP ={None: MODS_NAMESPACE,
16                'dcterms': DCTERMS_NAMESPACE,
17}
18
19from lxml import etree
20from lxml import objectify
21
22import uuid, datetime
23
24def objectify_records(mods_file):
25        records = []
26        mc = etree.parse(mods_file)
27        collection = mc.findall('.//{%s}mods' % NS)
28
29        for record in collection:
30                r = etree.tostring(record)
31                records.append(objectify.fromstring(r))
32
33        return records
34
35def mods(ename, val, **attr):
36        e = etree.Element(ename, nsmap = NSMAP)
37        try:
38                if attr is not None:
39                        for att in attr:
40                                e.set(att, attr[att])
41        except IndexError:
42                pass
43        if val is not None:
44                try:
45                        e.text = val.decode('utf-8')
46                except UnicodeDecodeError:
47                        e.text = val.decode('iso-8859-1')
48                except UnicodeEncodeError :
49                        e.text = val
50        return e
51
52# def elm ( ename, val, **attr ) :
53#       e = etree.Element ( ename, nsmap = NSMAP )
54#       #e = etree.Element ( ename )
55#       try :
56#               if attr is not None :
57#                       # e.set ( attr [ 0 ], attr [ 1 ] )
58#                       for att in attr :
59#                               e.set ( att, attr [ att ] )
60#       except IndexError :
61#               pass
62#       if val is not None :
63#               try :
64#                       e.text = val.decode ( 'utf-8' )
65#               except UnicodeDecodeError :
66#                       e.text = val.decode ( 'iso-8859-1' )
67#               except UnicodeEncodeError :
68#                       e.text = val
69#       return e
70
71# def unique_id ( collection, rid ) :
72#       try :
73#               uri = 'tag:ub.rub.de,2008:%s#%s' % ( collection, rid )
74#               return unicode ( uuid.uuid3 ( uuid.NAMESPACE_DNS, uri ) )
75#       except :
76#               raise
77
78def title(t, **attr):
79        titleinfo = mods('titleInfo', None)
80        titleinfo.append(mods('title', t))
81        return titleinfo
82
83def name(**nameparts):
84        n = mods('name', None, **{'type': 'personal'})
85        npf = ''
86        npg = ''
87        df = ''
88        if nameparts.has_key('given') and nameparts.has_key('family'):
89                npf = mods('namePart', nameparts['family'], **{ 'type': 'family'})
90                npg = mods('namePart', nameparts['given'], **{'type': 'given'})
91                df = mods('displayForm', '%s, %s' % (nameparts['family'], nameparts['given']))
92                n.extend((npf, npg, df))
93        else:
94                n.append(mods('namePart', nameparts['displayForm']))
95        if nameparts.has_key('affiliation'):
96                n.append(mods('affiliation', nameparts['affiliation']))
97        r = mods('role', None)
98        r.append(mods('roleTerm', nameparts['role'], **{'type' : 'code', 'authority': 'http://loc.gov/marc/sourcetext/relator/'}))
99        n.append(r)
100        return n
101
102def record_info(uid):
103        ri = mods('recordInfo', None)
104        ri.append(mods('recordIdentfier', uid))
105        ri.append(mods('recordCreationDate', datetime.datetime.now ().isoformat()[: -16] + 'Z', **{'encoding': 'iso8601' }))
106        return ri
Note: See TracBrowser for help on using the repository browser.