Exemplo n.º 1
0
def ancien_by_id_api(id_ancien):
    """
    API pour afficher un ancien.

    L'attribut complet=True permet d'avoir le profil complet de l'ancien,
    avec adresses et expérience.

    :param id_ancien:
    :return:
    """

    # Problème de routing Flask, on raise une 500.
    #   -> Normalement si id_ancien is None on devrait taper dans fulltext_api
    if id_ancien is None:
        abort(500)

    is_this_me = current_user is not None and current_user.id_ancien == id_ancien

    kwargs = {"actif": True, "bloque": False}
    if is_this_me or current_user.admin:
        kwargs = {"actif": None, "bloque": None}

    # Chargement de l'ancien
    ancien = annuaire.find_ancien_by_id(id_ancien, **kwargs)

    # Cas 1 : il n'existe pas
    if ancien is None:
        abort(
            404,
            "Ancien non trouvé, parce que : "
            "a. Il n'y a pas d'ancien avec cet identifiant "
            "b. Un ancien existe mais il a souhaité masquer sa fiche "
            "c. Un ancien exsite mais a été bloqué par un administrateur",
        )

    # cas 2 : il est bloqué
    # (donc normalement ici c'est l'utilisateur concerné qui consulte la fiche)
    elif is_this_me and ancien["bloque"]:
        abort(403, "Ton profil a été bloqué par un administrateur ...")

    else:
        excluded_columns = ["id_linkedin", "actif", "bloque", "nouveau", "fulltext"]
        ancien_dict = helper.row_to_json(ancien, excluded_columns)

        if request.args.get("complet", None) is not None:
            ancien_dict["adresses"] = helper.row_to_json(annuaire.find_adresse_by_id_ancien(id_ancien))
            ancien_dict["experiences"] = [
                helper.row_to_json(r) for r in annuaire.find_experience_by_id_ancien(id_ancien)
            ]

        return json.dumps(ancien_dict)
Exemplo n.º 2
0
def search_api():
    """
    API pour obtenir la liste des anciens sur une recherche avancée

    Les paramètres sont dans la query string, et sont les suivants :
    - prenom
    - nom
    - ecole
    - promo
    - ville
    - pays
    - entreprise
    - adresse
    - p : la page (default : 1)

    :return:    Un objet contenant :
                    - max_pages : le nombre de pages maximum
                    - data : la liste des résultats sous forme d'objets JSON html-encodé de la forme
                        {
                            'id':           23154,
                            'prenom':       'Jérôme',
                            'nom':          'Toto',
                            'ecole':        'P',
                            'promo':        2008,
                            'ville':        'COLOMBES',
                            'pays':         'FRANCE',
                            'code_postal':  '92700',
                            'entreprise':   'SNCF'
                        }
    """

    # 1. Obtenir les paramètres
    page = request.args.get("p", 1)

    # 2. Stocker la recherche pour l'afficher dans d'autres pages.
    if "previous_fulltext" in session:
        session.pop("previous_fulltext")

    session["previous_search"] = request.args

    # 3. Effectuer la recherche
    s = search_anciens(request.args, int(page), current_user.admin)

    # 4. Mettre en forme les résultats
    results = []
    for ancien in s[1]:
        results.append(helper.row_to_json(ancien))

    to_send = {"current_page": s[0].current, "max_pages": s[0].last, "data": results}

    # 5. Return
    return json.dumps(to_send)