def __init__(self): CardType.__init__(self) self.id = "4" self.name = _("Map") self.description = _("A card type for learning locations on a map") # List and name the keys. self.fields.append(("loc", _("Location"))) self.fields.append(("blank", _("Blank map"))) self.fields.append(("marked", _("Marked map"))) # Recognition. v = FactView(1, _("Recognition")) v.q_fields = ["marked"] v.a_fields = ["loc"] v.required_fields = ["marked", "loc"] self.fact_views.append(v) # Production. v = FactView(2, _("Production")) v.q_fields = ["loc","blank"] v.a_fields = ["marked"] v.required_fields = ["loc", "blank", "marked"] v.a_on_top_of_q = True self.fact_views.append(v) # The following field needs to be unique. self.unique_fields = ["loc"]
def __init__(self, language_name=""): CardType.__init__(self) if not language_name: self.id = "2" self.name = _("Front-to-back and back-to-front") self.is_language = False else: self.id = "2_" + language_name self.name = language_name self.is_language = True # List and name the keys. self.fields.append(("q", _("Question"))) self.fields.append(("a", _("Answer"))) # Front-to-back. v = FactView(1, _("Front-to-back")) v.q_fields = ["q"] v.a_fields = ["a"] v.required_fields = ["q"] self.fact_views.append(v) # Back-to-front. v = FactView(2, _("Back-to-front")) v.q_fields = ["a"] v.a_fields = ["q"] v.required_fields = ["a"] self.fact_views.append(v) # The question field needs to be unique. As for duplicates is the answer # field, these are better handled through a synonym detection plugin. self.unique_fields = ["q"]
def __init__(self, language_name=""): CardType.__init__(self) if not language_name: self.id = "3" self.name = _("Foreign word with pronunciation") self.is_language = False else: self.id = "3_" + language_name self.name = language_name self.is_language = True # List and name the keys. self.fields.append(("f", _("Foreign word"))) self.fields.append(("p", _("Pronunciation"))) self.fields.append(("t", _("Translation"))) # Recognition. v = FactView(1, _("Recognition")) v.q_fields = ["f"] v.a_fields = ["p", "t"] v.required_fields = ["f"] self.fact_views.append(v) # Production. v = FactView(2, _("Production")) v.q_fields = ["t"] v.a_fields = ["f", "p"] v.required_fields = ["t"] self.fact_views.append(v) # The foreign word field needs to be unique. As for duplicates is the # answer field, these are better handled through a synonym detection # plugin. self.unique_fields = ["f"]
def fact_view_from_log_entry(self, log_entry): # Get fact view object to be deleted now. if log_entry["type"] == EventTypes.DELETED_FACT_VIEW: return self.get_fact_view(log_entry["o_id"], id_is_internal=False) # Create an empty shell of fact view object that will be deleted later # during this sync. if "name" not in log_entry: return FactView("irrelevant", log_entry["o_id"]) # Create fact view object. fact_view = FactView(log_entry["name"], log_entry["o_id"]) fact_view.q_fields = eval(log_entry["q_fields"]) fact_view.a_fields = eval(log_entry["a_fields"]) fact_view.a_on_top_of_q = bool(eval(log_entry["a_on_top_of_q"])) fact_view.type_answer = bool(eval(log_entry["type_answer"])) if "extra" in log_entry: fact_view.extra_data = eval(log_entry["extra"]) return fact_view
def __init__(self): CardType.__init__(self) self.id = "1" self.name = _("Front-to-back only") # List and name the keys. self.fields.append(("q", _("Question"))) self.fields.append(("a", _("Answer"))) # Front-to-back. v = FactView(1, _("Front-to-back")) v.q_fields = ["q"] v.a_fields = ["a"] v.required_fields = ["q"] self.fact_views.append(v) # The following field needs to be unique. self.unique_fields = ["q"]
def get_view(self, view_id): """Get view object by id.""" res = self.conn.execute("select name from views where id=?", (view_id, )).fetchone() fact_view = FactView(view_id, res["name"]) # Find fact view in registered card_types and copy # *fields attributes from it for card_type in card_types(): for view in card_type.fact_views: if view.name == res["name"]: fact_view.q_fields = view.q_fields fact_view.a_fields = view.a_fields fact_view.required_fields = view.required_fields return fact_view raise RuntimeError("Wrong view(id=%d) found in the database" % view_id)