~vorlon/ubuntu/saucy/gourmet/trunk

« back to all changes in this revision

Viewing changes to src/lib/importers/gxml2_importer.py

  • Committer: Bazaar Package Importer
  • Author(s): Rolf Leggewie
  • Date: 2008-07-26 13:29:41 UTC
  • Revision ID: james.westby@ubuntu.com-20080726132941-6ldd73qmacrzz0bn
Tags: upstream-0.14.0
ImportĀ upstreamĀ versionĀ 0.14.0

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
import xml.sax, re, sys, xml.sax.saxutils
 
2
import xml_importer
 
3
from gourmet.gdebug import *
 
4
from gourmet.gglobals import *
 
5
import base64
 
6
 
 
7
class RecHandler (xml_importer.RecHandler):
 
8
    ING_ATTRS =  {
 
9
        # XML : DATABASE COLUMN
 
10
        "item":"item",
 
11
        "unit":"unit",
 
12
        "amount":"amount",
 
13
        "key":"ingkey",
 
14
        }
 
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()]
 
19
        
 
20
    def startElement(self, name, attrs):
 
21
        gt.gtk_update()
 
22
        self.elbuf = ""        
 
23
        if name=='recipe':
 
24
            id=attrs.get('id',None)
 
25
            if id:
 
26
                self.start_rec(dict={'id':id})
 
27
            else: self.start_rec()
 
28
            
 
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
 
34
        if name=='ingref':
 
35
            self.start_ing(id=self.rec['id'])
 
36
            self.add_ref(unquoteattr(attrs.get('refid')))
 
37
            self.add_amt(unquoteattr(attrs.get('amount')))
 
38
            
 
39
    def endElement (self, name):
 
40
        if name=='recipe':
 
41
            self.commit_rec()
 
42
        elif name=='groupname':
 
43
            self.group=xml.sax.saxutils.unescape(self.elbuf.strip())
 
44
        elif name=='inggroup':
 
45
            self.group=None
 
46
        elif name=='ingref':
 
47
            self.add_item(xml.sax.saxutils.unescape(self.elbuf.strip()))
 
48
            self.commit_ing()
 
49
        elif name=='ingredient':
 
50
            self.commit_ing()
 
51
        elif name=='image':
 
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())
 
57
 
 
58
 
 
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)
 
64
 
 
65
def unquoteattr (str):
 
66
    return xml.sax.saxutils.unescape(str).replace("_"," ")