Add a rematch_packager management command
This allows quick resolution of all unmatched packages, especially after tweaking the way find_user works. Signed-off-by: Dan McGee <dan@archlinux.org>
This commit is contained in:
parent
9156003d2d
commit
82289ebb44
64
devel/management/commands/rematch_packager.py
Normal file
64
devel/management/commands/rematch_packager.py
Normal file
@ -0,0 +1,64 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
"""
|
||||
rematch_packager command
|
||||
|
||||
Match all packages with a packager_str but NULL packager_id to a packager if we
|
||||
can find one.
|
||||
|
||||
Usage: ./manage.py rematch_packager
|
||||
"""
|
||||
|
||||
from django.core.management.base import NoArgsCommand
|
||||
|
||||
import sys
|
||||
import logging
|
||||
|
||||
from devel.utils import UserFinder
|
||||
from main.models import Package
|
||||
|
||||
logging.basicConfig(
|
||||
level=logging.INFO,
|
||||
format='%(asctime)s -> %(levelname)s: %(message)s',
|
||||
datefmt='%Y-%m-%d %H:%M:%S',
|
||||
stream=sys.stderr)
|
||||
logger = logging.getLogger()
|
||||
|
||||
class Command(NoArgsCommand):
|
||||
help = "Runs a check on all active mirror URLs to determine if they are reachable via IPv4 and/or v6."
|
||||
|
||||
def handle_noargs(self, **options):
|
||||
v = int(options.get('verbosity', None))
|
||||
if v == 0:
|
||||
logger.level = logging.ERROR
|
||||
elif v == 1:
|
||||
logger.level = logging.INFO
|
||||
elif v == 2:
|
||||
logger.level = logging.DEBUG
|
||||
|
||||
return match_packager()
|
||||
|
||||
def match_packager():
|
||||
finder = UserFinder()
|
||||
logger.info("getting all unmatched packages")
|
||||
package_count = matched_count = 0
|
||||
unknown = set()
|
||||
|
||||
for package in Package.objects.filter(packager__isnull=True):
|
||||
logger.debug("package %s, packager string %s",
|
||||
package.pkgname, package.packager_str)
|
||||
package_count += 1
|
||||
user = finder.find(package.packager_str)
|
||||
if user:
|
||||
package.packager = user
|
||||
logger.debug(" found user %s" % user.username)
|
||||
package.save()
|
||||
matched_count += 1
|
||||
else:
|
||||
unknown.add(package.packager_str)
|
||||
|
||||
logger.info("%d packages checked, %d newly matched",
|
||||
package_count, matched_count)
|
||||
logger.debug("unknown packagers:\n%s",
|
||||
"\n".join(unknown))
|
||||
|
||||
# vim: set ts=4 sw=4 et:
|
@ -1,7 +1,7 @@
|
||||
from django.test import TestCase
|
||||
|
||||
from django.contrib.auth.models import User
|
||||
from devel.utils import UserFinder
|
||||
from devel.utils import UserFinder
|
||||
from main.models import UserProfile
|
||||
|
||||
class DevelTest(TestCase):
|
||||
@ -87,6 +87,16 @@ def test_by_name(self):
|
||||
self.assertEqual(self.user3,
|
||||
self.finder.find("Bob Jones <bjones AT Arch Linux DOT org>"))
|
||||
|
||||
def test_by_invalid(self):
|
||||
self.assertEqual(self.user1,
|
||||
self.finder.find("Joe User <user1@example.com"))
|
||||
self.assertEqual(self.user1,
|
||||
self.finder.find("Joe 'nickname' User <user1@example.com"))
|
||||
self.assertEqual(self.user1,
|
||||
self.finder.find("Joe \"nickname\" User <user1@example.com"))
|
||||
self.assertEqual(self.user1,
|
||||
self.finder.find("Joe User <joe@differentdomain.com"))
|
||||
|
||||
def test_cache(self):
|
||||
# simply look two of them up, but then do it repeatedly
|
||||
for i in range(50):
|
||||
|
@ -88,10 +88,12 @@ def find(self, userstring):
|
||||
return None
|
||||
if userstring in self.cache:
|
||||
return self.cache[userstring]
|
||||
matches = re.match(r'^([^<]+)? ?<([^>]*)>', userstring)
|
||||
|
||||
name = email = None
|
||||
|
||||
matches = re.match(r'^([^<]+)? ?<([^>]*)>?', userstring)
|
||||
if not matches:
|
||||
name = userstring
|
||||
email = None
|
||||
name = userstring.strip()
|
||||
else:
|
||||
name = matches.group(1)
|
||||
email = matches.group(2)
|
||||
|
Loading…
Reference in New Issue
Block a user