summaryrefslogtreecommitdiff
path: root/releng/management/commands/syncisos.py
diff options
context:
space:
mode:
authorParabola <dev@list.parabolagnulinux.org>2011-05-21 05:41:26 +0000
committerParabola <dev@list.parabolagnulinux.org>2011-05-21 05:41:26 +0000
commit62059d83aea71ac7bde8902b20221e52c86a810b (patch)
tree758bd028d43a30893ba6261f39b1ebdbebbbf6e3 /releng/management/commands/syncisos.py
parent081223981aa520f792757a1776588756a4107fd4 (diff)
parentfd9ecb6eb1c8ee56adfbb58640d7a98baa6cd62c (diff)
Merge branch 'master' of /srv/git/projects/parabolaweb
Diffstat (limited to 'releng/management/commands/syncisos.py')
-rw-r--r--releng/management/commands/syncisos.py51
1 files changed, 51 insertions, 0 deletions
diff --git a/releng/management/commands/syncisos.py b/releng/management/commands/syncisos.py
new file mode 100644
index 00000000..ba174131
--- /dev/null
+++ b/releng/management/commands/syncisos.py
@@ -0,0 +1,51 @@
+import re
+import urllib
+from HTMLParser import HTMLParser, HTMLParseError
+
+from django.conf import settings
+from django.core.management.base import BaseCommand, CommandError
+
+from releng.models import Iso
+
+class IsoListParser(HTMLParser):
+ def __init__(self):
+ HTMLParser.__init__(self)
+
+ self.hyperlinks = []
+ self.url_re = re.compile('(?!\.{2})/$')
+
+ def handle_starttag(self, tag, attrs):
+ if tag == 'a':
+ for name, value in attrs:
+ if name == "href":
+ if value != '../' and self.url_re.search(value) != None:
+ self.hyperlinks.append(value[:-1])
+
+ def parse(self, url):
+ try:
+ remote_file = urllib.urlopen(url)
+ data = remote_file.read()
+ remote_file.close()
+ self.feed(data)
+ self.close()
+ return self.hyperlinks
+ except HTMLParseError:
+ raise CommandError('Couldn\'t parse "%s"' % url)
+
+class Command(BaseCommand):
+ help = 'Gets new isos from %s' % settings.ISO_LIST_URL
+
+ def handle(self, *args, **options):
+ parser = IsoListParser()
+ isonames = Iso.objects.values_list('name', flat=True)
+ active_isos = parser.parse(settings.ISO_LIST_URL)
+
+ # create any names that don't already exist
+ for iso in active_isos:
+ if iso not in isonames:
+ new = Iso(name=iso, active=True)
+ new.save()
+ # and then mark all other names as no longer active
+ Iso.objects.exclude(name__in=active_isos).update(active=False)
+
+# vim: set ts=4 sw=4 et: