~vorlon/ubuntu/saucy/gourmet/trunk

« back to all changes in this revision

Viewing changes to src/lib/plugins/import_export/krecipe_plugin/krecipe_importer.py

  • Committer: Bazaar Package Importer
  • Author(s): Rolf Leggewie
  • Date: 2009-01-12 23:03:28 UTC
  • mfrom: (2.1.3 sid)
  • Revision ID: james.westby@ubuntu.com-20090112230328-wnuqqte22uk3981b
Tags: 0.14.3-2
Conflict with python-pysqlite >= 2.5 which when installed crashes 
gourmet at startup. (Closes: #507382) and python-sqlalchemy >= 0.5.
Both restrictions should eventually be relaxed when upstream has
made the code compatible with the newer libs.

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
import xml.sax, re, sys, xml.sax.saxutils
 
2
import base64
 
3
from gourmet.importers import xml_importer
 
4
from gourmet.gdebug import *
 
5
from gourmet.gglobals import *
 
6
 
 
7
class KrecHandler (xml_importer.RecHandler):
 
8
    ADD = 1
 
9
    IS = 2
 
10
    AND = 3
 
11
    BASE_64 = 4
 
12
    RECTAGS={'title':('title',IS),
 
13
             'author':('source',ADD),
 
14
             # FIX ME: IMAGE SUPPORT IS BROKEN!
 
15
             'pic':('image',BASE_64),
 
16
             'cat':('category',ADD),
 
17
             'serving':('servings',IS),
 
18
             'preparation-time':('preptime',IS),
 
19
             'krecipes-instructions':('instructions',ADD)
 
20
             }
 
21
    INGTAGS={'name':(('item','ingkey'),AND),
 
22
             'amount':('amount',IS),
 
23
             'unit':('unit',IS),
 
24
             'prep':('item',ADD),
 
25
             }
 
26
    RECIPE_TAG = 'krecipes-recipe'
 
27
    ING_TAG = 'ingredient'
 
28
    
 
29
    def __init__ (self, total=None, conv=None, parent_thread=None):
 
30
        self.in_mixed = 0
 
31
        self.rec={}
 
32
        self.ing={}
 
33
        xml_importer.RecHandler.__init__(self,total,conv=conv,parent_thread=parent_thread)
 
34
 
 
35
    def startElement (self, name, attrs):
 
36
        self.elbuf = ""
 
37
        if name==self.RECIPE_TAG:
 
38
            self.start_rec()
 
39
        if name==self.ING_TAG:
 
40
            self.start_ing()
 
41
        if name=='ingredient-group':
 
42
            self.group=attrs.get('name','')
 
43
            
 
44
    def endElement (self, name):
 
45
        key,method=None,None
 
46
        # krecipe-recipe marks a recipe end!
 
47
        if name==self.RECIPE_TAG:
 
48
            self.commit_rec()
 
49
            return
 
50
        if name=='ingredient-group':
 
51
            self.group=None
 
52
        if name==self.ING_TAG:
 
53
            self.commit_ing()
 
54
        elif self.RECTAGS.has_key(name):
 
55
            obj = self.rec
 
56
            key,method = self.RECTAGS[name]
 
57
        elif self.INGTAGS.has_key(name):
 
58
            obj = self.ing
 
59
            key,method = self.INGTAGS[name]
 
60
        if key:
 
61
            if method == self.ADD and obj.has_key(key):
 
62
                obj[key]=obj[key]+", "+self.elbuf
 
63
            elif method == self.AND:
 
64
                for k in key:
 
65
                    obj[k]=self.elbuf
 
66
            elif method == self.BASE_64:
 
67
                obj[key]=base64.b64decode(self.elbuf)
 
68
            else:
 
69
                obj[key]=self.elbuf
 
70
 
 
71
    
 
72
class Converter (xml_importer.Converter):
 
73
    def __init__ (self, filename):
 
74
        xml_importer.Converter.__init__(self,filename,KrecHandler,
 
75
                              recMarker="</krecipe-recipe>"
 
76
                              )
 
77