Coder Social home page Coder Social logo

ankisync's Introduction

This project is deprecated. Please see ankisync2.

ankisync

PyPI version shields.io PyPI license

Doing what AnkiConnect cannot do, including

  • Creating new *.apkg
  • Creating new note type / model
  • Upserting notes
  • Setting next review
  • Setting card statistics
  • Note ids to Card ids

But of course, this is very unsafe compared to pure AnkiConnect. I will not hold liability to damage it may cost.

Usage

Please close your Anki application first before doing this!

from ankisync.anki import Anki
with Anki() as a:
    a.add_model(
        name='foo',
        fields=['field_a', 'field_b', 'field_c'],
        templates={
            'Forward': (QUESTION1, ANSWER1),
            'Reverse': (QUESTION2, ANSWER2)
        }
    )

Most of the other API's are similar to AnkiConnect, but _by_id()'s are preferred.

Creating a new *.apkg is also possible.

from ankisync.apkg import Apkg
with Apkg('bar.apkg') as a:
    model_id = a.init(
        first_model=dict(
            name='foo',
            fields=['field_a', 'field_b', 'field_c'],
            templates={
                'Forward': (QUESTION1, ANSWER1),
                'Reverse': (QUESTION2, ANSWER2)
            }
        ),
        first_deck='baz',
        first_note_data=False
    )
    a.add_note({
        'modelName': 'foo',
        'deckId': 1,  # "Default" deck
        'fields': {
            'field_a': 'aaaaa',
            'field_b': 123  # Numbers will be converted to string.
        }
    })

For the example of how I use it in action, see https://github.com/patarapolw/zhlib/blob/master/zhlib/export.py

Installation

pip install ankisync

Contributions

  • What features outside AnkiConnect (or inside) do you want? I will try to implement it.
  • Help me understand the documentations, AnkiDroid Wiki, and Anki decks collaboration Wiki
  • Please help me implement the NotImplemented methods.

Note

  • This is the successor to AnkiTools. I will not update it anymore.

ankisync's People

Contributors

patarapolw avatar risingorange avatar turakar avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar

ankisync's Issues

anki_convert()

I looked at your old project and found this:

>>> from AnkiTools import anki_convert
>>> anki_convert('Chinese.apkg', out_file='Chinese_anki.xlsx')

This was exactly what I was looking for.

How can I do this with ankisync?

Write test suite

Or Manual testing, perhaps via Jupyter Notebook.

I might not be as much help, as I am not very into Python now.

How to read decks?

How can I iterate over the notes of a specific deck? And how do I list all decks? Or is that not possible with this library?

Adding notes to existing apkg and maintain progress

Thank you for the wonderful library. It has really eased some tedious processes.
I was wondering if it's possible to add to an existing apkg while maintaining the progress inside the app, without losing the stats for reviews, etc.

Thank you in advance

a.update_note_fields() doesn't make persistent changes

with Apkg("./test.apkg") as deck1:
    for note in deck1.iter_notes():
        print(note)
        deck1.update_note_fields(note_id=note["_nid"], fields={"Text": "asdf"})

This prints every note in an .apkg and updates the text field with asdf. When running this a second time, the Text fields don't appear to be updated. I've confirmed this by importing the deck into Anki, all the Text fields are still their original values. What is going wrong?

Anki database structure has changed

I don't know which version of Anki introduced these changes. They are also not described here https://github.com/ankidroid/Anki-Android/wiki/Database-Structure. This is just based on my observations of running Anki 2.1.30. I would like to know if others also have observed this changes and in what version of Anki they were introduced / what version of Anki is compatible with AnkiSync.

The five last columns of the Col table (conf, models, decks, dconf, tags) which contained Json data are empty now. Because of this calling methods of the Anki class which access the Col table throw JsonDecodeErrors (e.g. calling Anki.iter_notes()).
The information which was contained in these columns is stored in their own tables now.
conf -> config
models -> notetypes (the flds are in their own table too - fields)
decks -> decks
dconf -> deck_config
tags -> tags (the table is empty, but notes have tags)

get_collection_path does not work on Windows

To make the function get the actual path on my machine, I had to change the code at

collection_path = os.path.join(appdirs.user_data_dir('Anki2'), account_name, 'collection.anki2')
from:
collection_path = os.path.join(appdirs.user_data_dir('Anki2'), account_name, 'collection.anki2')

to:
collection_path = os.path.join(appdirs.user_data_dir('Anki2', appauthor=False, roaming=True), account_name, 'collection.anki2')

The first of the two generates the (wrong) path "C:\Users\username\AppData\Local\Anki2\Anki2\User 1\collection.anki2",
the second "C:\Users\username\AppData\Roaming\Anki2\User 1\collection.anki2".

dict used as value in dict at anki.py:316

Traceback (most recent call last):
  File "main2.py", line 7, in <module>
    print(deck1.note_info(note["_nid"]))
  File "/usr/lib/python3.7/site-packages/ankisync/anki.py", line 316, in note_info
    'fields': dict(zip(header, row))
TypeError: unhashable type: 'dict'

Happens when I use deck.note_info(...)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.