summaryrefslogtreecommitdiffstats
path: root/releng/management/commands/syncisos.py
diff options
context:
space:
mode:
authorDan McGee <dan@archlinux.org>2011-04-29 01:01:01 +0200
committerDan McGee <dan@archlinux.org>2011-04-29 01:01:01 +0200
commitb87a2c4864db79b29df1e2ea3ac3c3c2759f05fa (patch)
tree97defc7569c5e52161681576296ba90bff47f62a /releng/management/commands/syncisos.py
parent174d04ad0334b1c441bc0237e3e2ed8f581575ef (diff)
parent461d27d75ffb36ad4e7f428b8b6722ae1d3afb98 (diff)
downloadarchweb-b87a2c4864db79b29df1e2ea3ac3c3c2759f05fa.tar.gz
archweb-b87a2c4864db79b29df1e2ea3ac3c3c2759f05fa.tar.xz
Merge branch 'releng'
Diffstat (limited to 'releng/management/commands/syncisos.py')
-rw-r--r--releng/management/commands/syncisos.py48
1 files changed, 48 insertions, 0 deletions
diff --git a/releng/management/commands/syncisos.py b/releng/management/commands/syncisos.py
new file mode 100644
index 0000000..247b01c
--- /dev/null
+++ b/releng/management/commands/syncisos.py
@@ -0,0 +1,48 @@
+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[:len(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)
+ new_isos = parser.parse(settings.ISO_LIST_URL)
+
+ for iso in new_isos:
+ if iso not in isonames:
+ new = Iso(name=iso)
+ new.save()
+
+# vim: set ts=4 sw=4 et: