def get_card_type(self, id, id_is_internal): # Since there are so few of them, we don't use internal _ids. # ids should be unique too. if id in self.component_manager.card_type_by_id: return self.component_manager.card_type_by_id[id] parent_id, child_id = "", id if "::" in id: parent_id, child_id = id.rsplit("::", 1) parent = self.get_card_type(parent_id, id_is_internal=-1) else: parent = CardType(self.component_manager) sql_res = self.con.execute("select * from card_types where id=?", (id, )).fetchone() card_type = type(mangle(id), (parent.__class__, ), {"name": sql_res["name"], "id": id})(self.component_manager) for attr in ("fields", "unique_fields", "required_fields", "keyboard_shortcuts"): setattr(card_type, attr, eval(sql_res[attr])) self._get_extra_data(sql_res, card_type) card_type.fact_views = [] for cursor in self.con.execute("""select _fact_view_id from fact_views_for_card_type where card_type_id=?""", (id, )): card_type.fact_views.append(self.get_fact_view(\ cursor["_fact_view_id"], id_is_internal=True)) return card_type
def clone_card_type(self, card_type, clone_name): from mnemosyne.libmnemosyne.utils import mangle clone_id = card_type.id + "::" + clone_name if clone_id in [card_t.id for card_t in self.card_types()]: self.main_widget.error_box(_("Card type name already exists.")) return None card_type_class = type(mangle(clone_name), (card_type.__class__, ), {"name": clone_name, "id": clone_id}) cloned_card_type = card_type_class(self.component_manager) self.database().add_card_type(cloned_card_type) self.component_manager.register(cloned_card_type) self.database().save() return cloned_card_type
def clone_card_type(self, card_type, clone_name): from mnemosyne.libmnemosyne.utils import mangle clone_id = card_type.id + "::" + clone_name if clone_id in [card_t.id for card_t in self.card_types()]: self.main_widget().show_error(_("Card type name already exists.")) return None card_type_class = type(mangle(clone_name), (card_type.__class__, ), {"name": clone_name, "id": clone_id}) cloned_card_type = card_type_class(self.component_manager) cloned_card_type.fact_views = [] for fact_view in card_type.fact_views: cloned_fact_view = copy.copy(fact_view) cloned_fact_view.id = clone_id + "." + fact_view.id.rsplit(".", 1)[1] cloned_card_type.fact_views.append(cloned_fact_view) self.database().add_fact_view(cloned_fact_view) self.database().add_card_type(cloned_card_type) self.config().clone_card_type_properties(card_type, cloned_card_type) self.database().save() return cloned_card_type