Example #1
0
def linkedin_importer():
    """
    Fonction de callback appelée par LinkedIn.
    Importer les expériences depuis linkedin

    Worfklow :
    - Request un token
    - Faire un appel sur l'API "people" pour obtenir les "positions"
    - Récupérer ces données et les insérer en base

    Sujet ouvert :
    - Est-ce qu'on met à jour une position déjà existante (écraser)
    - Ou alors est-ce qu'on l'importe une deuxième fois ?
        -> Pour l'instant, on importe une deuxième fois
    """
    import_success = False
    saved_positions = 0
    app.logger.info(
            "LINKEDIN - begin import for ancien : %s, user : %s",
            current_user.id_ancien,
            current_user.id)

    if current_user.id_ancien is not None:
        ancien = annuaire.find_ancien_by_id(current_user.id_ancien)
        if ancien is not None:
            access_token = __get_linkedin_token(url_for('linkedin_importer', _external=True))
            api_url = "https://api.linkedin.com/v1/people/~:(id,positions)?oauth2_access_token=%s" % access_token
            api_req =  requests.get(api_url)
            if api_req is not None and api_req.status_code == requests.codes.ok:
                parsed = etree.fromstring(api_req.text.encode("utf-8"))
                if parsed is not None:
                    positions = []
                    for e in parsed:
                        if e.tag == "positions":
                            positions = __get_positions(e)

                    if len(positions) > 0:

                        # récupérer les positions existantes pour update. A voir.
                        # sql_experiences = annuaire.find_experience_by_id_ancien(utilisateur.id_ancien)
                        # experiences = sql_experiences.fetchall()
                        # sql_experiences.close()

                        import_success = True

                        for position in positions:
                            app.logger.info(
                                "LINKEDIN - saving experience for user %s, enreprise : %s, position : %s, id_xp : %s",
                                current_user.id,
                                position['entreprise'],
                                position['position'],
                                position['id_experience_linkedin']
                            )
                            success = annuaire.update_experience(
                                current_user.id_ancien,
                                None,
                                None,
                                None,
                                None,
                                None,
                                position['entreprise'],
                                position['position'],
                                position['description'],
                                None,
                                None,
                                None,
                                None,
                                position['date_debut'],
                                position['date_fin'],
                                position['id_experience_linkedin']
                            )

                            if not success:
                                app.logger.error("LINKEDIN - error saving experience for user %s, id experience : %s")
                                app.logger.warning(position)
                                import_success=False
                            else:
                                saved_positions += 1
                    else:
                        app.logger.warning("LINKEDIN - no positions found for user : %s", current_user.id)

                else:
                    app.logger.error("LINKEDIN - blank API response file for user : %s", current_user.id)

            elif api_req is None:
                app.logger.error("LINKEDIN - bad people API request for user : %s, null response", current_user.id)
            else:
                app.logger.error(
                    "LINKEDIN - bad people API request for user : %s, code : %s, request response : %s",
                    current_user.id,
                    api_req.status_code,
                    api_req.text
                )

    if import_success:
        flash("%s expériences importées avec succès !" % saved_positions, "success")
    else:
        flash("Oups ! Il y a eu un problème pendant la connexion. Merci de contacter l'administrateur.", "danger")

    return redirect(url_for("compte"))
Example #2
0
def update_experience(id_experience = None):
    """
    Page pour mettre à jour / ajouter des expériences pro d'un ancien

    POST : "commit" les données
    """

    id = id_experience

    res = {}
    res["content"] = None
    res["csrf_token"] = generate_csrf_token()
    res["success"] = False

    experience_form_to_render = None

    experience_form = user.update_experience_form()
    experience_form.set_pays(PAYS)


    if current_user.id_ancien is not None:

        experience_form = user.update_experience_form(request.form)
        experience_form.set_pays(PAYS)
        form_confirmed = experience_form.validate()

        if form_confirmed:
            try:
                date_debut = datetime.strptime(experience_form.date_debut.data, '%m/%Y')
            except ValueError:
                date_debut = None
            try:
                date_fin = datetime.strptime(experience_form.date_fin.data, '%m/%Y')
            except ValueError:
                date_fin = None

            success = annuaire.update_experience(
                current_user.id_ancien,
                id_experience,
                experience_form.ville.data,
                experience_form.pays.data,
                experience_form.adresse.data,
                experience_form.code.data,
                experience_form.entreprise.data,
                experience_form.poste.data,
                experience_form.description.data,
                experience_form.mail.data,
                experience_form.site.data,
                experience_form.telephone.data,
                experience_form.mobile.data,
                date_debut,
                date_fin
            )
            if id_experience is not None:
                flash("Expérience professionnelle modifiée", "success")
            else:
                flash("Expérience professionnelle ajoutée", "success")

            res["success"] = True

        else:
            experience_form_to_render = experience_form

        if id_experience is not None:
            res["content"] = _get_experience_template(id, form=experience_form_to_render)
        else:
            res["content"] = _get_new_experience_template(experience_form_to_render)



    return json.dumps(res)