]> git.ipfire.org Git - pbs.git/commitdiff
mirrors: Export whether mirrors support IPv6/IPv4
authorMichael Tremer <michael.tremer@ipfire.org>
Thu, 3 Jul 2025 15:26:30 +0000 (15:26 +0000)
committerMichael Tremer <michael.tremer@ipfire.org>
Thu, 3 Jul 2025 15:26:30 +0000 (15:26 +0000)
Signed-off-by: Michael Tremer <michael.tremer@ipfire.org>
src/api/downloads.py
src/buildservice/mirrors.py

index f34eccb03ffe6b9d78e46a29f2850ee3a73e7771..d001c1dbf0ff674b49fbdb16985b739bcedd8d6a 100644 (file)
@@ -84,10 +84,10 @@ async def get(
        for mirror in mirrors:
                # Don't send clients to a mirror they don't support
                if isinstance(current_address, ipaddress.IPv6Address):
-                       if not mirror.supports_ipv6():
+                       if not mirror.supports_ipv6:
                                continue
                elif isinstance(current_address, ipaddress.IPv4Address):
-                       if not mirror.supports_ipv4():
+                       if not mirror.supports_ipv4:
                                continue
 
                # Skip the mirror if it does not serve the file we are looking for
index 64f205285ba88488c8090ccecd3717ee28262b5c..576cd319ee2045e103f0721a897bfec814090d03 100644 (file)
@@ -6,6 +6,7 @@ import functools
 import ipaddress
 import logging
 import os.path
+import pydantic
 import random
 import sqlalchemy
 import sqlmodel
@@ -247,7 +248,9 @@ class Mirror(sqlmodel.SQLModel, database.BackendMixin, database.SoftDeleteMixin,
                sa_column=sqlalchemy.Column(sqlalchemy.ARRAY(INET), nullable=False, default=list),
        )
 
-       def supports_ipv6(self):
+       @pydantic.computed_field
+       @property
+       def supports_ipv6(self) -> bool:
                """
                        Returns True if this mirror supports IPv6
                """
@@ -262,7 +265,9 @@ class Mirror(sqlmodel.SQLModel, database.BackendMixin, database.SoftDeleteMixin,
                sa_column=sqlalchemy.Column(sqlalchemy.ARRAY(INET), nullable=False, default=list)
        )
 
-       def supports_ipv4(self):
+       @pydantic.computed_field
+       @property
+       def supports_ipv4(self) -> bool:
                """
                        Returns True if this mirror supports IPv4
                """