Пример #1
0
def packages_page():
	qb    = QueryBuilder(request.args)
	query = qb.buildPackageQuery()
	title = qb.title

	if qb.lucky:
		package = query.first()
		if package:
			return redirect(package.getDetailsURL())

		topic = qb.buildTopicQuery().first()
		if qb.search and topic:
			return redirect("https://forum.minetest.net/viewtopic.php?t=" + str(topic.topic_id))

	page  = int(request.args.get("page") or 1)
	num   = min(40, int(request.args.get("n") or 100))
	query = query.paginate(page, num, True)

	search = request.args.get("q")
	type_name = request.args.get("type")

	next_url = url_for("packages_page", type=type_name, q=search, page=query.next_num) \
			if query.has_next else None
	prev_url = url_for("packages_page", type=type_name, q=search, page=query.prev_num) \
			if query.has_prev else None

	topics = None
	if qb.search and not query.has_next:
		topics = qb.buildTopicQuery().all()

	tags = Tag.query.all()
	return render_template("packages/list.html", \
			title=title, packages=query.items, topics=topics, \
			query=search, tags=tags, type=type_name, \
			next_url=next_url, prev_url=prev_url, page=page, page_max=query.pages, packages_count=query.total)
Пример #2
0
def package_scores():
    qb = QueryBuilder(request.args)
    query = qb.buildPackageQuery()

    pkgs = [{ "author": package.author.username, "name": package.name, "score": package.score } \
      for package in query.all()]
    return jsonify(pkgs)
Пример #3
0
def topics():
	qb    = QueryBuilder(request.args)
	qb.setSortIfNone("date")
	query = qb.buildTopicQuery()

	tmp_q = ForumTopic.query
	if not qb.show_discarded:
		tmp_q = tmp_q.filter_by(discarded=False)
	total = tmp_q.count()
	topic_count = query.count()

	page  = get_int_or_abort(request.args.get("page"), 1)
	num   = get_int_or_abort(request.args.get("n"), 100)
	if num > 100 and not current_user.rank.atLeast(UserRank.EDITOR):
		num = 100

	query = query.paginate(page, num, True)
	next_url = url_for("todo.topics", page=query.next_num, query=qb.search, \
	 	show_discarded=qb.show_discarded, n=num, sort=qb.order_by) \
			if query.has_next else None
	prev_url = url_for("todo.topics", page=query.prev_num, query=qb.search, \
	 	show_discarded=qb.show_discarded, n=num, sort=qb.order_by) \
			if query.has_prev else None

	return render_template("todo/topics.html", topics=query.items, total=total, \
			topic_count=topic_count, query=qb.search, show_discarded=qb.show_discarded, \
			next_url=next_url, prev_url=prev_url, page=page, page_max=query.pages, \
			n=num, sort_by=qb.order_by)
Пример #4
0
def tags():
	qb    = QueryBuilder(request.args)
	qb.setSortIfNone("score", "desc")
	query = qb.buildPackageQuery()

	tags = Tag.query.order_by(db.asc(Tag.title)).all()

	return render_template("todo/tags.html", packages=query.all(), tags=tags)
Пример #5
0
def packages():
    qb = QueryBuilder(request.args)
    query = qb.buildPackageQuery()
    ver = qb.getMinetestVersion()

    pkgs = [package.getAsDictionaryShort(current_app.config["BASE_URL"], version=ver) \
      for package in query.all()]
    return jsonify([package for package in pkgs if package.get("release")])
Пример #6
0
def api_packages_page():
    qb = QueryBuilder(request.args)
    query = qb.buildPackageQuery()
    ver = qb.getMinetestVersion()

    pkgs = [package.getAsDictionaryShort(app.config["BASE_URL"], version=ver) \
      for package in query.all()]
    return jsonify(pkgs)
Пример #7
0
def packages():
    qb = QueryBuilder(request.args)
    query = qb.buildPackageQuery()

    if request.args.get("fmt") == "keys":
        return jsonify(
            [package.getAsDictionaryKey() for package in query.all()])

    pkgs = qb.convertToDictionary(query.all())
    if "engine_version" in request.args or "protocol_version" in request.args:
        pkgs = [package for package in pkgs if package.get("release")]
    return jsonify(pkgs)
Пример #8
0
def tags():
    qb = QueryBuilder(request.args)
    qb.setSortIfNone("score", "desc")
    query = qb.buildPackageQuery()

    only_no_tags = isYes(request.args.get("no_tags"))
    if only_no_tags:
        query = query.filter(Package.tags == None)

    tags = Tag.query.order_by(db.asc(Tag.title)).all()

    return render_template("todo/tags.html", current_tab="tags", packages=query.all(), \
      tags=tags, only_no_tags=only_no_tags)
