From 19e67b3239f2621096fd770d1aca46c4ec2c3463 Mon Sep 17 00:00:00 2001 From: Priit Laes Date: Sun, 8 Aug 2010 09:20:00 +0300 Subject: Implemented user's favorite packages --- grumpy/models.py | 27 +++++----------------- grumpy/templates/browse_cat.html | 50 +++++++++++++++++++++++++++++++++++++--- grumpy/webapp.py | 14 ++++++++++- 3 files changed, 66 insertions(+), 25 deletions(-) diff --git a/grumpy/models.py b/grumpy/models.py index 241afde..49b58ee 100644 --- a/grumpy/models.py +++ b/grumpy/models.py @@ -30,6 +30,10 @@ package_herds = db.Table('package_herds', db.Model.metadata, db.Column('package_id', db.Integer, db.ForeignKey('packages.id')), db.Column('herd_id', db.Integer, db.ForeignKey('herds.id')) ) +package_users = db.Table('package_users', db.Model.metadata, + db.Column('package_id', db.Integer, db.ForeignKey('packages.id')), + db.Column('user_id', db.Integer, db.ForeignKey('users.id')) + ) class Developer(db.Model): """Represents developers in the system""" @@ -106,27 +110,6 @@ class Ebuild(db.Model): def __repr__(self): return '<%s> - %s' % (self.__class__.__name__, self.cpv) -class Favorite(db.Model): - """Represents packages that user can add in their watch list.""" - - __tablename__ = 'favorites' - __table_args__ = ( - db.UniqueConstraint('package_id', 'user_id'), - {}) - - id = db.Column('id', db.Integer, primary_key=True) - _package = db.Column('package_id', db.Integer, db.ForeignKey('packages.id')) - _user = db.Column('user_id', db.Integer, db.ForeignKey('users.id')) - - package = db.relationship("Package") - user = db.relationship("User", backref=db.backref('favorites')) - - def __init__(self, package): - self.package = package - - def __repr__(self): - return '<%s> - %s' % (self.__class__.__name__, self.package.cp) - class Herd(db.Model): """Represents herds in the system""" @@ -166,6 +149,8 @@ class Package(db.Model): ebuilds = db.relationship(Ebuild, backref='package', \ cascade='all, delete-orphan', \ collection_class=column_mapped_collection(Ebuild.cpv)) + favorites = db.relationship("User", secondary=package_users, + backref='favorites') def __init__(self, ebuild_src, mtime=time.time()): self.key = ebuild_src.key diff --git a/grumpy/templates/browse_cat.html b/grumpy/templates/browse_cat.html index 6de7e15..d66a5a2 100644 --- a/grumpy/templates/browse_cat.html +++ b/grumpy/templates/browse_cat.html @@ -1,14 +1,58 @@ +{% set add_fav = '[ Add to favorites ]' -%} +{% set del_fav = '[ Remove from favorites ]' -%} +{% macro render_package_extras(package, user) -%} + {% if package.qaissues %} + {{ package.qaissues | length }} issue(s) + {% endif %} + {% if user %} + + {% if package in user.favorites %} + {{ del_fav }} + {% else %} + {{ add_fav }} + {% endif %} + + {% endif %} +{% endmacro -%} {% extends "layout.html" %} {% block title %}Browsing category "{{ cat | e }}"{% endblock %} +{% block script %} +{{ importer.load_js('jquery.min') }} + +{% endblock %} {% block body %}

Browsing category "{{ cat | e }} - {{ pkgs | length }} package(s):