1
import exporter, gxml_exporter, gxml2_exporter
2
import html_exporter, mealmaster_exporter, recipe_emailer
4
#import eatdrinkfeelgood_exporter
7
from gettext import gettext as _
8
from gourmet.gdebug import *
14
debug('No RTF support',0)
17
# Filetypes as presented to user
18
WEBPAGE = _('HTML Web Page')
19
MMF = _('MealMaster file')
22
PDF = _('PDF (Portable Document Format)')
23
GXML2 = _('Gourmet XML File')
24
GXML = _('Gourmet XML File (Obsolete, < v.0.8.2)')
25
EDFG = _('Eat Drink Feel Good XML File')
27
# Our list of filename (for user), mimetype, extensions
28
# for each file we can save
30
[WEBPAGE,['text/html'],['']],
31
[MMF,['text/mmf'],['*.mmf','*.MMF']],
32
[TXT,['text/plain'],['*.txt','*.TXT']],
33
[GXML2,['text/xml'],['*.grmt','*.xml','*.XML']],
34
[PDF,['application/pdf'],['*.pdf']],
35
#[EDFG,['text/xml'],['*.xml','*.XML']],
36
#[GXML,['text/xml'],['*.xml','*.XML']],
39
saveas_single_filters = [
40
[WEBPAGE,['text/html'],['*.html','*.htm','*.HTM','*.HTML']],
41
[MMF,['text/mmf'],['*.mmf','*.MMF']],
42
[TXT,['text/plain'],['*.txt','*.TXT']],
43
#[GXML,['text/xml'],['*.xml','*.XML']],
44
[GXML2,['text/xml'],['*.grmt','*.xml','*.XML']],
45
[PDF,['application/pdf'],['*.pdf']],
46
#[EDFG,['text/xml'],['*.xml','*.XML']],
49
# Add RTF to our files if it's supported
51
saveas_filters.append([RTF,['application/rtf','text/rtf'],['*.rtf','*.RTF']]),
52
saveas_single_filters.append([RTF,['application/rtf','text/rtf'],['*.rtf','*.RTF']]),
54
# Our dictionary (keyed by filetype description string) of exporters.
55
# This works pretty magically: 'mult_exporter' and 'exporter' keys are lambdas
56
# that take a dictionary of standard arguments which we can use as we like
57
# {'rd':recipe_database,'rv':recipe_view,'file':outfile,'conv':converter_instance,
58
# 'prog':progress_displaying_function,'rec':individual_recipe_to_export,...}
60
WEBPAGE : {'mult_exporter': lambda args : html_exporter.website_exporter(
65
progress_func=args['prog']),
66
'exporter': lambda args : html_exporter.html_exporter(
70
change_units=args['change_units'],
73
'label':_('Exporting Webpage'),
74
'sublabel':_('Exporting recipes to HTML files in directory %(file)s'),
75
'single_completed':_('Recipe saved as HTML file %(file)s'),
77
MMF : {'mult_exporter':lambda args : exporter.ExporterMultirec(
84
progress_func=args['prog'],
85
exporter=mealmaster_exporter.mealmaster_exporter),
86
'exporter': lambda args: mealmaster_exporter.mealmaster_exporter(args['rd'],
90
change_units=args['change_units'],
92
'label':_('MealMaster Export'),
93
'sublabel':_('Exporting recipes to MealMaster file %(file)s.'),
94
'single_completed':_('Recipe saved as MealMaster file %(file)s'),
96
TXT : {'mult_exporter':lambda args: exporter.ExporterMultirec(
97
args['rd'],args['rv'],args['file'],
99
progress_func=args['prog']),
100
'exporter':lambda args: exporter.exporter_mult(args['rd'],
104
change_units=args['change_units'],
106
'label':_('Text Export'),
107
'sublabel':_('Exporting recipes to Plain Text file %(file)s.'),
108
'single_completed':_('Recipe saved as Plain Text file %(file)s'),
110
GXML2 : {'mult_exporter':lambda args: gxml2_exporter.recipe_table_to_xml(
114
progress_func=args['prog']),
115
'exporter': lambda args: gxml2_exporter.recipe_table_to_xml(args['rd'],
118
change_units=args['change_units'],
121
'label':_('Gourmet XML Export'),
122
'sublabel':_('Exporting recipes to Gourmet XML file %(file)s.'),
123
'single_completed':_('Recipe saved in Gourmet XML file %(file)s.'),
125
RTF : {'mult_exporter':lambda args : rtf_exporter.rtf_exporter_multidoc(args['rd'],
128
progress_func=args['prog']),
129
'exporter': lambda args: rtf_exporter.rtf_exporter(args['rd'],
132
change_units=args['change_units'],
134
'label':_('RTF Export'),
135
'sublabel':_('Exporting recipes to Rich Text file %(file)s.'),
136
'single_completed':_('Recipe saved as Rich Text file %(file)s'),
140
PDF : {'mult_exporter':lambda args: pdf_exporter.PdfExporterMultiDoc(args['rd'],
143
progress_func=args['prog'],
144
pdf_args=args['extra_prefs'],
146
'exporter':lambda args: pdf_exporter.PdfExporter(args['rd'],
149
change_units=args['change_units'],
151
pdf_args=args['extra_prefs'],
153
'label':_('PDF Export'),
154
'sublabel':_('Exporting recipes to PDF %(file)s.'),
155
'single_completed':_('Recipe saved as PDF %(file)s'),
156
'extra_prefs_dialog':pdf_exporter.get_pdf_prefs,
160
# EDFG : {'mult_exporter': lambda args : eatdrinkfeelgood_exporter.EdfgXmlM(
165
# progress_func=None),
166
# 'exporter': lambda args : eatdrinkfeelgood_exporter.EdfgXml(
170
# change_units=args['change_units'],
172
# conv=args['conv']),
173
# 'label':_('Exporting Eat Drink Feel Good Format'),
174
# 'sublabel':_('Exporting recipes to EDFG in directory %(file)s'),
175
# 'single_completed':_('Recipe saved as EDFG file %(file)s'),
179
for name,mimetype,extensions in saveas_single_filters:
180
exporter_dict[name]['single_extension']=extensions[0].strip('.*')
181
for name,mimetype,extensions in saveas_filters:
182
exporter_dict[name]['multiple_extension']=extensions[0].strip('.*')
187
import gourmet.recipeManager, gourmet.convert
188
self.rm = gourmet.recipeManager.RecipeManager(**gourmet.recipeManager.dbargs)
189
self.conv = gourmet.convert.Converter()
191
def interactive_test (self):
192
self.run_export(**self.get_choice())
194
def get_choice (self):
195
print 'We can export: '
196
for n,f in enumerate(saveas_filters):
198
n = raw_input('Choose format: ')
199
while type(n)==str or n < 0 or n > len(saveas_filters):
203
n = raw_input('Choose format (enter number of a choice please!): ')
204
format=saveas_filters[n][0]
205
fn = raw_input('Export %s to file: '%format)
206
if raw_input('Multiple recipes? y or n [n]: ')=='y':
218
def run_export (self, **args):
219
defaults = {'rd':self.rm,
221
'rec':self.rm.recipe_table.select(deleted=False)[0],
222
'rv':self.rm.recipe_table.select(deleted=False),
229
for k,v in args.items(): defaults[k]=v
230
exporter = exporter_dict[defaults['format']][defaults['mode']]
231
print 'Running exporter ',exporter, defaults['format'], defaults['mode'], defaults['rec'].title,
233
if hasattr(e,'run'): e.run()
235
defaults['out'].close()
238
if __name__ == '__main__':