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"))
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)