def valid_base_dn(base_dn: str) -> None:
    for att in ['o', 'dc', 'ou']:
        if base_dn.startswith(att + '='):
            break
    else:
        raise ValueError('La racine doit débuter par une organisation (o=), une composante du domaine (dc=) ou une unité organisationnelle (ou=)')


def calc_ldapclient_base_dn(ldap_base_dn: str,
                            family_name: str,
                            accounts: bool=False,
                            ) -> str:
    base = f'ou=accounts,{ldap_base_dn}'
    if accounts:
        return base
    if not family_name:
        return f'ou=users,{base}'
    families = f'ou=families,{base}'
    if family_name != '-':
        return f'ou={family_name},{families}'
    return families