Exemple #1
0
    def fetch_stats(purge=False):
        from funding.factory import db_session
        from funding.orm.orm import Proposal, User, Comment
        from funding.factory import cache
        cache_key = 'funding_stats'
        data = cache.get(cache_key)
        if data and not purge:
            return data

        categories = settings.FUNDING_CATEGORIES
        statuses = settings.FUNDING_STATUSES.keys()

        for cat in categories:
            q = db_session.query(Proposal)
            q = q.filter(Proposal.category == cat)
            res = q.count()
            data.setdefault('cats', {})
            data['cats'][cat] = res

        for status in statuses:
            q = db_session.query(Proposal)
            q = q.filter(Proposal.status == status)
            res = q.count()
            data.setdefault('statuses', {})
            data['statuses'][status] = res

        data.setdefault('users', {})
        data['users']['count'] = db_session.query(User.id).count()
        cache.set(cache_key, data=data, expiry=300)
        return data
 def edit(email: str, password: str):
     from funding.factory import db_session
     from funding.factory import bcrypt
     try:
         db_session.query(User).filter(User.email == email).update({
             'password':
             bcrypt.generate_password_hash(password).decode('utf8')
         })
         db_session.commit()
         db_session.flush()
     except Exception as ex:
         db_session.rollback()
         raise
Exemple #3
0
def templating():
    from flask.ext.login import current_user
    recent_comments = db_session.query(Comment).filter(
        Comment.automated == False).order_by(
            Comment.date_added.desc()).limit(8).all()
    summary_data = Summary.fetch_stats()
    newest_users = db_session.query(User).filter(User.admin == False).order_by(
        User.registered_on.desc()).limit(5).all()
    return dict(logged_in=current_user.is_authenticated,
                current_user=current_user,
                funding_categories=settings.FUNDING_CATEGORIES,
                funding_statuses=settings.FUNDING_STATUSES,
                summary_data=summary_data,
                recent_comments=recent_comments,
                newest_users=newest_users)
Exemple #4
0
    def get_comments(self):
        from funding.factory import db_session
        q = db_session.query(Comment)
        q = q.filter(Comment.proposal_id == self.id)
        q = q.filter(Comment.replied_to == None)
        q = q.order_by(Comment.date_added.desc())
        comments = q.all()

        for c in comments:
            q = db_session.query(Comment)
            q = q.filter(Comment.proposal_id == self.id)
            q = q.filter(Comment.replied_to == c.id)
            _c = q.all()
            setattr(c, 'comments', _c)

        setattr(self, '_comments', comments)
        return self
 def edit(cid: int, pid: int, message: str, user_id: int):
     from funding.factory import db_session
     from flask_login import current_user
     if current_user.id != user_id and not current_user.admin:
         raise Exception("no rights to remove this comment")
     comment = Comment.find_by_id(cid=cid)
     if not comment.locked:
         try:
             db_session.query(Comment).filter(Comment.id == cid).update(
                 {'message': message})
             db_session.commit()
             db_session.flush()
         except:
             db_session.rollback()
             raise
     else:
         raise Exception("Comment is locked and can not be edited")
Exemple #6
0
    def add_comment(cls,
                    pid: int,
                    user_id: int,
                    message: str,
                    cid: int = None,
                    message_id: int = None,
                    automated=False):
        from flask.ext.login import current_user
        from funding.factory import db_session
        if not message:
            raise Exception("empty message")

        if current_user.id != user_id and not current_user.admin:
            raise Exception("no rights to add or modify this comment")

        if not message_id:
            proposal = Proposal.find_by_id(pid=pid)
            if not proposal:
                raise Exception("no proposal by that id")
            comment = Comment(user_id=user_id,
                              proposal_id=proposal.id,
                              automated=automated)
            if cid:
                parent = Comment.find_by_id(cid=cid)
                if not parent:
                    raise Exception("cannot reply to a non-existent comment")
                comment.replied_to = parent.id
        else:
            try:
                user = db_session.query(User).filter(
                    User.id == user_id).first()
                if not user:
                    raise Exception("no user by that id")
                comment = next(c for c in user.comments if c.id == message_id)
                if comment.locked and not current_user.admin:
                    raise Exception("your comment has been locked/removed")
            except StopIteration:
                raise Exception("no message by that id")
            except:
                raise Exception("unknown error")
        try:
            comment.message = message
            db_session.add(comment)
            db_session.commit()
            db_session.flush()
        except Exception as ex:
            db_session.rollback()
            raise Exception(str(ex))
        return comment
def passResetStart(email):
    if request.method == 'GET':
        return make_response(render_template('reset.html'))

    xquery = db_session.query(User)
    searchQ = xquery.filter_by(email=email).first()
    if searchQ is None:
        return
    else:
        key = URLSafeTimedSerializer(settings.SECRET, salt='passwordreset')
        token = key.dumps({'email': searchQ.email})
        msg = Message("Password Reset Request",
                      sender="settings.USER_EMAIL_SENDER_EMAIL",
                      recipients=[email])
        msg.body = "Hi, we received a request to reset your password on the {coincode} Funding System ({siteurl}).\n\n Please click this link to reset your password: {siteurl}account/password/reset/{token}".format(
            siteurl=settings.SITE_URL, coincode=settings.COINCODE, token=token)
        flash('Password reset email sent')
        mail.send(msg)

    return make_response(render_template('reset.html'))
Exemple #8
0
 def find_by_id(cid: int):
     from funding.factory import db_session
     return db_session.query(Comment).filter(Comment.id == cid).first()
Exemple #9
0
 def get_payouts(proposal_id):
     return db_session.query(Payout).filter(
         Payout.proposal_id == proposal_id).all()
Exemple #10
0
 def comment_count(self):
     from funding.factory import db_session
     q = db_session.query(sa.func.count(Comment.id))
     q = q.filter(Comment.proposal_id == self.id)
     return q.scalar()
Exemple #11
0
def user(name):
    q = db_session.query(User)
    q = q.filter(User.username == name)
    user = q.first()
    return render_template('user.html', user=user)
Exemple #12
0
 def get_payouts(proposal_id):
     from funding.factory import db_session
     return db_session.query(Payout).filter(Payout.proposal_id == proposal_id).all()