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()
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 }
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
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}
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'))
def senders(): senders = db.session.query(Sender) \ .options(db.joinedload(Sender.infos)) \ .order_by(Sender.name) return render_template("senders.html", senders=senders)
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)
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()