コード例 #1
0
    def setup_treeview_column (self, ike, key_col, instant_apply=False):
        '''Set up a treeview column to display your data.

        The key_col is the column in the treemodel which will contain
        your data in the model. It\'s your responsibility to get
        whatever other data you need yourself.

        If you make this editable, it\'s up to you to apply the
        changes as well to the database. If instant_apply is True,
        then apply them instantly; if False, apply them when this
        class\'s save method is called.
        '''
        renderer = gtk.CellRendererCombo()
        renderer.connect('editing-started',self.start_edit_cb)
        renderer.connect('edited',self.key_edited_cb,(ike,key_col,instant_apply))
        # Build shopcat model...
        self.rd = get_recipe_manager()
        self.shopcat_model = gtk.ListStore(str)
        for val in self.rd.get_unique_values('shopcategory',table=self.rd.shopcats_table):
            if val: self.shopcat_model.append([val])
        renderer.set_property('model',self.shopcat_model)
        renderer.set_property('text-column',0)        
        renderer.set_property('editable',True)
        renderer.set_property('mode',gtk.CELL_RENDERER_MODE_EDITABLE)
        renderer.set_property('sensitive',True)        
        tvc = gtk.TreeViewColumn(self.title,renderer)
        tvc.set_cell_data_func(renderer,self.cell_data_func,key_col)
        self.tvcs[renderer] = tvc
        return tvc
コード例 #2
0
    def setup_treeview_column (self, ike, key_col, instant_apply=False):
        '''Set up a treeview column to display your data.

        The key_col is the column in the treemodel which will contain
        your data in the model. It\'s your responsibility to get
        whatever other data you need yourself.

        If you make this editable, it\'s up to you to apply the
        changes as well to the database. If instant_apply is True,
        then apply them instantly; if False, apply them when this
        class\'s save method is called.
        '''
        renderer = Gtk.CellRendererCombo()
        renderer.connect('editing-started',self.start_edit_cb)
        renderer.connect('edited',self.key_edited_cb,(ike,key_col,instant_apply))
        # Build shopcat model...
        self.rd = get_recipe_manager()
        self.shopcat_model = Gtk.ListStore(str)
        for val in self.rd.get_unique_values('shopcategory',table=self.rd.shopcats_table):
            if val: self.shopcat_model.append([val])
        renderer.set_property('model',self.shopcat_model)
        renderer.set_property('text-column',0)
        renderer.set_property('editable',True)
        renderer.set_property('mode',Gtk.CellRendererMode.EDITABLE)
        renderer.set_property('sensitive',True)
        tvc = Gtk.TreeViewColumn(self.title,renderer)
        tvc.set_cell_data_func(renderer,self.cell_data_func,key_col)
        self.tvcs[renderer] = tvc
        return tvc
コード例 #3
0
ファイル: importer.py プロジェクト: AlanWidmer/gourmet
    def __init__(
        self,
        rd=None,  # OBSOLETE
        total=0,
        prog=None,  # OBSOLETE
        do_markup=True,
        conv=None,
        rating_converter=None,
        name="importer",
    ):
        """rd is our recipeData instance.

        Total is used to keep track of progress.

        do_markup should be True if instructions and modifications
        come to us unmarked up (i.e. if we need to escape < and &,
        etc. -- this might be False if importing e.g. XML).
        """

        timeaction = TimeAction("importer.__init__", 10)
        if not conv:
            self.conv = convert.get_converter()
        self.id_converter = {}  # a dictionary for tracking named IDs
        self.total = total
        if prog or rd:
            import traceback

            traceback.print_stack()
            if prog:
                print "WARNING: ", self, "handed obsolete parameter prog=", prog
            if rd:
                print "WARNING: ", self, "handed obsolete parameter rd=", rd
        self.do_markup = do_markup
        self.count = 0
        self.rd = get_recipe_manager()
        self.rd_orig_ing_hooks = self.rd.add_ing_hooks
        self.added_recs = []
        self.added_ings = []
        # self.rd_orig_hooks = self.rd.add_hooks
        self.rd.add_ing_hooks = []
        # self.rd.add_hooks = []
        self.position = 0
        self.group = None
        # allow threaded calls to pause
        self.suspended = False
        # allow threaded calls to be terminated (this
        # has to be implemented in subclasses).
        self.terminated = False
        # Our rating converter -- if we've been handed a class, we
        # assume our caller will handle doing the
        # conversion. Otherwise we do it ourselves.
        if rating_converter:
            self.rating_converter = rating_converter
            self.do_conversion = False
        else:
            self.rating_converter = RatingConverter()
            self.do_conversion = True
        self.km = keymanager.get_keymanager()
        timeaction.end()
        SuspendableThread.__init__(self, name=name)
