def setUp(self): self.finder = UserFinder() self.user1 = User.objects.create(username="******", first_name="Joe", last_name="User", email="*****@*****.**") self.user2 = User.objects.create(username="******", first_name="John", last_name="", email="*****@*****.**") self.user3 = User.objects.create(username="******", first_name="Bob", last_name="Jones", email="*****@*****.**") for user in (self.user1, self.user2, self.user3): email_addr = "*****@*****.**" % user.username UserProfile.objects.create(user=user, public_email=email_addr) self.user4 = User.objects.create(username="******", first_name="Tim", last_name="One", email="*****@*****.**") self.user5 = User.objects.create(username="******", first_name="Tim", last_name="Two", email="*****@*****.**")
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 finder = UserFinder() match_packager(finder) match_flagrequest(finder)
def add_signoff_comments(): logger.info("getting all signoff groups") groups = get_signoff_groups() logger.info("%d signoff groups found", len(groups)) finder = UserFinder() for group in groups: if not group.default_spec: continue logger.debug("getting SVN log for %s (%s)", group.pkgbase, group.repo) log = cached_svn_log(group.pkgbase, group.repo) logger.info("creating spec with SVN message for %s", group.pkgbase) spec = create_specification(group.packages[0], log, finder) spec.save()
def import_keys(keyring): outdata = call_gpg(keyring, "--list-sigs") keydata = parse_keydata(outdata) logger.info("creating or finding %d keys", len(keydata)) created_ct = updated_ct = 0 with transaction.atomic(): finder = UserFinder() # we are dependent on parents coming before children; parse_keydata # uses an OrderedDict to ensure this is the case. for data in keydata.values(): parent_id = None if data.parent: parent_data = keydata.get(data.parent, None) if parent_data: parent_id = parent_data.db_id other = { 'expires': data.expires, 'revoked': data.revoked, 'parent_id': parent_id, } dkey, created = DeveloperKey.objects.get_or_create( key=data.key, created=data.created, defaults=other) data.db_id = dkey.id # set or update any additional data we might need to needs_save = False if created: created_ct += 1 else: for k, v in other.items(): if getattr(dkey, k) != v: setattr(dkey, k, v) needs_save = True if dkey.owner_id is None: owner = find_key_owner(data, keydata, finder) if owner is not None: dkey.owner = owner needs_save = True if needs_save: dkey.save() updated_ct += 1 key_ct = DeveloperKey.objects.all().count() logger.info("%d total keys in database", key_ct) logger.info("created %d, updated %d keys", created_ct, updated_ct)
class FindUserTest(TestCase): def setUp(self): self.finder = UserFinder() self.user1 = User.objects.create(username="******", first_name="Joe", last_name="User", email="*****@*****.**") self.user2 = User.objects.create(username="******", first_name="John", last_name="", email="*****@*****.**") self.user3 = User.objects.create(username="******", first_name="Bob", last_name="Jones", email="*****@*****.**") for user in (self.user1, self.user2, self.user3): email_addr = "*****@*****.**" % user.username UserProfile.objects.create(user=user, public_email=email_addr) self.user4 = User.objects.create(username="******", first_name="Tim", last_name="One", email="*****@*****.**") self.user5 = User.objects.create(username="******", first_name="Tim", last_name="Two", email="*****@*****.**") def test_not_matching(self): self.assertIsNone(self.finder.find(None)) self.assertIsNone(self.finder.find("")) self.assertIsNone(self.finder.find("Bogus")) self.assertIsNone(self.finder.find("Bogus <invalid")) self.assertIsNone(self.finder.find("Bogus User <*****@*****.**>")) self.assertIsNone(self.finder.find("<*****@*****.**>")) self.assertIsNone(self.finder.find("*****@*****.**")) self.assertIsNone(self.finder.find("Unknown Packager")) def test_by_email(self): self.assertEqual(self.user1, self.finder.find("XXX YYY <*****@*****.**>")) self.assertEqual(self.user2, self.finder.find("YYY ZZZ <*****@*****.**>")) def test_by_profile_email(self): self.assertEqual(self.user1, self.finder.find("XXX <*****@*****.**>")) self.assertEqual(self.user2, self.finder.find("YYY <*****@*****.**>")) self.assertEqual(self.user3, self.finder.find("ZZZ <*****@*****.**>")) def test_by_name(self): self.assertEqual( self.user1, self.finder.find("Joe User <*****@*****.**>")) self.assertEqual(self.user1, self.finder.find("Joe User")) self.assertEqual(self.user2, self.finder.find("John <*****@*****.**>")) self.assertEqual(self.user2, self.finder.find("John")) 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 <*****@*****.**")) self.assertEqual( self.user1, self.finder.find("Joe 'nickname' User <*****@*****.**")) self.assertEqual( self.user1, self.finder.find("Joe \"nickname\" User <*****@*****.**")) self.assertEqual(self.user1, self.finder.find("Joe User <*****@*****.**")) def test_cache(self): # simply look two of them up, but then do it repeatedly for _ in range(5): self.assertEqual(self.user1, self.finder.find("XXX YYY <*****@*****.**>")) self.assertEqual( self.user3, self.finder.find("Bob Jones <bjones AT Arch Linux DOT org>")) def test_ambiguous(self): self.assertEqual(self.user4, self.finder.find("Tim One <*****@*****.**>")) self.assertEqual(self.user5, self.finder.find("Tim Two <*****@*****.**>")) self.assertIsNone(self.finder.find("Tim <*****@*****.**>"))
def create_multivalued(dbpkg, repopkg, db_attr, repo_attr): '''Populate the simplest of multivalued attributes. These are those that only deal with a 'name' attribute, such as licenses, groups, etc. The input and output objects and attribute names are specified, and everything is done via getattr().''' collection = getattr(dbpkg, db_attr) collection.all().delete() model = collection.model new_items = [] for name in getattr(repopkg, repo_attr): new_items.append(model(pkg=dbpkg, name=name)) if new_items: model.objects.bulk_create(new_items) finder = UserFinder() def populate_pkg(dbpkg, repopkg, force=False, timestamp=None): # we reset the flag date only if the upstream version components change; # e.g. epoch or pkgver, but not pkgrel if dbpkg.epoch is None or dbpkg.epoch != repopkg.epoch: dbpkg.flag_date = None elif dbpkg.pkgver is None or dbpkg.pkgver != repopkg.ver: dbpkg.flag_date = None if repopkg.base: dbpkg.pkgbase = repopkg.base else: dbpkg.pkgbase = repopkg.name dbpkg.pkgver = repopkg.ver
class FindUserTest(TestCase): def setUp(self): self.finder = UserFinder() self.user1 = User.objects.create(username="******", first_name="Joe", last_name="User", email="*****@*****.**") self.user2 = User.objects.create(username="******", first_name="John", last_name="", email="*****@*****.**") self.user3 = User.objects.create(username="******", first_name="Bob", last_name="Jones", email="*****@*****.**") for user in (self.user1, self.user2, self.user3): email_addr = "*****@*****.**" % user.username UserProfile.objects.create(user=user, public_email=email_addr) self.user4 = User.objects.create(username="******", first_name="Tim", last_name="One", email="*****@*****.**") self.user5 = User.objects.create(username="******", first_name="Tim", last_name="Two", email="*****@*****.**") def test_not_matching(self): self.assertIsNone(self.finder.find(None)) self.assertIsNone(self.finder.find("")) self.assertIsNone(self.finder.find("Bogus")) self.assertIsNone(self.finder.find("Bogus <invalid")) self.assertIsNone(self.finder.find("Bogus User <*****@*****.**>")) self.assertIsNone(self.finder.find("<*****@*****.**>")) self.assertIsNone(self.finder.find("*****@*****.**")) self.assertIsNone(self.finder.find("Unknown Packager")) def test_by_email(self): self.assertEqual(self.user1, self.finder.find("XXX YYY <*****@*****.**>")) self.assertEqual(self.user2, self.finder.find("YYY ZZZ <*****@*****.**>")) def test_by_profile_email(self): self.assertEqual(self.user1, self.finder.find("XXX <*****@*****.**>")) self.assertEqual(self.user2, self.finder.find("YYY <*****@*****.**>")) self.assertEqual(self.user3, self.finder.find("ZZZ <*****@*****.**>")) def test_by_name(self): self.assertEqual(self.user1, self.finder.find("Joe User <*****@*****.**>")) self.assertEqual(self.user1, self.finder.find("Joe User")) self.assertEqual(self.user2, self.finder.find("John <*****@*****.**>")) self.assertEqual(self.user2, self.finder.find("John")) 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 <*****@*****.**")) self.assertEqual(self.user1, self.finder.find("Joe 'nickname' User <*****@*****.**")) self.assertEqual(self.user1, self.finder.find("Joe \"nickname\" User <*****@*****.**")) self.assertEqual(self.user1, self.finder.find("Joe User <*****@*****.**")) def test_cache(self): # simply look two of them up, but then do it repeatedly for _ in range(5): self.assertEqual(self.user1, self.finder.find("XXX YYY <*****@*****.**>")) self.assertEqual(self.user3, self.finder.find("Bob Jones <bjones AT Arch Linux DOT org>")) def test_ambiguous(self): self.assertEqual(self.user4, self.finder.find("Tim One <*****@*****.**>")) self.assertEqual(self.user5, self.finder.find("Tim Two <*****@*****.**>")) self.assertIsNone(self.finder.find("Tim <*****@*****.**>")) def test_find_by_username(self): self.assertEqual(self.finder.find_by_username(None), None) self.assertEqual(self.finder.find_by_username('noone'), None) self.assertEqual(self.finder.find_by_username(self.user1.username), self.user1) # Test cache self.assertEqual(self.finder.find_by_username(self.user1.username), self.user1) def test_find_by_email(self): self.assertEqual(self.finder.find_by_email(None), None) self.assertEqual(self.finder.find_by_email('*****@*****.**'), None) self.assertEqual(self.finder.find_by_email(self.user1.email), self.user1) # Test cache self.assertEqual(self.finder.find_by_email(self.user1.email), self.user1)