#! /usr/bin/env python3 from sqlalchemy.ext.declarative import declarative_base from sqlalchemy import Column, Integer, String, DateTime, ForeignKey from sqlalchemy.orm import relationship, backref Base = declarative_base() class Transaction(Base): __tablename__ = "Transaction" id = Column(Integer, primary_key=True) name = Column(String) date = Column(DateTime) iban = Column(String) amount = Column(Integer) description = Column(String) category_id = Column(Integer, ForeignKey("Category.id")) class Category(Base): __tablename__ = "Category" id = Column(Integer, primary_key=True) name = Column(String) transactions = relationship("Category") parent_id = Column(Integer, ForeignKey("Category.id")) children = relationship("Category", backref=backref("parent", remote_side=[id])) def __repr__(self): return f"" def is_child(self): # we are a child if we have zero children return len(self.children) == 0 def full_name(self): if not self.parent: return self.name else: return f"{self.parent.full_name()}:{self.name}"