From db137d4db607461dd32c46e40bee9084eb508da9 Mon Sep 17 00:00:00 2001 From: Tom Willemsen Date: Thu, 31 Mar 2011 22:39:40 +0200 Subject: isotests: add syncisos command * Installtype fixture places 'interactive' at the top now. * Added a syncisos command to isotests to get new iso names from http://releng.archlinux.org/isos/ and add them to the database. Signed-off-by: Dan McGee --- isotests/fixtures/installtype.json | 8 ++--- isotests/management/__init__.py | 0 isotests/management/commands/__init__.py | 0 isotests/management/commands/syncisos.py | 51 ++++++++++++++++++++++++++++++++ 4 files changed, 55 insertions(+), 4 deletions(-) create mode 100644 isotests/management/__init__.py create mode 100644 isotests/management/commands/__init__.py create mode 100644 isotests/management/commands/syncisos.py diff --git a/isotests/fixtures/installtype.json b/isotests/fixtures/installtype.json index d23bd4b2..cc5c62a0 100644 --- a/isotests/fixtures/installtype.json +++ b/isotests/fixtures/installtype.json @@ -3,28 +3,28 @@ "pk": 1, "model": "isotests.installtype", "fields": { - "name": "automatic install generic example" + "name": "interactive install" } }, { "pk": 2, "model": "isotests.installtype", "fields": { - "name": "automatic install fancy example" + "name": "automatic install generic example" } }, { "pk": 3, "model": "isotests.installtype", "fields": { - "name": "automatic install custom config (specify in comments)" + "name": "automatic install fancy example" } }, { "pk": 4, "model": "isotests.installtype", "fields": { - "name": "interactive install" + "name": "automatic install custom config (specify in comments)" } } ] diff --git a/isotests/management/__init__.py b/isotests/management/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/isotests/management/commands/__init__.py b/isotests/management/commands/__init__.py new file mode 100644 index 00000000..e69de29b 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: -- cgit v1.1-4-g5e80