summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJohannes Löthberg <johannes@kyriasis.com>2017-12-30 04:26:23 +0100
committerAngel Velásquez <angvp@archlinux.org>2017-12-29 22:26:23 -0500
commit860a0511a0b465222b45ae3e19b20d07165651fe (patch)
tree7735bc356ff81c7f436530161b8a94a30b7dd55f
parent176456e485ae3833f0035cb44c8de289fa2c892b (diff)
downloadarchweb-860a0511a0b465222b45ae3e19b20d07165651fe.tar.gz
archweb-860a0511a0b465222b45ae3e19b20d07165651fe.zip
Add mirror detail URLs to JSON output (#71)
* Add mirror detail URLs to JSON output Signed-off-by: Johannes Löthberg <johannes@kyriasis.com> * Bump mirror details JSON version to 4 Signed-off-by: Johannes Löthberg <johannes@kyriasis.com>
-rw-r--r--mirrors/models.py9
-rw-r--r--mirrors/views/api.py4
2 files changed, 12 insertions, 1 deletions
diff --git a/mirrors/models.py b/mirrors/models.py
index 9743d177..795d0294 100644
--- a/mirrors/models.py
+++ b/mirrors/models.py
@@ -3,6 +3,7 @@ import socket
from urlparse import urlparse
from django.core.exceptions import ValidationError
+from django.contrib.sites.models import Site
from django.db import models
from django.db.models.signals import pre_save
from django_countries.fields import CountryField
@@ -46,6 +47,10 @@ class Mirror(models.Model):
def get_absolute_url(self):
return '/mirrors/%s/' % self.name
+ def get_full_url(self, proto='https'):
+ domain = Site.objects.get_current().domain
+ return '%s://%s%s' % (proto, domain, self.get_absolute_url())
+
class MirrorProtocol(models.Model):
protocol = models.CharField(max_length=10, unique=True)
@@ -111,6 +116,10 @@ class MirrorUrl(models.Model):
def get_absolute_url(self):
return '/mirrors/%s/%d/' % (self.mirror.name, self.pk)
+ def get_full_url(self, proto='https'):
+ domain = Site.objects.get_current().domain
+ return '%s://%s%s' % (proto, domain, self.get_absolute_url())
+
class MirrorRsync(models.Model):
# max length is 40 chars for full-form IPv6 addr + subnet
diff --git a/mirrors/views/api.py b/mirrors/views/api.py
index a04c93f3..df1df265 100644
--- a/mirrors/views/api.py
+++ b/mirrors/views/api.py
@@ -27,6 +27,7 @@ class MirrorStatusJSONEncoder(DjangoJSONEncoder):
data['country'] = unicode(country.name)
data['country_code'] = country.code
data['isos'] = obj.mirror.isos
+ data['details'] = obj.get_full_url()
return data
if isinstance(obj, MirrorProtocol):
return unicode(obj)
@@ -91,7 +92,8 @@ def mirror_details_json(request, name):
status_info = get_mirror_statuses(mirror_id=mirror.id,
show_all=authorized)
data = status_info.copy()
- data['version'] = 3
+ data['version'] = 4
+ data['details'] = mirror.get_full_url()
if authorized and request.user.has_perm('mirror.change_mirror'):
data['admin_email'] = mirror.admin_email
data['alternate_email'] = mirror.alternate_email