Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
55 changes: 55 additions & 0 deletions flashcards/base.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,55 @@
from flashcards.database import session, Card, Deck, init_db


def add_deck(name):
session.add(Deck(name=name))
session.commit()


def delete_deck(deck_id):
deck = session.query(Deck).filter_by(id=deck_id).first()
session.delete(deck)
session.commit()


def list_decks():
decks = session.query(Deck).all()

if decks:
print("Existing decks:")
for deck in decks:
print(f"{deck.id}: {deck.name}")
else:
print("There are no decks created yet")


def add_card(front, back, deck_id=1):
session.add(Card(front=front, back=back, deck_id=deck_id))
session.commit()


def delete_card(card_id):
card = session.query(Card).filter_by(id=card_id).first()
session.delete(card)
session.commit()


def list_cards():
cards = session.query(Card).all()

if cards:
print("Existing cards:")
for card in cards:
print(f"{card.id}: {card.front} - {card.back}")
else:
print("There are no cards created yet")


def main():
init_db()
list_decks()
list_cards()


if __name__ == "__main__":
main()
45 changes: 45 additions & 0 deletions flashcards/database.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
from sqlalchemy import create_engine, Column, Integer, String, ForeignKey
from sqlalchemy.orm import sessionmaker, declarative_base, relationship

DATABASE = "data/example.db"

engine = create_engine(f"sqlite:///{DATABASE}")
Session = sessionmaker(bind=engine)
session = Session()
Base = declarative_base()


class Deck(Base):
__tablename__ = "decks"

id = Column(Integer, primary_key=True)
name = Column(String, nullable=False)

cards = relationship("Card", order_by="Card.id",
cascade="all, delete-orphan", back_populates="deck")

def __repr__(self):
return f"<Deck(name='{self.name}')>"


class Card(Base):
__tablename__ = "cards"

id = Column(Integer, primary_key=True)
front = Column(String, nullable=False)
back = Column(String, nullable=False)
deck_id = Column(Integer, ForeignKey('decks.id'), nullable=False)

deck = relationship("Deck", back_populates="cards")

def __repr__(self):
return f"<Card(front='{self.front}', back='{self.back}')>"


def init_db():
Base.metadata.drop_all(engine)
Base.metadata.create_all(engine)

default_deck = Deck(name="default")
session.add(default_deck)
session.commit()
181 changes: 181 additions & 0 deletions poetry.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

3 changes: 2 additions & 1 deletion pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,8 @@ packages = [
]

[tool.poetry.dependencies]
python = "^3.5"
python = "^3.6"
SQLAlchemy = "^1.4.17"

[tool.poetry.dev-dependencies]

Expand Down