def next(): if request.method == "POST": # TODO: helper tags = set(map(unicode.lower, request.form.getlist("tags"))) Cluster.objects(pk=request.form["_id"]).update_one( push__tags=ShredTags( user=g.user.id, tags=list(tags), recognizable_chars=request.form.get("recognizable_chars", ""), angle=int(request.form.get("angle", 0))), inc__users_count=1, add_to_set__users_processed=g.user.id) User.objects(pk=g.user.id).update_one( inc__processed=1, inc__tags_count=len(tags), add_to_set__tags=list(tags)) session["processed"] = session.get("processed", 0) + 1 for tag in tags: Tags.objects(pk=tag).update_one( set_on_insert__is_base=False, set_on_insert__created_by=g.user.id, set_on_insert__created_at=Tags().created_at, inc__usages=1, add_to_set__shreds=request.form["_id"], upsert=True) start = datetime.strptime(request.form["tagging_start"], '%Y-%m-%d %H:%M:%S.%f') end = datetime.utcnow() TaggingSpeed.objects.create( user=g.user.id, cluster=request.form["_id"], tags_count=len(tags), msec=(end - start).total_seconds() * 1000) cluster = Cluster.next_for_user(g.user, app.config['USERS_PER_SHRED']) auto_tags = cluster and cluster.get_auto_tags() or [] return render_template( "_shred.html", cluster=cluster, auto_tags=auto_tags, all_tags=get_tags(), tagging_start=datetime.utcnow(), # TODO: move to context processor processed_per_session=session.get("processed", 0), processed_total=User.objects(id=g.user.id).first()["processed"], rating=list(User.objects.order_by( "-processed").values_list("id")).index(g.user.id) + 1 )