def parse_person(persons):
    """
    https://getcomposer.org/doc/04-schema.md#authors
    A "person" is an object with a "name" field and optionally "url" and "email".

    Yield  a name, email, url tuple for a person object
    A person can be in the form:
        "authors": [
            {
                "name": "Nils Adermann",
                "email": "naderman@naderman.de",
                "homepage": "http://www.naderman.de",
                "role": "Developer"
            },
            {
                "name": "Jordi Boggiano",
                "email": "j.boggiano@seld.be",
                "homepage": "http://seld.be",
                "role": "Developer"
            }
        ]

    Both forms are equivalent.
    """
    if isinstance(persons, list):
        for person in persons:
            name = person.get('name')
            role = person.get('role')
            email = person.get('email')
            url = person.get('homepage')
            yield name and name.strip(), role and role.strip(
                ), email and email.strip('<> '), url and url.strip('() ')
    else:
        raise ValueError('Incorrect PHP composer persons: %(persons)r' %
            locals())
