# -*- encoding: utf-8 -*
+from django.core import serializers
from django.shortcuts import render_to_response, redirect, get_object_or_404
from django.template import Context, RequestContext
-
from django.utils import simplejson
+from auf.django.emploi import models as emploi
+from restkit import request, Resource
import datamaster_modeles.models as ref
-
-from restkit import request as req
-from restkit import Resource
-from httplib2 import Http
+import poster
import urllib2
-from poster.encode import multipart_encode, MultipartParam
-from poster.streaminghttp import StreamingHTTPHandler, StreamingHTTPRedirectHandler, StreamingHTTPSHandler, register_openers
-from StringIO import StringIO
-import urllib2, poster.streaminghttp
+from auf.django.emploi import settings
+STATUS_OK = 200
-import settings
-from auf.django.emploi import models as emploi
-
-STATUS_OK = '200 OK'
+def req(*args, **kwargs):
+ timeout = 10
+ if not kwargs.has_key('timeout'):
+ kwargs['timeout'] = timeout
+ return request(*args, **kwargs)
class API:
- def __init__(self, request):
+ def __init__(self, request, env):
self.request = request
+ self.env = env
- def offre_emploi_liste(self, env):
-
- if hasattr(settings, "RECRUTEMENT_URL"):
- url = getattr(settings, "RECRUTEMENT_URL")[env] + "offre_emploi_liste/"
- else:
- raise ImportError, "Could not import settings RECRUTEMENT_PATH"
+ def offre_emploi_liste(self,):
+ url = settings.RECRUTEMENT_URLS[self.env] + "offre_emploi_liste/"
r = req(url)
- liste_json = r.body_string()
- try:
- liste_offres = simplejson.loads(liste_json)
- except:
- return []
- obj_offres_emploi = []
+ data = r.body_string()
+ offres = [offre.object for offre in serializers.deserialize("json", data)]
+ return offres
- for offre_dict in liste_offres:
- offre = emploi.OffreEmploi()
- offre.id = offre_dict['id']
- offre.est_affiche = offre_dict['est_affiche']
- offre.statut = offre_dict['statut']
- offre.nom = offre_dict['nom']
- offre.resume = offre_dict['resume']
- offre.description = offre_dict['description']
- offre.poste_nom = offre_dict['poste_nom']
- offre.date_limite = offre_dict['date_limite']
- offre.region = ref.Region.objects.get(id=offre_dict['region'])
- offre.bureau = ref.Bureau.objects.get(id=offre_dict['bureau'])
- offre.duree_affectation = offre_dict['duree_affectation']
- offre.renumeration = offre_dict['renumeration']
- offre.debut_affectation = offre_dict['debut_affectation']
- offre.lieu_affectation = ref.Implantation.objects.\
- get(id=offre_dict['lieu_affectation'])
- obj_offres_emploi.append(offre)
- return obj_offres_emploi
-
- def offre_emploi(self, offre_id, env):
- if hasattr(settings, "RECRUTEMENT_URL"):
- url = getattr(settings, "RECRUTEMENT_URL")[env] + "offre_emploi/?id=%s"
- else:
- raise ImportError, "Could not import settings RECRUTEMENT_PATH"
+ def offre_emploi(self, offre_id):
+ url = settings.RECRUTEMENT_URLS[self.env] + "offre_emploi/?id=%s"
r = req(url % offre_id)
- offre_json = r.body_string()
-
- try:
- offre_dict = simplejson.loads(offre_json)
- except:
- return []
- obj_offres_emploi = []
-
- offre = emploi.OffreEmploi()
- offre.id = offre_dict['id']
- offre.est_affiche = offre_dict['est_affiche']
- offre.statut = offre_dict['statut']
- offre.nom = offre_dict['nom']
- offre.resume = offre_dict['resume']
- offre.description = offre_dict['description']
- offre.poste_nom = offre_dict['poste_nom']
- offre.date_limite = offre_dict['date_limite']
- offre.region = ref.Region.objects.get(id=offre_dict['region'])
- offre.bureau = ref.Bureau.objects.get(id=offre_dict['bureau'])
- offre.duree_affectation = offre_dict['duree_affectation']
- offre.renumeration = offre_dict['renumeration']
- offre.debut_affectation = offre_dict['debut_affectation']
- offre.lieu_affectation = ref.Implantation.objects.\
- get(id=offre_dict['lieu_affectation'])
- obj_offres_emploi.append(offre)
- return obj_offres_emploi
-
- def candidat_add(self, offre_id, env):
- if hasattr(settings, "RECRUTEMENT_URL"):
- url = getattr(settings, "RECRUTEMENT_URL")[env] + "candidat_add/%s"
+ data = r.body_string()
+ offres = [o.object for o in serializers.deserialize("json", data)]
+ if len(offres) == 0:
+ return offres[0]
else:
- raise ImportError, "Could not import settings RECRUTEMENT_PATH"
-
-
+ return offres
+
+ def candidat_add(self, offre_id,):
+ url = settings.RECRUTEMENT_URLS[self.env] + "candidat_add/%s/" % offre_id
+ r = Resource(url)
+ params = self.request.POST
+ for k, up_file in self.request.FILES.items():
+ params[k] = up_file
+ opener = poster.streaminghttp.register_openers()
+ datagen, headers = poster.encode.multipart_encode(params)
+ request = urllib2.Request(url, datagen, headers)
+ resp = urllib2.urlopen(request)
+ if resp.code == STATUS_OK:
+ candidats = [c.object for c in serializers.deserialize("json", resp.read())]
+ if len(candidats) == 1:
+ return candidats[0]
return None
-