1
import xml.sax, re, sys, xml.sax.saxutils
3
from gourmet.gdebug import *
4
from gourmet.gglobals import *
7
class RecHandler (xml_importer.RecHandler):
9
# XML : DATABASE COLUMN
15
def __init__ (self, recData, total=None, prog=None,conv=None):
16
xml_importer.RecHandler.__init__(self,recData,total,prog,conv=conv)
17
self.REC_ATTRS = [r[0] for r in REC_ATTRS]
18
self.REC_ATTRS += [r for r in TEXT_ATTR_DIC.keys()]
20
def startElement(self, name, attrs):
24
id=attrs.get('id',None)
26
self.start_rec(dict={'id':id})
27
else: self.start_rec()
29
if name=='ingredient':
30
self.start_ing(id=self.rec['id'])
31
if attrs.get('optional',False):
32
if attrs.get('optional',False) not in ['no','No','False','false','None']:
33
self.ing['optional']=True
35
self.start_ing(id=self.rec['id'])
36
self.add_ref(unquoteattr(attrs.get('refid')))
37
self.add_amt(unquoteattr(attrs.get('amount')))
39
def endElement (self, name):
42
elif name=='groupname':
43
self.group=xml.sax.saxutils.unescape(self.elbuf.strip())
44
elif name=='inggroup':
47
self.add_item(xml.sax.saxutils.unescape(self.elbuf.strip()))
49
elif name=='ingredient':
52
self.rec['image']=base64.b64decode(self.elbuf.strip())
53
elif name in self.REC_ATTRS:
54
self.rec[name]=xml.sax.saxutils.unescape(self.elbuf.strip())
55
elif name in self.ING_ATTRS.keys():
56
self.ing[self.ING_ATTRS[name]]=xml.sax.saxutils.unescape(self.elbuf.strip())
59
class converter (xml_importer.converter):
60
def __init__ (self, filename, rd, threaded=False, progress=None,conv=None):
61
xml_importer.converter.__init__(self,filename,rd,RecHandler,
62
recMarker="</recipe>",threaded=threaded,
63
progress=progress,conv=conv)
65
def unquoteattr (str):
66
return xml.sax.saxutils.unescape(str).replace("_"," ")