def METHOD_NAME(self, userstring):
    '''
    Attempt to find the corresponding User object for a standard
    packager string, e.g. something like
        'A. U. Thor <author@example.com>'.
    We start by searching for a matching email address; we then move onto
    matching by first/last name. If we cannot find a user, then return None.
    '''
    if not userstring:
        return None
    if userstring in self.cache:
        return self.cache[userstring]
    name = email = None
    matches = re.match(r'^([^<]+)? ?<([^>]*)>?', userstring)
    if not matches:
        name = userstring.strip()
    else:
        name = matches.group(1)
        email = matches.group(2)
    user = None
    find_methods = (self.user_email, self.profile_email,
                    self.username_email, self.user_name)
    for matcher in find_methods:
        user = matcher(name, email)
        if user is not None:
            break
    self.cache[userstring] = user
    self.email_cache[email] = user
    return user