Corrections informations concernant les publications
[auf_savoirs_en_partage_django.git] / auf_savoirs_en_partage / chercheurs / api.py
CommitLineData
bf563475
NBV
1# -*- encoding: utf-8 -*
2from django.http import HttpResponse
3from django.core import serializers
5b3ac131
NBV
4from django.shortcuts import get_object_or_404
5
776eadeb
NBV
6from django.utils import simplejson
7
8from chercheurs.models import Chercheur, Personne
bf563475
NBV
9
10STATUS_OK = 200
11STATUS_ERROR = 400
12STATUS_ERROR_PERMISSIONS = 403
13STATUS_ERROR_NOT_FOUND = 404
14STATUS_ERROR_BADMETHOD = 405
15
776eadeb 16def api(request, pays=None, region=None, chercheur_id=None):
bf563475 17 api = API(request)
776eadeb
NBV
18 if chercheur_id is not None:
19 return api.api_chercheur(chercheur_id)
5b3ac131 20 else:
6cb88817
NBV
21 filter_pays = pays.split(',')
22 return api.api_chercheurs_liste(pays=filter_pays, region=region)
bf563475
NBV
23
24def api_return(status, text='', json=False):
25 content_type = 'text/html'
26 if status == STATUS_OK and json:
27 content_type = 'text/json'
28 if text is None:
29 if status == STATUS_ERROR:
30 text = 'Error'
31 elif status == STATUS_ERROR_NOT_FOUND:
32 text = 'Resource Not Found'
33 elif status == STATUS_ERROR_PERMISSIONS:
34 text = 'Invalid username or password'
35 elif status == STATUS_ERROR_BADMETHOD:
36 text = 'Invalid request method'
37 elif status == STATUS_OK:
38 text = 'OK'
39
40 r = HttpResponse(status=status, content=text, content_type=content_type)
41
42 if status == STATUS_ERROR_BADMETHOD:
43 r.Allow = 'POST'
44
45 return r
46
47class API:
48 def __init__(self, request):
49 self.request = request
50
776eadeb
NBV
51 def api_chercheur(self, chercheur_id):
52 chercheur = get_object_or_404(Chercheur, id=chercheur_id)
53 # Domaines de recherche du chercheur
54 data = serializers.serialize('json', [chercheur,])
6cb88817 55 #return api_return(STATUS_OK, data, True)
776eadeb
NBV
56
57
58 domaines_recherche = []
59 for dr in chercheur.domaines_recherche:
60 domaines_recherche.append(dr.nom)
61
62 # Groupes chercheur
63 groupes_chercheur = []
64 for gc in chercheur.groupes_chercheur:
65 groupes_chercheur.append(gc.nom)
66
67 # Expertises
68 expertises = []
69 for exp in chercheur.expertises.all():
70 expertises.append(
71 {"nom": "%s" % exp.nom,
72 "date": "%s" % exp.date,
73 "organisme_demandeur": "%s" % exp.organisme_demandeur,
159c3d76 74 "organisme_demandeur_visible": exp.organisme_demandeur_visible})
776eadeb
NBV
75
76 # Publications
77 publications = []
78 for pub in chercheur.publications.all():
79 publications.append(
80 {"auteurs": "%s" % pub.auteurs,
81 "titre": "%s" % pub.titre,
82 "revue": "%s" % pub.revue,
83 "annee": "%s" % pub.annee,
84 "editeur": "%s" % pub.editeur,
85 "lieu_edition": "%s" % pub.lieu_edition,
86 "nb_pages": "%s" % pub.nb_pages,
87 "url": "%s" % pub.url,
88 "publication_affichage": "%s" % pub.publication_affichage})
89
90 chercheur_details = [{"id": "%s" % chercheur.id,
91 "civilite": "%s" % chercheur.civilite,
92 "prenom": "%s" % chercheur.prenom,
6cb88817
NBV
93 "nom": "%s" % chercheur.nom,
94 "pays": "%s" % chercheur.pays,
6d09d5c1 95 "etablissement": "%s" % chercheur.etablissement_display,
776eadeb 96 "afficher_courriel": "%s" % chercheur.afficher_courriel,
6d09d5c1 97 "courriel": "%s" % chercheur.courriel,
776eadeb 98 "region": "%s" % chercheur.region.nom,
6d09d5c1 99 "statut": "%s" % chercheur.get_statut_display(),
776eadeb 100 "diplome": "%s" % chercheur.diplome,
6d09d5c1 101 "domaines_recherche": domaines_recherche,
776eadeb
NBV
102 "discipline": "%s" % chercheur.discipline,
103 "theme_recherche": "%s" % chercheur.theme_recherche,
104 "equipe_recherche": "%s" % chercheur.equipe_recherche,
105 "mots_cles": "%s" % chercheur.mots_cles,
106 "url_site_web": "%s" % chercheur.url_site_web,
107 "url_blog": "%s" % chercheur.url_blog,
108 "url_reseau_social": "%s" % chercheur.url_reseau_social,
6d09d5c1
NBV
109 "membre_instance_auf": chercheur.membre_instance_auf,
110 "expert_oif": chercheur.expert_oif,
111 "membre_association_francophone": chercheur.membre_association_francophone,
112 "membre_reseau_institutionnel": chercheur.membre_reseau_institutionnel,
113 "membre_instance_auf_nom": "%s" % chercheur.get_membre_instance_auf_nom_display(),
776eadeb
NBV
114 "membre_instance_auf_fonction": "%s" % chercheur.membre_instance_auf_fonction,
115 "membre_instance_auf_dates": "%s" % chercheur.membre_instance_auf_dates,
116 "expert_oif_details": "%s" % chercheur.expert_oif_details,
117 "expert_oif_dates": "%s" % chercheur.expert_oif_dates,
118 "membre_association_francophone_details": "%s" % chercheur.membre_association_francophone_details,
6d09d5c1
NBV
119 "membre_reseau_institutionnel_nom": "%s" %
120 chercheur.get_membre_reseau_institutionnel_nom_display(),
776eadeb
NBV
121 "membre_reseau_institutionnel_fonction": "%s" % chercheur.membre_reseau_institutionnel_fonction,
122 "membre_reseau_institionnel_dates": "%s" % chercheur.membre_reseau_institutionnel_dates,
123 "expertises": expertises,
159c3d76 124 "expertises_auf": chercheur.expertises_auf,
776eadeb 125 "publications": publications}]
6d09d5c1 126 #import pdb;pdb.set_trace()
776eadeb 127 if chercheur.these:
6d09d5c1 128 #import pdb;pdb.set_trace()
776eadeb
NBV
129 details_pop = chercheur_details.pop(0)
130 details_pop.update(
6d09d5c1
NBV
131 {"these" : "%s" % chercheur.these,
132 "these_url": "%s" % chercheur.these.url,
776eadeb
NBV
133 "these_titre": "%s" % chercheur.these.titre,
134 "these_etablissement": "%s" % chercheur.these.etablissement,
135 "these_annee": "%s" % chercheur.these.annee,
136 "these_nb_pages": "%s" % chercheur.these.nb_pages,
137 "these_directeur": "%s" % chercheur.these.directeur,
138 })
139 chercheur_details.append(details_pop)
6cb88817 140 return api_return(STATUS_OK, simplejson.dumps(chercheur_details), True)
5b3ac131 141
776eadeb 142 def api_chercheurs_liste(self, pays=None, region=None):
bf563475 143 if pays is not None:
6cb88817
NBV
144 #chercheurs = Chercheur.objects.filter_pays(pays)
145 chercheurs = Chercheur.objects.filter(etablissement__pays__in=[pays])|Chercheur.objects.filter(etablissement_autre_pays__in=pays)
146
87567c72 147 elif region is not None:
ebde48e0 148 chercheurs = Chercheur.objects.filter_region(region)
bf563475
NBV
149 else:
150 return api_return(STATUS_ERROR, "Erreur dans la requete de recherche de chercheurs")
151
776eadeb
NBV
152 return api_return(STATUS_OK, simplejson.dumps(
153 [{"id": "%s" % c.id,
154 "nom": "%s" % c.nom,
155 "prenom": "%s" % c.prenom,
6d09d5c1 156 "etablissement": "%s" % c.etablissement,
776eadeb
NBV
157 "pays": "%s" % c.pays}
158 for c in chercheurs]), json=True)