Esempio n. 1
0
def update_mastodon_instances_popularity():
    # bump score for each active account
    for acct in (Account.query.options(db.joinedload(
            Account.sessions)).filter(~Account.dormant).filter(
                Account.id.like('mastodon:%'))):
        instance = MastodonInstance.query.get(acct.mastodon_instance)
        if not instance:
            instance = MastodonInstance(instance=acct.mastodon_instance,
                                        popularity=10)
            db.session.add(instance)
        amount = 0.01
        if acct.policy_enabled:
            amount = 0.5
        for _ in acct.sessions:
            amount += 0.1
        instance.bump(amount / max(1, instance.popularity))

    # normalise scores so the top is 20
    top_pop = (db.session.query(db.func.max(
        MastodonInstance.popularity)).scalar())
    MastodonInstance.query.update({
        MastodonInstance.popularity:
        MastodonInstance.popularity * 20 / top_pop
    })
    db.session.commit()
Esempio n. 2
0
    def get(self, assembly_id):
        args = self.reqparse.parse_args()
        contigs = user_assembly_or_404(assembly_id).contigs

        # Column loading
        fields = args.fields.split(',')
        if args.coverages:
            fields.append('coverage')
        if args.pca:
            fields.extend(['pc_1', 'pc_2', 'pc_3'])
        contigs = contigs.options(db.load_only(*fields))

        # Sort
        if args.sort:
            order = db.desc(args.sort[1:]) if args.sort[0] == '-' else db.asc(args.sort)
            contigs = contigs.order_by(order)
        
        # Filters
        if args.length:
            for value in args.length:
                filter = filter_contigs(Contig.length, value)
                contigs = contigs.filter(filter)
        if args.gc:
            for value in args.gc:
                filter = filter_contigs(Contig.gc, value)
                contigs = contigs.filter(filter)
        if args.bins:
            contigs = contigs.options(db.joinedload('bins'))
            bin_ids = args.bins.split(',')
            contigs = contigs.join((Bin, Contig.bins)).filter(Bin.id.in_(bin_ids))
        
        # Load in pagination
        contig_pagination = contigs.paginate(args.index, args._items, False)
        
        result = []
        for i, contig in enumerate(contig_pagination.items):
            r = {}
            if args.fields:
                for field in fields:
                    if field != 'coverage':
                        r[field] = getattr(contig, field)
            if args.coverages:
                r.update(contig.coverages)
            if args.pca:
                r['pc_1'], r['pc_2'], r['pc_3'] = contig.pc_1, contig.pc_2, contig.pc_3
            if args.colors:
                for bin in contig.bins:
                    r['color_{}'.format(bin.bin_set_id)] = bin.color
            if args.bins:
                r['bin'] = [b.id for b in contig.bins if str(b.id) in bin_ids][0]
            result.append(r)

        return {
            'contigs': result if args.contigs else [], 
            'indices': contig_pagination.pages,
            'index': args.index, 
            'count': contigs.count(), 
            'items': args._items
        }
Esempio n. 3
0
def chooseQuestion():
    #if you want a pure random question
    #return Question.query.order_by(func.random()).first()
    #filter out questions that user has made or has already seen, then take a random question. Ideally this will trend towards more popular stuff but for now this works
    q = db.session.query(Question).options(db.joinedload(Question.viewed))
    user = db.session.query(User).filter_by(ip=session['user']).first()
    question = q.filter(and_(Question.author!=user, ~Question.viewed.contains(user) )).order_by(func.random()).first()
    return question
Esempio n. 4
0
    def get(self, contigset_id):
        args = self.reqparse.parse_args()
        contigs = user_contigset_or_404(contigset_id).contigs
        if args.fields:
            fields = args.fields.split(',')
            contigs = contigs.options(db.load_only(*fields))
        if args.sort:
            order = db.desc(args.sort[1:]) if args.sort[0] == '-' else db.asc(args.sort)
            contigs = contigs.order_by(order)
        if args.length:
            length = args.length.rstrip('-').rstrip('+')
            if not length.isnumeric():
                return
            length = int(length)
            if args.length.endswith('-'):
                filter = Contig.length < length
            elif args.length.endswith('+'):
                filter = Contig.length > length
            else:
                filter = Contig.length == length
            contigs = contigs.filter(filter)
        if args.bins:
            bin_ids = args.bins.split(',')
            contigs = contigs.join((Bin, Contig.bins)).filter(Bin.id.in_(bin_ids))
        if args.coverages:
            contigs = contigs.options(db.joinedload('coverages'))
        contig_pagination = contigs.paginate(args.index, args._items, False)
        result = []
        for contig in contig_pagination.items:
            r = {}
            if args.fields:
                for field in fields:
                    r[field] = getattr(contig, field)
            if args.coverages:
                for cov in contig.coverages:
                    r[cov.name] = cov.value
            result.append(r)

        return {'contigs': result, 'indices': contig_pagination.pages,
                'index': args.index, 'count': contigs.count(), 'items': args._items}
Esempio n. 5
0
def index():
    try:
        dataUser = User.query.filter_by(id=session["user"]).first()
        dataUser = UserSchema(exclude=["password"]).dump(dataUser)

        posts = Post.query.options(db.joinedload(Post.user)).order_by(
            Post.id.desc()).all()
        posts = PostSchema(many=True).dump(posts)

        result = LikePost.query.with_entities(
            LikePost.liked_post).filter_by(liked_by=session['user']).all()
        postsLiked = ()
        for i in result:
            postsLiked += i

        return render_template("index.html",
                               posts=posts,
                               dataUser=dataUser,
                               postsLiked=postsLiked)

    except Exception as e:
        print(e)
        return redirect(url_for('login'))
Esempio n. 6
0
def senders():
    senders = db.session.query(Sender) \
        .options(db.joinedload(Sender.infos)) \
        .order_by(Sender.name)
    return render_template("senders.html", senders=senders)
Esempio n. 7
0
def review():
    getUser()
    a=db.session.query(Question).options(db.joinedload(Question.author))
    asked=a.filter(Question.author==db.session.query(User).filter_by(ip=session['user']).first())
    return render_template('review.html',questions=asked)
Esempio n. 8
0
 def get_messages_by_offset(cls, channel_id, offset):
     return cls.query.options(db.joinedload('author')).filter_by(channel_id = channel_id, offset = offset).all()