# Once is enough
break
+ def is_preferred_for_address(self, address):
+ # Lookup the client
+ network = self.backend.mirrors.location.lookup("%s" % address)
+
+ return self.is_preferred_for_network(network)
+
def is_preferred_for_network(self, network):
"""
Returns True if this mirror is preferred for clients on the given network.
{% macro MirrorList(mirrors) %}
{% for mirror in mirrors %}
+ {# Fetch the score of the mirror #}
+ {% set score = mirror.is_preferred_for_address(current_address) %}
+
<div class="box">
<div class="level">
<div class="level-left">
</div>
<div class="level-right">
+ {# Show stars for preference #}
+ {% if score %}
+ <div class="level-item">
+ <small>
+ {% for i in score | range %}
+ <span class="icon" title="{{ _("Preferred Mirror") }}">
+ <i class="fa-solid fa-star"></i>
+ </span>
+ {% endfor %}
+ </small>
+ </div>
+ {% endif %}
+
<div class="level-item">
<div class="tags">
{# IPv6 #}
import datetime
import functools
import http.client
+import ipaddress
import jinja2
import jinja2.ext
import json
"""
Returns the IP address the request came from.
"""
- return self.request.headers.get("X-Real-IP") or self.request.remote_ip
+ return ipaddress.ip_address(self.request.remote_ip)
@property
def user_agent(self):
# Add some Python built-ins
"dir" : dir,
"enumerate" : enumerate,
+ "range" : range,
}
return JinjaTemplateLoader(env)
ns = {
"handler" : self,
"request" : self.request,
+ "current_address" : self.current_address,
"current_user" : self.current_user,
"hostname" : self.request.host,
"now" : datetime.datetime.now(),