# -*- coding: utf-8 -*- # Copyright(C) 2013 Bezleputh # # This file is part of weboob. # # weboob is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # weboob is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU Affero General Public License for more details. # # You should have received a copy of the GNU Affero General Public License # along with weboob. If not, see . from weboob.capabilities.job import BaseJobAdvert from weboob.tools.backend import Module, BackendConfig from weboob.capabilities.job import CapJob from weboob.tools.value import Value from weboob.tools.ordereddict import OrderedDict from .browser import PopolemploiBrowser __all__ = ['PopolemploiModule'] class PopolemploiModule(Module, CapJob): NAME = 'popolemploi' DESCRIPTION = u'Pole Emploi website' MAINTAINER = u'Bezleputh' EMAIL = 'carton_ben@yahoo.fr' VERSION = '1.1' BROWSER = PopolemploiBrowser places_choices = OrderedDict([(k, u'%s' % (v)) for k, v in sorted({ '100|PAYS|01': u'France entière', '102|REGION|42': u'Alsace', '103|DEPARTEMENT|67': u'-- Rhin (Bas) (67)', '104|DEPARTEMENT|68': u'-- Rhin (Haut) (68)', '105|REGION|72': u'Aquitaine', '106|DEPARTEMENT|24': u'-- Dordogne (24)', '107|DEPARTEMENT|33': u'-- Gironde (33)', '108|DEPARTEMENT|40': u'-- Landes (40)', '109|DEPARTEMENT|47': u'-- Lot et Garonne (47)', '110|DEPARTEMENT|64': u'-- Pyrénées Atlantiques (64)', '111|REGION|83': u'Auvergne', '112|DEPARTEMENT|03': u'-- Allier (03)', '113|DEPARTEMENT|15': u'-- Cantal (15)', '114|DEPARTEMENT|43': u'-- Loire (Haute) (43)', '115|DEPARTEMENT|63': u'-- Puy de Dôme (63)', '116|REGION|26': u'Bourgogne', '117|DEPARTEMENT|21': u'-- Côte d\'Or (21)', '118|DEPARTEMENT|58': u'-- Nièvre (58)', '119|DEPARTEMENT|71': u'-- Saône et Loire (71)', '120|DEPARTEMENT|89': u'-- Yonne (89)', '121|REGION|53': u'Bretagne', '122|DEPARTEMENT|22': u'-- Côtes d\'Armor (22)', '123|DEPARTEMENT|29': u'-- Finistère (29)', '124|DEPARTEMENT|35': u'-- Ille et Vilaine (35)', '125|DEPARTEMENT|56': u'-- Morbihan (56)', '126|REGION|24': u'Centre', '127|DEPARTEMENT|18': u'-- Cher (18)', '128|DEPARTEMENT|28': u'-- Eure et Loir (28)', '129|DEPARTEMENT|36': u'-- Indre (36)', '130|DEPARTEMENT|37': u'-- Indre et Loire (37)', '131|DEPARTEMENT|41': u'-- Loir et Cher (41)', '132|DEPARTEMENT|45': u'-- Loiret (45)', '133|REGION|21': u'Champagne Ardenne', '134|DEPARTEMENT|08': u'-- Ardennes (08)', '135|DEPARTEMENT|10': u'-- Aube (10)', '136|DEPARTEMENT|51': u'-- Marne (51)', '137|DEPARTEMENT|52': u'-- Marne (Haute) (52)', '138|REGION|94': u'Corse', '139|DEPARTEMENT|2A': u'-- Corse du Sud (2A)', '140|DEPARTEMENT|2B': u'-- Haute Corse (2B)', '141|REGION|43': u'Franche Comté', '142|DEPARTEMENT|90': u'-- Belfort (Territoire de) (90)', '143|DEPARTEMENT|25': u'-- Doubs (25)', '144|DEPARTEMENT|39': u'-- Jura (39)', '145|DEPARTEMENT|70': u'-- Saône (Haute) (70)', '146|REGION|11': u'Ile de France', '147|DEPARTEMENT|91': u'-- Essonne (91)', '148|DEPARTEMENT|92': u'-- Hauts de Seine (92)', '149|DEPARTEMENT|75': u'-- Paris (Dept.) (75)', '150|DEPARTEMENT|93': u'-- Seine Saint Denis (93)', '151|DEPARTEMENT|77': u'-- Seine et Marne (77)', '152|DEPARTEMENT|95': u'-- Val d\'Oise (95)', '153|DEPARTEMENT|94': u'-- Val de Marne (94)', '154|DEPARTEMENT|78': u'-- Yvelines (78)', '155|REGION|91': u'Languedoc Roussillon', '156|DEPARTEMENT|11': u'-- Aude (11)', '157|DEPARTEMENT|30': u'-- Gard (30)', '158|DEPARTEMENT|34': u'-- Hérault (34)', '159|DEPARTEMENT|48': u'-- Lozère (48)', '161|DEPARTEMENT|66': u'-- Pyrénées Orientales (66)', '162|REGION|74': u'Limousin', '163|DEPARTEMENT|19': u'-- Corrèze (19)', '164|DEPARTEMENT|23': u'-- Creuse (23)', '165|DEPARTEMENT|87': u'-- Vienne (Haute) (87)', '166|REGION|41': u'Lorraine', '167|DEPARTEMENT|54': u'-- Meurthe et Moselle (54)', '168|DEPARTEMENT|55': u'-- Meuse (55)', '169|DEPARTEMENT|57': u'-- Moselle (57)', '170|DEPARTEMENT|88': u'-- Vosges (88)', '171|REGION|73': u'Midi Pyrénées', '172|DEPARTEMENT|09': u'-- Ariège (09)', '173|DEPARTEMENT|12': u'-- Aveyron (12)', '174|DEPARTEMENT|31': u'-- Garonne (Haute) (31)', '175|DEPARTEMENT|32': u'-- Gers (32)', '176|DEPARTEMENT|46': u'-- Lot (46)', '177|DEPARTEMENT|65': u'-- Pyrénées (Hautes) (65)', '178|DEPARTEMENT|81': u'-- Tarn (81)', '179|DEPARTEMENT|82': u'-- Tarn et Garonne (82)', '180|REGION|31': u'Nord Pas de Calais', '181|DEPARTEMENT|59': u'-- Nord (59)', '182|DEPARTEMENT|62': u'-- Pas de Calais (62)', '183|REGION|25': u'Normandie (Basse)', '184|DEPARTEMENT|14': u'-- Calvados (14)', '185|DEPARTEMENT|50': u'-- Manche (50)', '186|DEPARTEMENT|61': u'-- Orne (61)', '187|REGION|23': u'Normandie (Haute)', '188|DEPARTEMENT|27': u'-- Eure (27)', '189|DEPARTEMENT|76': u'-- Seine Maritime (76)', '190|REGION|52': u'Pays de la Loire', '191|DEPARTEMENT|44': u'-- Loire Atlantique (44)', '192|DEPARTEMENT|49': u'-- Maine et Loire (49)', '193|DEPARTEMENT|53': u'-- Mayenne (53)', '194|DEPARTEMENT|72': u'-- Sarthe (72)', '195|DEPARTEMENT|85': u'-- Vendée (85)', '196|REGION|22': u'Picardie', '197|DEPARTEMENT|02': u'-- Aisne (02)', '198|DEPARTEMENT|60': u'-- Oise (60)', '199|DEPARTEMENT|80': u'-- Somme (80)', '200|REGION|54': u'Poitou Charentes', '201|DEPARTEMENT|16': u'-- Charente (16)', '202|DEPARTEMENT|17': u'-- Charente Maritime (17)', '203|DEPARTEMENT|79': u'-- Sèvres (Deux) (79)', '204|DEPARTEMENT|86': u'-- Vienne (86)', '205|REGION|93': u'Provence Alpes Côte d\'Azur', '206|DEPARTEMENT|05': u'-- Alpes (Hautes) (05)', '207|DEPARTEMENT|06': u'-- Alpes Maritimes (06)', '208|DEPARTEMENT|04': u'-- Alpes de Haute Provence (04)', '209|DEPARTEMENT|13': u'-- Bouches du Rhône (13)', '210|DEPARTEMENT|83': u'-- Var (83)', '211|DEPARTEMENT|84': u'-- Vaucluse (84)', '212|REGION|82': u'Rhône Alpes', '213|DEPARTEMENT|01': u'-- Ain (01)', '214|DEPARTEMENT|07': u'-- Ardèche (07)', '215|DEPARTEMENT|26': u'-- Drôme (26)', '216|DEPARTEMENT|38': u'-- Isère (38)', '217|DEPARTEMENT|42': u'-- Loire (42)', '218|DEPARTEMENT|69': u'-- Rhône (69)', '219|DEPARTEMENT|73': u'-- Savoie (73)', '220|DEPARTEMENT|74': u'-- Savoie (Haute) (74)', '221|REGION|03': u'Région Antilles / Guyane', '222|DEPARTEMENT|971': u'-- Guadeloupe (971)', '223|DEPARTEMENT|973': u'-- Guyane (973)', '224|DEPARTEMENT|972': u'-- Martinique (972)', '225|DEPARTEMENT|977': u'-- Saint Barthélémy (977)', '226|DEPARTEMENT|978': u'-- Saint Martin (978)', '227|REGION|98': u'Région Atlantique Nord', '228|DEPARTEMENT|975': u'-- Saint Pierre et Miquelon (975)', '229|REGION|95': u'Région Pacifique', '230|DEPARTEMENT|989': u'-- Ile de Clipperton (989)', '231|DEPARTEMENT|988': u'-- Nouvelle Calédonie (988)', '232|DEPARTEMENT|987': u'-- Polynésie française (987)', '233|DEPARTEMENT|984': u'-- Terres australes/antarctiques (984)', '234|DEPARTEMENT|986': u'-- Wallis et Futuna (986)', '235|REGION|97': u'Région Réunion / Mayotte', '236|DEPARTEMENT|976': u'-- Mayotte (976)', '237|DEPARTEMENT|974': u'-- Réunion (974)', }.iteritems())]) type_contrat_choices = OrderedDict([(k, u'%s' % (v)) for k, v in sorted({ ' ': u'Tous types de contrats', '11': u'CDI tout public', '14': u'CDI alternance', '13': u'CDI insertion', '12': u'CDD tout public', '16': u'CDD alternance', '15': u'CDD insertion', '10': u'CDD Senior', '3': u'Mission d\'intérim', '4': u'Contrat de travail saisonnier', '5': u'Contrat de travail intermittent', '8': u'Franchise', '7': u'Profession libérale', '9': u'Reprise d\'entreprise', '6': u'Profession commerciale', }.iteritems())]) salary_choices = OrderedDict([(k, u'%s' % (v)) for k, v in sorted({ ' ': u'Tout salaire annuel', 'FOURCHETTE1': u'Moins de 15000', 'FOURCHETTE2': u'Compris entre 15000 et 18000', 'FOURCHETTE3': u'Compris entre 18000 et 21000', 'FOURCHETTE4': u'Compris entre 21000 et 24000', 'FOURCHETTE5': u'Compris entre 24000 et 36000', 'FOURCHETTE6': u'Compris entre 36000 et 60000', 'FOURCHETTE7': u'Supérieur à 60000', }.iteritems())]) qualification_choices = OrderedDict([(k, u'%s' % (v)) for k, v in sorted({ ' ': u'Toute Qualification', '1': u'Manoeuvre', '2': u'Ouvrier spécialisé', '3': u'Ouvrier qualifié (P1,P2)', '4': u'Ouvrier qualifié (P3,P4,OHQ)', '5': u'Employé non qualifié', '6': u'Employé qualifié', '7': u'Technicien', '8': u'Agent de maîtrise', '9': u'Cadre', }.iteritems())]) limit_date_choices = OrderedDict([(k, u'%s' % (v)) for k, v in sorted({ ' ': u'Aucune limite', '1': u'Hier', '3': u'3 jours', '7': u'1 semaine', '14': u'2 semaines', '31': u'1 mois', '93': u'3 mois', }.iteritems())]) domain_choices = OrderedDict([(k, u'%s' % (v)) for k, v in sorted({ ' ': u'Tout secteur d\'activité', '88': u'Action sociale sans hebergt', '82': u'Activ.admin/soutien entreprise', '66': u'Activ. auxiliaire finance/assu', '90': u'Activ. crea/artistiq/spectacle', '77': u'Activ. de loc. et loc.-bail', '70': u'Activ. siege soc/conseil gest.', '93': u'Activ. sportive/recreat/loisir', '69': u'Activite juridique/comptable', '94': u'Activite organisations assoc.', '86': u'Activite pr la sante humaine', '53': u'Activites de poste/courrier', '64': u'Activite services financiers', '68': u'Activites immobilieres', '62': u'Activites informatiques', '78': u'Activites liees a l\'emploi', '75': u'Activites veterinaires', '84': u'Administration publiq/defense', '79': u'Agences voyage/activ. liees', '71': u'Archi/ing/control/analyse tech', '65': u'Assurance', '32': u'Autre industrie manufacturiere', '74': u'Autres activ.spe scientif/tech', '08': u'Autres industries extractives', '91': u'Biblio/ musée/ activ. culturel', '36': u'Captage/traitement/distrib.eau', '19': u'Cokefaction et raffinage', '37': u'Collecte/traitement eaux usees', '38': u'Collecte/traitnt/elimin dechet', '45': u'Commerce/reparation auto/moto', '47': u'Commerce detail sauf auto/moto', '46': u'Commerce gros sauf auto/moto', '41': u'Construction de batiments', '01': u'Cult./prod. animale, chasse', '39': u'Depollution/autre gest. dechet', '58': u'Edition', '80': u'Enquetes et securite', '85': u'Enseignement', '52': u'Entreposage/sce auxil. transp', '06': u'Extraction d\'hydrocarbures', '05': u'Extraction houille/ lignite', '07': u'Extraction minerais metalliq.', '26': u'Fab. prod. info/electro/optiq', '22': u'Fabr. prod. caoutchouc/plastiq', '30': u'Fabric. autre materiel transp.', '23': u'Fabric.autre produit non metal', '28': u'Fabric. autres machines/equip.', '27': u'Fabric. d\'equip. electriques', '31': u'Fabrication de meubles', '12': u'Fabrication produit base tabac', '25': u'Fabrication produits metalliq', '42': u'Genie civil', '55': u'Hebergement', '87': u'Hebergt médico-social/ social', '18': u'Imprimerie/reprod. enregistre.', '00': u'Indetermine', '29': u'Industrie automobile', '20': u'Industrie chimique', '14': u'Industrie de l\'habillement', '11': u'Industrie des boissons', '15': u'Industrie du cuir/la chaussure', '17': u'Industrie du papier/du carton', '21': u'Industrie pharmaceutique', '10': u'Industries alimentaires', '13': u'Industrie textile', '24': u'Metallurgie', '92': u'Orga. jeux hasard/argent', '99': u'Organisations et organismes', '03': u'Peche et aquaculture', '35': u'Prod./distrib.elec/gaz/vap/air', '59': u'Prod film cine/video/tv/musiq', '98': u'Production menage bien propre', '60': u'Programmation et diffusion', '73': u'Publicite et etudes de marche', '72': u'Rech.-dev. scientifique', '33': u'Repar./instal. machines/equip.', '95': u'Repar.pc/biens perso/domestiq', '56': u'Restauration', '97': u'Sce domestique pr particuliers', '81': u'Services bat/amenagnt paysager', '63': u'Services d\'information', '96': u'Services personnels', '09': u'Soutien industries extractives', '02': u'Sylvicult./exploit. forestiere', '61': u'Telecommunications', '51': u'Transports aeriens', '50': u'Transports par eau', '49': u'Transports terrestres', '16': u'Travail bois/fab. article bois', '43': u'Travaux constr.specialises', }.iteritems())]) CONFIG = BackendConfig(Value('metier', label='Job name', masked=False, default=''), Value('place', label=u'Place', choices=places_choices, default='100|FRANCE|01'), Value('contrat', label=u'Contract', choices=type_contrat_choices, default=''), Value('salary', label=u'Salary', choices=salary_choices, default=''), Value('qualification', label=u'Qualification', choices=qualification_choices, default=''), Value('limit_date', label=u'Date limite', choices=limit_date_choices, default=''), Value('domain', label=u'Domain', choices=domain_choices, default='')) def search_job(self, pattern=None): return self.browser.search_job(pattern=pattern) def advanced_search_job(self): return self.browser.advanced_search_job(metier=self.config['metier'].get(), place=self.config['place'].get(), contrat=self.config['contrat'].get(), salary=self.config['salary'].get(), qualification=self.config['qualification'].get(), limit_date=self.config['limit_date'].get(), domain=self.config['domain'].get()) def get_job_advert(self, _id, advert=None): return self.browser.get_job_advert(_id, advert) def fill_obj(self, advert, fields): return self.get_job_advert(advert.id, advert) OBJECTS = {BaseJobAdvert: fill_obj}