else:
raise Exception("Non-global permission checked globally. Use Package.checkPerm or User.checkPerm instead.")
-
class User(db.Model, UserMixin):
id = db.Column(db.Integer, primary_key=True)
setattr(package, self.key.name, self.newValue)
+watchers = db.Table("watchers",
+ db.Column("user_id", db.Integer, db.ForeignKey("user.id"), primary_key=True),
+ db.Column("thread_id", db.Integer, db.ForeignKey("thread.id"), primary_key=True)
+)
+
class Thread(db.Model):
id = db.Column(db.Integer, primary_key=True)
replies = db.relationship("ThreadReply", backref="thread", lazy="dynamic")
+ watchers = db.relationship("User", secondary=watchers, lazy="subquery", \
+ backref=db.backref("watching", lazy=True))
+
def checkPerm(self, user, perm):
if not user.is_authenticated:
return not self.private
db.session.add(reply)
thread.replies.append(reply)
+ if not current_user in thread.watchers:
+ thread.watchers.append(current_user)
+
+ msg = None
+ if thread.package is None:
+ msg = "New comment on '{}'".format(thread.title)
+ else:
+ msg = "New comment on '{}' on package {}".format(thread.title, thread.package.title)
+
+
+ for user in thread.watchers:
+ if user != current_user:
+ triggerNotif(user, current_user, msg, url_for("thread_page", id=thread.id))
+
db.session.commit()
return redirect(url_for("thread_page", id=id))
thread.package = package
db.session.add(thread)
+ thread.watchers.append(current_user)
+ if package is not None and package.author != current_user:
+ thread.watchers.append(package.author)
+
reply = ThreadReply()
reply.thread = thread
reply.author = current_user
if package is not None:
triggerNotif(package.author, current_user,
"New thread '{}' on package {}".format(thread.title, package.title), url_for("thread_page", id=thread.id))
- db.session.commit()
db.session.commit()
--- /dev/null
+"""empty message
+
+Revision ID: de004661c5e1
+Revises: 605b3d74ada1
+Create Date: 2018-06-11 23:38:38.611039
+
+"""
+from alembic import op
+import sqlalchemy as sa
+
+
+# revision identifiers, used by Alembic.
+revision = 'de004661c5e1'
+down_revision = '605b3d74ada1'
+branch_labels = None
+depends_on = None
+
+
+def upgrade():
+ # ### commands auto generated by Alembic - please adjust! ###
+ op.create_table('watchers',
+ sa.Column('user_id', sa.Integer(), nullable=False),
+ sa.Column('thread_id', sa.Integer(), nullable=False),
+ sa.ForeignKeyConstraint(['thread_id'], ['thread.id'], ),
+ sa.ForeignKeyConstraint(['user_id'], ['user.id'], ),
+ sa.PrimaryKeyConstraint('user_id', 'thread_id')
+ )
+ # ### end Alembic commands ###
+
+
+def downgrade():
+ # ### commands auto generated by Alembic - please adjust! ###
+ op.drop_table('watchers')
+ # ### end Alembic commands ###