# Path: pyfeedreader/database.py
# def init_db():
# def drop_all():
# 
# Path: pyfeedreader/models/feed.py
# class Feed(Model):
#     __tablename__ = "feed"
#     id = Column('id', Integer, primary_key=True)
#     feed_url = Column(String(1024))
#     last_checked = Column(Integer)
#     subscribers = Column(Integer)
#     title = Column(String(128))
#     update_frequency = Column(Integer)
#     favicon = Column(String(1024))
#     metadata_update = Column(Integer)
# 
#     def __init__(self, update_frequency=1, favicon="", feed_url=None, last_checked=1, subscribers=1,
#                  title=u"Some feed", metadata_update=1):
#         self.feed_url = feed_url
#         self.last_checked = last_checked
#         self.subscribers = subscribers
#         self.title = title
#         self.update_frequency = update_frequency
#         self.favicon = favicon
#         self.metadata_update = metadata_update
# 
#     @staticmethod
#     def json_list(feeds):
#         """
#         Creates a json ready list of feeds that is ready for jsonify.
# 
#         :param feeds List of feeds to turn to json.
# 
#         :return Returns a list of dicts that is ready to be turned to json.
#         """
#         json_ready = []
#         for feed in feeds:
#             json_ready.append(
#                 Feed.json(feed)
#             )
# 
#         return json_ready
# 
#     @staticmethod
#     def json(feed):
#         """
#         Turns a single feed into a json ready dict.
# 
#         :param feed The feed to turn to json ready.
#         """
#         return {
#             "feed_url": feed.feed_url,
#             "title": feed.title,
#             "favicon": feed.favicon,
#             "id": feed.id,
#             "unread": feed.unread,
#         }
# 
#     @staticmethod
#     def unread(feed, db_session, limit=100):
#         """
#         Finds the number of unread entries for the feed, it will only check the amount of entries specified in in the
#         limit parameter, some feeds might have thousands of entries and it would take too long to check them all.
# 
#         :param feed: The feed you want to check.
#         :param db_session: Current database session.
#         :param limit: The limit of entries to be checked, by default this is set to 100.
#         :return: The updated feed object.
#         """
# 
#         entries = db_session.query(Entry).filter(
#             Entry.feed_id == feed.id).order_by(
#             desc(Entry.updated)).limit(limit).all()
# 
#         ids = []
#         for entry in entries:
#             ids.append(entry.id)
# 
#         read_entries = db_session.query(ReadEntry).filter(
#             ReadEntry.entry_id.in_(ids)).all()
# 
#         feed.unread = len(entries) - len(read_entries)
# 
#         return feed


from pyfeedreader.database import Model
from sqlalchemy import Column, Integer, String, ForeignKey
from sqlalchemy.orm import relationship
from pyfeedreader.models.feed import Feed


class Category(Model):
    """
    The Category class represent a category that is a user named collection of feeds.
    """
    __tablename__ = "category"
    id = Column('id', Integer, primary_key=True)
    name = Column(String(128))
    user_id = Column(Integer, ForeignKey('user.id'))
    category_entries = relationship("CategoryEntry")

    def __init__(self, name=None, user_id=None):
        self.name = name
        self.user_id = user_id

    def __repr__(self):
        return '<Category %r>' % self.username

    def get_feeds(self, db_session):
        """
        Creates the class variable feeds which is a list of the feed objects for this category.

        :param session: The current database session.
        :return:
        """
        self.feeds = []
        for entry in self.category_entries:
            f = db_session.query(Feed).filter(Feed.id == entry.feed_id).first()
            if f:

# Path: pyfeedreader/database.py
# def init_db():
# def drop_all():
# 
# Path: pyfeedreader/models/feed.py
# class Feed(Model):
#     __tablename__ = "feed"
#     id = Column('id', Integer, primary_key=True)
#     feed_url = Column(String(1024))
#     last_checked = Column(Integer)
#     subscribers = Column(Integer)
#     title = Column(String(128))
#     update_frequency = Column(Integer)
#     favicon = Column(String(1024))
#     metadata_update = Column(Integer)
# 
#     def __init__(self, update_frequency=1, favicon="", feed_url=None, last_checked=1, subscribers=1,
#                  title=u"Some feed", metadata_update=1):
#         self.feed_url = feed_url
#         self.last_checked = last_checked
#         self.subscribers = subscribers
#         self.title = title
#         self.update_frequency = update_frequency
#         self.favicon = favicon
#         self.metadata_update = metadata_update
# 
#     @staticmethod
#     def json_list(feeds):
#         """
#         Creates a json ready list of feeds that is ready for jsonify.
# 
#         :param feeds List of feeds to turn to json.
# 
#         :return Returns a list of dicts that is ready to be turned to json.
#         """
#         json_ready = []
#         for feed in feeds:
#             json_ready.append(
#                 Feed.json(feed)
#             )
# 
#         return json_ready
# 
#     @staticmethod
#     def json(feed):
#         """
#         Turns a single feed into a json ready dict.
# 
#         :param feed The feed to turn to json ready.
#         """
#         return {
#             "feed_url": feed.feed_url,
#             "title": feed.title,
#             "favicon": feed.favicon,
#             "id": feed.id,
#             "unread": feed.unread,
#         }
# 
#     @staticmethod
#     def unread(feed, db_session, limit=100):
#         """
#         Finds the number of unread entries for the feed, it will only check the amount of entries specified in in the
#         limit parameter, some feeds might have thousands of entries and it would take too long to check them all.
# 
#         :param feed: The feed you want to check.
#         :param db_session: Current database session.
#         :param limit: The limit of entries to be checked, by default this is set to 100.
#         :return: The updated feed object.
#         """
# 
#         entries = db_session.query(Entry).filter(
#             Entry.feed_id == feed.id).order_by(
#             desc(Entry.updated)).limit(limit).all()
# 
#         ids = []
#         for entry in entries:
#             ids.append(entry.id)
# 
#         read_entries = db_session.query(ReadEntry).filter(
#             ReadEntry.entry_id.in_(ids)).all()
# 
#         feed.unread = len(entries) - len(read_entries)
# 
#         return feed


# Path: pyfeedreader/models/category.py
from pyfeedreader.database import Model
from sqlalchemy import Column, Integer, String, ForeignKey
from sqlalchemy.orm import relationship
from pyfeedreader.models.feed import Feed



class Category(Model):
    """
    The Category class represent a category that is a user named collection of feeds.
    """
    __tablename__ = "category"
    id = Column('id', Integer, primary_key=True)
    name = Column(String(128))
    user_id = Column(Integer, ForeignKey('user.id'))
    category_entries = relationship("CategoryEntry")

    def __init__(self, name=None, user_id=None):
        self.name = name
        self.user_id = user_id

    def __repr__(self):
        return '<Category %r>' % self.username

    def get_feeds(self, db_session):
        """
        Creates the class variable feeds which is a list of the feed objects for this category.

        :param session: The current database session.
        :return:
        """
        self.feeds = []
        for entry in self.category_entries:
            f = db_session.query(Feed).filter(Feed.id == entry.feed_id).first()
            if f:

                self.feeds.append(Feed.unread(f, db_session))