Skip to content
Extraits de code Groupes Projets
Valider b97e979c rédigé par Nicolas Joyard's avatar Nicolas Joyard
Parcourir les fichiers

Add senate support to .contrib.francedata

parent 5a833c7b
Aucune branche associée trouvée
Aucune étiquette associée trouvée
Aucune requête de fusion associée trouvée
...@@ -13,7 +13,7 @@ script: ...@@ -13,7 +13,7 @@ script:
- pep8 representatives/ --exclude migrations --ignore E128 - pep8 representatives/ --exclude migrations --ignore E128
- flake8 representatives/ --exclude migrations --ignore E128 - flake8 representatives/ --exclude migrations --ignore E128
- django-admin migrate - django-admin migrate
- cat representatives/contrib/francedata/tests/deputes_input.json | francedata_import_representatives - cat representatives/contrib/francedata/tests/representative_input.json | francedata_import_representatives
- cat representatives/contrib/parltrack/tests/representatives_fixture.json | parltrack_import_representatives - cat representatives/contrib/parltrack/tests/representatives_fixture.json | parltrack_import_representatives
- py.test - py.test
after_success: after_success:
......
...@@ -24,8 +24,12 @@ representative_pre_import = django.dispatch.Signal( ...@@ -24,8 +24,12 @@ representative_pre_import = django.dispatch.Signal(
def _get_rep_district_name(json): def _get_rep_district_name(json):
num = json.get('num_circo') num = json.get('num_circo')
nom = json.get('nom_circo') nom = json.get('nom_circo')
ordinal = u'ère' if num == 1 else u'ème'
return '%s (%d%s circonscription)' % (nom, num, ordinal) if num == 'nd':
return nom
else:
ordinal = u'ère' if num == 1 else u'ème'
return '%s (%d%s circonscription)' % (nom, num, ordinal)
def _get_rep_parl_groups(json): def _get_rep_parl_groups(json):
...@@ -83,19 +87,69 @@ FranceDataVariants = { ...@@ -83,19 +87,69 @@ FranceDataVariants = {
"chamber": True, "chamber": True,
"abbr": "%(groupe_sigle)s", "abbr": "%(groupe_sigle)s",
"name_path": "groupe/organisme", "name_path": "groupe/organisme",
"role_path": "groupe/fonction",
"start": "%(mandat_debut)s" "start": "%(mandat_debut)s"
}, },
{ {
"kind": "department", "kind": "department",
"chamber": True,
"abbr": "%(num_deptmt)s", "abbr": "%(num_deptmt)s",
"name": "%(nom_circo)s", "name": "%(nom_circo)s",
"start": "%(mandat_debut)s" "start": "%(mandat_debut)s"
}, },
{ {
"kind": "district", "kind": "district",
"abbr": "%(num_deptmt)s-%(num_circo)s",
"name_fn": _get_rep_district_name,
"start": "%(mandat_debut)s"
},
{
"kind": "parl-group",
"chamber": True,
"from": _get_rep_parl_groups,
"abbr": "%(name)s",
"name": "%(name)s",
"role": "%(role)s",
"start": "%(start)s"
},
{
"kind": "comittee",
"chamber": True, "chamber": True,
"abbr": "%(num_deptmt)s-%(num_circo)d", "from": _get_rep_comittees,
"abbr": "%(name)s",
"name": "%(name)s",
"role": "%(role)s",
"start": "%(start)s"
}
]
},
"SEN": {
"chamber": u"Sénat",
"remote_id_field": "id_institution",
"mail_domain": "@senat.fr",
"off_city": "Paris",
"off_street": u"Rue de Vaugirard",
"off_number": "15",
"off_code": "75291",
"off_name": u"Palais du Luxembourg",
"mandates": [
{
"kind": "group",
"chamber": True,
"abbr": "%(groupe_sigle)s",
"name_path": "groupe/organisme",
"role_path": "groupe/fonction",
"start": "%(mandat_debut)s"
},
{
"kind": "department",
"abbr": "%(num_deptmt)s",
"name": "%(nom_circo)s",
"start": "%(mandat_debut)s"
},
{
"kind": "district",
"abbr": "%(num_deptmt)s-%(num_circo)s",
"name_fn": _get_rep_district_name, "name_fn": _get_rep_district_name,
"start": "%(mandat_debut)s" "start": "%(mandat_debut)s"
}, },
...@@ -187,7 +241,7 @@ class GenericImporter(object): ...@@ -187,7 +241,7 @@ class GenericImporter(object):
class FranceDataImporter(GenericImporter): class FranceDataImporter(GenericImporter):
url = 'http://francedata.future/data/deputes.json' url = 'http://francedata.future/data/parlementaires.json'
def parse_date(self, date): def parse_date(self, date):
return _parse_date(date) return _parse_date(date)
...@@ -211,6 +265,9 @@ class FranceDataImporter(GenericImporter): ...@@ -211,6 +265,9 @@ class FranceDataImporter(GenericImporter):
''' '''
remote_id = rep_json[self.variant['remote_id_field']] remote_id = rep_json[self.variant['remote_id_field']]
if rep_json['num_circo'] == 'non disponible':
rep_json['num_circo'] = 'nd'
if not remote_id: if not remote_id:
logger.warning('Skipping MEP without UID %s %s', logger.warning('Skipping MEP without UID %s %s',
rep_json['nom'], rep_json['nom'],
...@@ -400,9 +457,15 @@ def main(stream=None): ...@@ -400,9 +457,15 @@ def main(stream=None):
if not apps.ready: if not apps.ready:
django.setup() django.setup()
importer = FranceDataImporter('AN') an_importer = FranceDataImporter('AN')
GenericImporter.pre_import(importer) GenericImporter.pre_import(an_importer)
sen_importer = FranceDataImporter('SEN')
GenericImporter.pre_import(sen_importer)
for data in ijson.items(stream or sys.stdin, ''): for data in ijson.items(stream or sys.stdin, ''):
for rep in data: for rep in data:
importer.manage_rep(rep) if rep['chambre'] == 'AN':
an_importer.manage_rep(rep)
elif rep['chambre'] == 'SEN':
sen_importer.manage_rep(rep)
...@@ -4,6 +4,7 @@ ...@@ -4,6 +4,7 @@
"profession": "Avocat, administrateur territorial", "profession": "Avocat, administrateur territorial",
"url_nosdeputes_api": "https://www.nosdeputes.fr/bernard-roman/json", "url_nosdeputes_api": "https://www.nosdeputes.fr/bernard-roman/json",
"nb_mandats": 2, "nb_mandats": 2,
"chambre": "AN",
"id": 153, "id": 153,
"groupes_parlementaires": [ "groupes_parlementaires": [
{ {
...@@ -182,224 +183,101 @@ ...@@ -182,224 +183,101 @@
] ]
}, },
{ {
"twitter": "", "mandat_debut": "2004-09-26",
"profession": "Pharmacien", "twitter": "dassouline",
"url_nosdeputes_api": "http://www.nosdeputes.fr/jean-pierre-barbier/json", "profession": "Professeur d'histoire-géographie",
"nb_mandats": 2, "url_nossenateurs_api": "http://www.nossenateurs.fr/david-assouline/json",
"id": 413, "chambre": "SEN",
"nb_mandats": 3,
"id": 44,
"groupes_parlementaires": [ "groupes_parlementaires": [
{ {
"responsabilite": { "responsabilite": {
"organisme": "Groupe d'études Économie verte et économie circulaire", "organisme": "Groupe France-Japon",
"fonction": "membre"
}
},
{
"responsabilite": {
"organisme": "Groupe d'études aménagement du territoire",
"fonction": "membre"
}
},
{
"responsabilite": {
"organisme": "Groupe d'études politique de l'eau",
"fonction": "membre"
}
},
{
"responsabilite": {
"organisme": "Groupe d'études coordination des droits européens",
"fonction": "membre"
}
},
{
"responsabilite": {
"organisme": "Groupe d'études automobile",
"fonction": "vice-président"
}
},
{
"responsabilite": {
"organisme": "Groupe d'études prévention et lutte contre la toxicomanie",
"fonction": "membre"
}
},
{
"responsabilite": {
"organisme": "Groupe d'amitié france-république d'autriche",
"fonction": "vice-président"
}
},
{
"responsabilite": {
"organisme": "Groupe d'études chrétiens d'orient",
"fonction": "membre"
}
},
{
"responsabilite": {
"organisme": "Groupe d'études granit, pierres naturelles, carrières et matériaux de construction",
"fonction": "membre"
}
},
{
"responsabilite": {
"organisme": "Groupe d'études Élevage",
"fonction": "membre"
}
},
{
"responsabilite": {
"organisme": "Groupe d'études sectes",
"fonction": "membre"
}
},
{
"responsabilite": {
"organisme": "Groupe d'études famille et adoption",
"fonction": "membre"
}
},
{
"responsabilite": {
"organisme": "Groupe d'études enseignement privé sous contrat et hors contrat",
"fonction": "membre"
}
},
{
"responsabilite": {
"organisme": "Groupe d'études pme",
"fonction": "membre"
}
},
{
"responsabilite": {
"organisme": "Groupe d'études république et religions",
"fonction": "président" "fonction": "président"
} }
}, }
{ ],
"responsabilite": { "sexe": "H",
"organisme": "Groupe d'études industrie chimique", "lieu_naissance": "non disponible",
"fonction": "membre" "anciens_autres_mandats": [],
} "url_nossenateurs": "http://www.nossenateurs.fr/david-assouline",
}, "emails": [
{ {
"responsabilite": { "email": "d.assouline@senat.fr"
"organisme": "Groupe d'études antisémitisme", }
"fonction": "membre" ],
} "responsabilites_extra_parlementaires": [
},
{ {
"responsabilite": { "responsabilite": {
"organisme": "Groupe d'études alimentation et santé", "organisme": "Centre national du cinéma et de l'image animée",
"fonction": "membre" "fonction": "membre"
} }
}, },
{ {
"responsabilite": { "responsabilite": {
"organisme": "Groupe d'études politiques de la ruralité", "organisme": "Commission de modernisation de la diffusion audiovisuelle",
"fonction": "secrétaire"
}
},
{
"responsabilite": {
"organisme": "Groupe d'études médicaments et produits de santé",
"fonction": "membre" "fonction": "membre"
} }
}, },
{ {
"responsabilite": { "responsabilite": {
"organisme": "Groupe d'études développement de la méthanisation", "organisme": "Section française de l'Assemblée parlementaire de la francophonie (A.P.F)",
"fonction": "membre" "fonction": "membre"
} }
} }
], ],
"sexe": "H", "anciens_mandats": [
"lieu_naissance": "Bron (Rhône)",
"anciens_autres_mandats": [],
"mandat_debut": "2012-06-20",
"emails": [
{ {
"email": "jpbarbier.depute@orange.fr" "mandat": "25/09/2011 / / "
}, },
{ {
"email": "jpbarbier@assemblee-nationale.fr" "mandat": "26/09/2004 / 25/09/2011 / "
}
],
"responsabilites_extra_parlementaires": [],
"anciens_mandats": [
{
"mandat": "20/06/2012 / / "
} }
], ],
"url_institution": "http://www.senat.fr/senateur/assouline_david04059m.html",
"parti_ratt_financier": "Parti socialiste",
"groupe": { "groupe": {
"organisme": "Les républicains", "organisme": "Socialiste et républicain",
"fonction": "membre" "fonction": "membre"
}, },
"nom": "Jean-Pierre Barbier", "nom": "David Assouline",
"sites_web": [ "sites_web": [
{ {
"site": "http://www.jeanpierrebarbier.fr" "site": "http://www.david-assouline.net"
} },
],
"groupe_sigle": "LES-REP",
"nom_circo": "Isère",
"parti_ratt_financier": "Les Républicains",
"place_en_hemicycle": "64",
"autres_mandats": [
{ {
"mandat": "Isère / Conseil départemental / président" "site": "https://twitter.com/dassouline"
} },
],
"url_nosdeputes": "http://www.nosdeputes.fr/jean-pierre-barbier",
"url_an": "http://www2.assemblee-nationale.fr/deputes/fiche/OMC_PA606888",
"adresses": [
{ {
"adresse": "Assemblée nationale, 126 Rue de l'Université 75355 PARIS 07 SP" "site": "https://www.facebook.com/DavAssouline"
}, },
{ {
"geo": { "site": "http://david-assouline.net"
"geometry": { }
"type": "Point", ],
"coordinates": [ "groupe_sigle": "SOC",
5.26302, "nom_circo": "Paris",
45.392192 "id_institution": "assouline_david04059m",
] "place_en_hemicycle": "114",
}, "autres_mandats": [
"type": "Feature", {
"properties": { "mandat": "Paris (20ème arrondissement) / conseiller"
"city": "La Côte-Saint-André",
"citycode": "38130",
"name": "6 Allée Jean Jaurès",
"type": "housenumber",
"label": "6 Allée Jean Jaurès 38260 La Côte-Saint-André",
"street": "Allée Jean Jaurès",
"postcode": "38260",
"context": "38, Isère, Rhône-Alpes",
"score": 0.3896703153988868,
"housenumber": "6",
"id": "ADRNIVX_0000000326062287"
}
},
"tel": "04 74 59 76 76",
"fax": "04 74 59 76 70",
"adresse": "6 Avenue Jean jaurès 38260 La Côte Saint-André Télécopie : 04 74 59 76 70 Téléphone : 04 74 59 76 76"
} }
], ],
"date_naissance": "1960-11-11", "adresses": [],
"slug": "jean-pierre-barbier", "date_naissance": "1959-06-16",
"id_an": "606888", "slug": "david-assouline",
"photo_url": "http://www.nosdeputes.fr/depute/photo/jean-pierre-barbier", "photo_url": "http://www.nossenateurs.fr/senateur/photo/david-assouline",
"prenom": "Jean-Pierre", "prenom": "David",
"num_deptmt": "38", "num_deptmt": "75",
"nom_de_famille": "Barbier", "nom_de_famille": "Assouline",
"num_circo": 7, "num_circo": "non disponible",
"responsabilites": [ "responsabilites": [
{ {
"responsabilite": { "responsabilite": {
"organisme": "Commission des affaires sociales", "organisme": "Commission de la culture, de l'éducation et de la communication",
"fonction": "membre" "fonction": "vice-président"
} }
} }
] ]
......
...@@ -10,9 +10,9 @@ from representatives.contrib.francedata import import_representatives ...@@ -10,9 +10,9 @@ from representatives.contrib.francedata import import_representatives
@pytest.mark.django_db @pytest.mark.django_db
def test_francedata_import_representatives(): def test_francedata_import_representatives():
inputjson = os.path.join(os.path.dirname(__file__), inputjson = os.path.join(os.path.dirname(__file__),
'deputes_input.json') 'representatives_input.json')
expected = os.path.join(os.path.dirname(__file__), expected = os.path.join(os.path.dirname(__file__),
'deputes_expected.json') 'representatives_expected.json')
# Disable django auto fields # Disable django auto fields
exclude = ('id', '_state', 'created', 'updated', 'fingerprint') exclude = ('id', '_state', 'created', 'updated', 'fingerprint')
......
0% Chargement en cours ou .
You are about to add 0 people to the discussion. Proceed with caution.
Terminez d'abord l'édition de ce message.
Veuillez vous inscrire ou vous pour commenter