roundabout,
created on Wednesday, 13 November 2024, 15:27:21 (1731511641),
received on Wednesday, 13 November 2024, 15:27:23 (1731511643)
Author identity: vlad <vlad.muntoiu@gmail.com>
227ebec5fa3a5f6dffbb8fa2e59b45260297d306
app.py
@@ -158,6 +158,7 @@ def about():
@app.route("/search")
def search():
query = flask.request.args.get("q")
sorting = flask.request.args.get("sort", "default")
page_number = flask.request.args.get("page", 1, type=int)
if flask.session.get("username"):
default_page_length = db.session.get(User, flask.session.get("username")).default_page_length
@@ -165,8 +166,18 @@ def search():
default_page_length = 16
page_length = flask.request.args.get("per_page", default_page_length, type=int)
results = Repo.query.filter(Repo.name.ilike(f"%{query}%")).filter_by(visibility=2).paginate(
page=page_number, per_page=page_length)
results = Repo.query.filter(Repo.name.ilike(f"%{query}%")).filter_by(visibility=2)
match sorting:
case "popularity":
results = results.outerjoin(RepoFavourite).group_by(Repo.route).order_by(
db.func.count(RepoFavourite.id).desc())
case "newest":
results = results.order_by(Repo.creation_date.desc())
case "oldest":
results = results.order_by(Repo.creation_date)
results = results.paginate(page=page_number, per_page=page_length)
if results.has_next:
next_page = results.next_num
@@ -189,6 +200,7 @@ def search():
@app.route("/user-search")
def user_search():
query = flask.request.args.get("q")
sorting = flask.request.args.get("sort", "default")
page_number = flask.request.args.get("page", 1, type=int)
if flask.session.get("username"):
default_page_length = db.session.get(User, flask.session.get("username")).default_page_length
@@ -196,8 +208,18 @@ def user_search():
default_page_length = 16
page_length = flask.request.args.get("per_page", default_page_length, type=int)
results = User.query.filter(User.username.ilike(f"%{query}%")).paginate(
page=page_number, per_page=page_length)
results = User.query.filter(User.username.ilike(f"%{query}%"))
match sorting:
case "popularity":
results = results.outerjoin(UserFollow, User.username == UserFollow.followed_username).group_by(
User.username).order_by(db.func.count(UserFollow.id).desc())
case "newest":
results = results.order_by(User.creation_date.desc())
case "oldest":
results = results.order_by(User.creation_date)
results = results.paginate(page=page_number, per_page=page_length)
if results.has_next:
next_page = results.next_num
templates/home.html
@@ -14,10 +14,22 @@
<h2>{% trans %}Search{% endtrans %}</h2>
<form action="/search" method="get" role="search" class="buttonbox">
<input type="text" name="q" placeholder="{% trans %}Search repositories...{% endtrans %}" aria-label="{% trans %}Repository search{% endtrans %}">
<select name="sort" aria-label="{% trans %}Sort by{% endtrans %}">
<option value="default" selected>{% trans %}Default{% endtrans %}</option>
<option value="popularity">{% trans %}Popularity{% endtrans %}</option>
<option value="newest">{% trans %}Newest{% endtrans %}</option>
<option value="oldest">{% trans %}Oldest{% endtrans %}</option>
</select>
<button type="submit">{% trans %}Search{% endtrans %}</button>
</form>
<form action="/user-search" method="get" role="search" class="buttonbox">
<input type="text" name="q" placeholder="{% trans %}Search users...{% endtrans %}" aria-label="{% trans %}User search{% endtrans %}">
<select name="sort" aria-label="{% trans %}Sort by{% endtrans %}">
<option value="default" selected>{% trans %}Default{% endtrans %}</option>
<option value="popularity">{% trans %}Popularity{% endtrans %}</option>
<option value="newest">{% trans %}Recently registered{% endtrans %}</option>
<option value="oldest">{% trans %}Oldest{% endtrans %}</option>
</select>
<button type="submit">{% trans %}Search{% endtrans %}</button>
</form>
</x-frame>
templates/user-profile.html
@@ -38,12 +38,14 @@
<form action="?action=follow" method="POST">
<button type="submit">
{% if relationship %}
{% trans %}Stop following{% endtrans %}
{% trans counter=user.followers|length %}Stop following ({{ counter }}){% endtrans %}
{% else %}
{% trans %}Follow{% endtrans %}
{% trans counter=user.followers|length %}Follow ({{ counter }}){% endtrans %}
{% endif %}
</button>
</form>
{% else %}
{% trans counter=user.followers|length %}{{ counter }} followers{% endtrans %}
{% endif %}
{% endblock %}