コード例 #4
0
 def __init__(self, rd=None, in_recipes=None, on_close_callback=None):
     if rd:
         self.rd = rd
     else:
         self.rd = recipeManager.get_recipe_manager()
     self.in_recipes = in_recipes
     self.on_close_callback = on_close_callback
     self.to_merge = []  # Queue of recipes to be merged...
     self.ui = Gtk.Builder()
     self.ui.add_from_file(os.path.join(current_path, 'recipeMerger.ui'))
     self.get_widgets()
     self.searchTypeCombo.set_active(self.COMPLETE_DUP_MODE)
     self.mm = mnemonic_manager.MnemonicManager()
     self.mm.add_builder(self.ui)
     self.mm.fix_conflicts_peacefully()
     self.ui.connect_signals({
         'on_searchTypeCombo_changed':
         lambda *args: self.populate_tree(),
         'on_includeDeletedRecipesCheckButton_toggled':
         lambda *args: self.populate_tree(),
         'on_mergeAllButton_clicked':
         self.merge_all,
         'on_cancelMergeButton_clicked':
         self.cancel_merge,
         'on_mergeSelectedButton_clicked':
         self.merge_selected,
         'on_applyButton_clicked':
         self.apply_merge,
         'auto_merge':
         self.offer_auto_merge,
         'close':
         self.close,
     })
コード例 #5
0
def test_mmf (recs, filename):
    rd = get_recipe_manager()
    assert_equal(recs[0].title,'Almond Mushroom Pate')
    assert_equal(recs[0].yields, 6)
    assert_equal(recs[0].yield_unit,'servings')
    assert_equal(recs[3].title,'Anchovy Olive Dip')
    ings = rd.get_ings(recs[3])
    assert_equal(ings[1].item,'Finely chopped stuffed green olives') # test line-wrap
コード例 #6
0
def test_mmf (recs, filename):
    rd = get_recipe_manager()
    assert_equal(recs[0].title,'Almond Mushroom Pate')
    assert_equal(recs[0].yields, 6)
    assert_equal(recs[0].yield_unit,'servings')
    assert_equal(recs[3].title,'Anchovy Olive Dip')
    ings = rd.get_ings(recs[3])
    assert_equal(ings[1].item,'Finely chopped stuffed green olives') # test line-wrap
コード例 #7
0
ファイル: importer.py プロジェクト: takluyver/gourmet
    def __init__(
            self,
            rd=None,  # OBSOLETE
            total=0,
            prog=None,  # OBSOLETE
            do_markup=True,
            conv=None,
            rating_converter=None,
            name='importer'):
        """rd is our recipeData instance.

        Total is used to keep track of progress.

        do_markup should be True if instructions and modifications
        come to us unmarked up (i.e. if we need to escape < and &,
        etc. -- this might be False if importing e.g. XML).
        """

        timeaction = TimeAction('importer.__init__', 10)
        if not conv: self.conv = convert.get_converter()
        self.id_converter = {}  # a dictionary for tracking named IDs
        self.total = total
        if prog or rd:
            import traceback
            traceback.print_stack()
            if prog:
                print('WARNING: ', self, 'handed obsolete parameter prog=',
                      prog)
            if rd:
                print('WARNING: ', self, 'handed obsolete parameter rd=', rd)
        self.do_markup = do_markup
        self.count = 0
        self.rd = get_recipe_manager()
        self.rd_orig_ing_hooks = self.rd.add_ing_hooks
        self.added_recs = []
        self.added_ings = []
        #self.rd_orig_hooks = self.rd.add_hooks
        self.rd.add_ing_hooks = []
        #self.rd.add_hooks = []
        self.position = 0
        self.group = None
        # allow threaded calls to pause
        self.suspended = False
        # allow threaded calls to be terminated (this
        # has to be implemented in subclasses).
        self.terminated = False
        # Our rating converter -- if we've been handed a class, we
        # assume our caller will handle doing the
        # conversion. Otherwise we do it ourselves.
        if rating_converter:
            self.rating_converter = rating_converter
            self.do_conversion = False
        else:
            self.rating_converter = RatingConverter()
            self.do_conversion = True
        self.km = keymanager.get_keymanager()
        timeaction.end()
        SuspendableThread.__init__(self, name=name)
コード例 #8
0
def test_2_col (recs, filename):
    rd = get_recipe_manager()
    assert len(recs) == 1,'Expected 1 recipes; got %s (%s)'%(len(recs),recs)
    chile_ings = rd.get_ings(recs[0])
    print 'chile_ings=',chile_ings
    assert_equal(chile_ings[0].amount, 2)
    assert_equal(chile_ings[1].amount, 1) # second column
    assert_equal_ignorecase(chile_ings[1].ingkey, 'eggs')
    assert_equal(chile_ings[1].item, 'Eggs; separated')
    assert_equal_ignorecase(chile_ings[0].ingkey, u'Chiles, calif.')
    assert_equal(recs[0].yields, 2)
    assert_equal(recs[0].yield_unit, 'servings')
    assert_equal(recs[0].title, u'Chiles Rellenos de Queso')
    assert_equal(chile_ings[5].item, 'Tomatoes; peeled')
    assert_equal_ignorecase(chile_ings[5].inggroup, 'Tomato Sauce')
