mirror of
https://github.com/ankitects/anki.git
synced 2025-09-20 06:52:21 -04:00
remove pybackend.py
This commit is contained in:
parent
a88bc1e836
commit
5d6581faf2
1 changed files with 0 additions and 84 deletions
|
@ -1,84 +0,0 @@
|
|||
# Copyright: Ankitects Pty Ltd and contributors
|
||||
# License: GNU AGPL, version 3 or later; http://www.gnu.org/licenses/agpl.html
|
||||
|
||||
"""
|
||||
A Python implementation of some backend commands.
|
||||
|
||||
Unimplemented commands will be forwarded on to the Rust backend.
|
||||
"""
|
||||
|
||||
from __future__ import annotations
|
||||
|
||||
from typing import Any, Dict, Tuple
|
||||
|
||||
import anki # pylint: disable=unused-import
|
||||
import anki.backend_pb2 as pb
|
||||
|
||||
|
||||
class PythonBackend:
|
||||
def __init__(self, col: anki.storage._Collection):
|
||||
self.col = col
|
||||
|
||||
def run_command_bytes(self, input: bytes) -> bytes:
|
||||
pb_input = pb.BackendInput()
|
||||
pb_input.ParseFromString(input)
|
||||
|
||||
pb_output = self.run_command(pb_input)
|
||||
|
||||
output = pb_output.SerializeToString()
|
||||
return output
|
||||
|
||||
def run_command(self, input: pb.BackendInput) -> pb.BackendOutput:
|
||||
kind = input.WhichOneof("value")
|
||||
handler = getattr(self, kind, None)
|
||||
# run the equivalent of the following, based on available method names
|
||||
# if kind == "deck_tree":
|
||||
# return pb.BackendOutput(deck_tree=self.deck_tree(input.deck_tree))
|
||||
if handler is not None:
|
||||
input_variant = getattr(input, kind)
|
||||
output_variant = handler(input_variant)
|
||||
output_args: Dict[str, Any] = {kind: output_variant}
|
||||
output = pb.BackendOutput(**output_args)
|
||||
return output
|
||||
else:
|
||||
# forward any unknown commands onto the Rust backend
|
||||
return self.col.backend._run_command(input)
|
||||
|
||||
def deck_tree(self, _input: pb.Empty) -> pb.DeckTreeOut:
|
||||
native = self.col.sched.deckDueTree()
|
||||
return native_deck_tree_to_proto(native)
|
||||
|
||||
# def find_cards(self, input: pb.FindCardsIn) -> pb.FindCardsOut:
|
||||
# cids = self.col.findCards(input.search)
|
||||
# return pb.FindCardsOut(card_ids=cids)
|
||||
#
|
||||
# def browser_rows(self, input: pb.BrowserRowsIn) -> pb.BrowserRowsOut:
|
||||
# sort_fields = []
|
||||
# for cid in input.card_ids:
|
||||
# sort_fields.append(
|
||||
# self.col.db.scalar(
|
||||
# "select sfld from notes n,cards c where n.id=c.nid and c.id=?", cid
|
||||
# )
|
||||
# )
|
||||
# return pb.BrowserRowsOut(sort_fields=sort_fields)
|
||||
|
||||
|
||||
def native_deck_tree_to_proto(native):
|
||||
top = pb.DeckTreeNode(children=[native_deck_node_to_proto(c) for c in native])
|
||||
out = pb.DeckTreeOut(top=top)
|
||||
return out
|
||||
|
||||
|
||||
def native_deck_node_to_proto(native: Tuple) -> pb.DeckTreeNode:
|
||||
return pb.DeckTreeNode(
|
||||
# fixme: need to decide whether full list
|
||||
# should be included or just tail element
|
||||
names=[native[0]],
|
||||
deck_id=native[1],
|
||||
review_count=native[2],
|
||||
learn_count=native[3],
|
||||
new_count=native[4],
|
||||
children=[native_deck_node_to_proto(c) for c in native[5]],
|
||||
# fixme: currently hard-coded
|
||||
collapsed=False,
|
||||
)
|
Loading…
Reference in a new issue