Пример #9
0
def package_scores():
    qb = QueryBuilder(request.args)
    query = qb.buildPackageQuery()

    pkgs = [package.getScoreDict() for package in query.all()]
    return jsonify(pkgs)
Пример #10
0
def topics():
    qb = QueryBuilder(request.args)
    query = qb.buildTopicQuery(show_added=True)
    return jsonify([t.getAsDictionary() for t in query.all()])
Пример #11
0
def list_all():
	qb    = QueryBuilder(request.args)
	query = qb.buildPackageQuery()
	title = qb.title

	query = query.options(
			joinedload(Package.license),
			joinedload(Package.media_license),
			subqueryload(Package.tags))

	ip = request.headers.get("X-Forwarded-For") or request.remote_addr
	if ip is not None and not is_user_bot():
		edited = False
		for tag in qb.tags:
			edited = True
			key = "tag/{}/{}".format(ip, tag.name)
			if not has_key(key):
				set_key(key, "true")
				Tag.query.filter_by(id=tag.id).update({
						"views": Tag.views + 1
					})

		if edited:
			db.session.commit()

	if qb.lucky:
		package = query.first()
		if package:
			return redirect(package.getDetailsURL())

		topic = qb.buildTopicQuery().first()
		if qb.search and topic:
			return redirect("https://forum.minetest.net/viewtopic.php?t=" + str(topic.topic_id))

	page  = get_int_or_abort(request.args.get("page"), 1)
	num   = min(40, get_int_or_abort(request.args.get("n"), 100))
	query = query.paginate(page, num, True)

	search = request.args.get("q")
	type_name = request.args.get("type")

	authors = []
	if search:
		authors = User.query \
			.filter(or_(*[func.lower(User.username) == name.lower().strip() for name in search.split(" ")])) \
			.all()

		authors = [(author.username, search.lower().replace(author.username.lower(), "")) for author in authors]

	topics = None
	if qb.search and not query.has_next:
		qb.show_discarded = True
		topics = qb.buildTopicQuery().all()

	tags_query = db.session.query(func.count(Tags.c.tag_id), Tag) \
  		.select_from(Tag).join(Tags).join(Package).group_by(Tag.id).order_by(db.asc(Tag.title))
	tags = qb.filterPackageQuery(tags_query).all()

	selected_tags = set(qb.tags)

	return render_template("packages/list.html",
			title=title, packages=query.items, pagination=query,
			query=search, tags=tags, selected_tags=selected_tags, type=type_name,
			authors=authors, packages_count=query.total, topics=topics)
def editref_customer():

    logging.debug(
        'current_user from editref route customer is {}'.format(current_user))
    response = []
    obj = Customer

    if request.method == 'GET':
        # Indicates it was a get request generated from using the find menu
        if 'filter[]' in request.args:
            builder = QueryBuilder(
                obj.query, operator_mapping=FindTable.default_operator_mapping)

            builder.filter_query(request)
            requested_data = builder.query.all()
            return jsonify(
                sqlalchemy_converter(obj,
                                     requested_data,
                                     timestamp_columns=['crdate', 'ludate']))

        # Otherwise, its a get request to load the page.
        else:
            data_table = DataTable(obj,
                                   obj.column_orders,
                                   system_columns=obj.system_columns)

            prepared_data_table = data_table.prepare()

            data_table.sort_columns()
            find_table = FindTable.from_datatable(data_table, request.path)

            info = {
                'table': prepared_data_table,
                'find_table': find_table.prepare(),
                'title': 'Super Sweet Title',
                'submit_url': request.path
            }

            return render_template('editref.html', **info)

    client_data = request.get_json()

    editref_kwargs = {
        'table':
        obj,
        'system_columns':
        obj.system_columns,
        'editable_columns': [
            col for col in obj.__table__.columns.keys()
            if col not in obj.system_columns
        ],
        'columns': [col for col in obj.__table__.columns.keys()],
        'pk':
        'customerid',
        'requesting_username':
        current_user.username
    }

    edit_ref = EditReference(db, client_data, request.method, **editref_kwargs)

    request_had_errors = False

    response_data = []
    processor = edit_ref.process()
    for client_processed_row in processor:
        if not client_processed_row['modified_ok']:
            request_had_errors = True
        response_data.append(client_processed_row)

    response = {
        'request_had_errors': request_had_errors,
        'data': response_data
    }
    return jsonify(response)