コード例 #9
0
def test_2_col(recs, filename):
    rd = get_recipe_manager()
    assert len(recs) == 1, "Expected 1 recipes; got %s (%s)" % (len(recs), recs)
    chile_ings = rd.get_ings(recs[0])
    print "chile_ings=", chile_ings
    assert_equal(chile_ings[0].amount, 2)
    assert_equal(chile_ings[1].amount, 1)  # second column
    assert_equal_ignorecase(chile_ings[1].ingkey, "eggs")
    assert_equal(chile_ings[1].item, "Eggs; separated")
    assert_equal_ignorecase(chile_ings[0].ingkey, u"Chiles, calif.")
    assert_equal(recs[0].yields, 2)
    assert_equal(recs[0].yield_unit, "servings")
    assert_equal(recs[0].title, u"Chiles Rellenos de Queso")
    assert_equal(chile_ings[5].item, "Tomatoes; peeled")
    assert_equal_ignorecase(chile_ings[5].inggroup, "Tomato Sauce")
コード例 #10
0
def test_2_col (recs, filename):
    rd = get_recipe_manager()
    assert len(recs) == 1,'Expected 1 recipes; got %s (%s)'%(len(recs),recs)
    chile_ings = rd.get_ings(recs[0])
    print('chile_ings=',chile_ings)
    assert_equal(chile_ings[0].amount, 2)
    assert_equal(chile_ings[1].amount, 1) # second column
    assert_equal_ignorecase(chile_ings[1].ingkey, 'eggs')
    assert_equal(chile_ings[1].item, 'Eggs; separated')
    assert_equal_ignorecase(chile_ings[0].ingkey, 'Chiles, calif.')
    assert_equal(recs[0].yields, 2)
    assert_equal(recs[0].yield_unit, 'servings')
    assert_equal(recs[0].title, 'Chiles Rellenos de Queso')
    assert_equal(chile_ings[5].item, 'Tomatoes; peeled')
    assert_equal_ignorecase(chile_ings[5].inggroup, 'Tomato Sauce')
コード例 #11
0
 def test_grm_export (pdf_args=DEFAULT_PDF_ARGS):
     fname = tempfile.mktemp('.pdf')
     #if os.name == 'nt':
     #    base = 'C:\\grm\grm'
     #else:
     #    base = '/home/tom/Projects/grm'
     import gourmet.recipeManager as rm
     rd = rm.get_recipe_manager(file=os.path.join(base,'src','tests','reference_setup','recipes.db'))
     #rd = rm.RecipeManager()
     rr = []
     #for n,rec in enumerate(rd.fetch_all(rd.recipe_table,deleted=False)):
     #    if rec.image:
     #        rr.append(rec)
     pe = PdfExporterMultiDoc(rd,rd.fetch_all(rd.recipe_table,deleted=False),fname,pdf_args=pdf_args)
     pe.run()
     return fname
コード例 #12
0
ファイル: pdf_exporter.py プロジェクト: HaraldFranzen/gourmet
 def test_grm_export (pdf_args=DEFAULT_PDF_ARGS):
     fname = tempfile.mktemp('.pdf')
     #if os.name == 'nt':
     #    base = 'C:\\grm\grm'
     #else:
     #    base = '/home/tom/Projects/grm'
     import gourmet.recipeManager as rm
     rd = rm.get_recipe_manager(file=os.path.join(base,'src','tests','reference_setup','recipes.db'))
     #rd = rm.RecipeManager()
     rr = []
     #for n,rec in enumerate(rd.fetch_all(rd.recipe_table,deleted=False)):
     #    if rec.image:
     #        rr.append(rec)
     pe = PdfExporterMultiDoc(rd,rd.fetch_all(rd.recipe_table,deleted=False),fname,pdf_args=pdf_args)
     pe.run()
     return fname
コード例 #13
0
 def __init__(self):
     from gourmet.recipeManager import get_recipe_manager
     self.rm = get_recipe_manager()
コード例 #14
0
 def setup_db(self):
     self.im = get_im()
     self.db = get_recipe_manager()
コード例 #15
0
 def __init__ (self):
     from gourmet.recipeManager import get_recipe_manager
     self.rm = get_recipe_manager()
コード例 #16
0
 def add_ing_from_text(self, txt):
     parsed_dict = get_recipe_manager().parse_ingredient(txt)
     self.ing = parsed_dict
     self.commit_ing()
コード例 #17
0
 def setup_db (self):
     self.im = get_im()
     self.db = get_recipe_manager()