summaryrefslogtreecommitdiff
path: root/isotests/management/commands/syncisos.py
diff options
context:
space:
mode:
Diffstat (limited to 'isotests/management/commands/syncisos.py')
-rw-r--r--isotests/management/commands/syncisos.py51
1 files changed, 51 insertions, 0 deletions
diff --git a/isotests/management/commands/syncisos.py b/isotests/management/commands/syncisos.py
new file mode 100644
index 00000000..975104d9
--- /dev/null
+++ b/isotests/management/commands/syncisos.py
@@ -0,0 +1,51 @@
+import re
+import urllib
+from HTMLParser import HTMLParser, HTMLParseError
+
+from django.core.management.base import BaseCommand, CommandError
+
+from isotests.models import Iso
+from settings import ISOLISTURL
+
+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:
+ f = urllib.urlopen(url)
+
+ s = f.read()
+ f.close()
+
+ self.feed(s)
+ self.close()
+
+ return self.hyperlinks
+ except HTMLParseError:
+ raise CommandError('Couldn\'t parse "%s"' % url)
+
+class Command(BaseCommand):
+ help = 'Gets new isos from http://releng.archlinux.org/isos/'
+
+ def handle(self, *args, **options):
+ parser = IsoListParser()
+ isonames = Iso.objects.values_list('name', flat=True)
+ new_isos = parser.parse(ISOLISTURL)
+
+ for iso in new_isos:
+ if iso not in isonames:
+ new = Iso(name=iso)
+ new.save()
+
+# vim: set ts=4 sw=4 et: