Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
I
irfm
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
6
Issues
6
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
Analytics
Analytics
Repository
Value Stream
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
regardscitoyens
irfm
Commits
2c097a31
Commit
2c097a31
authored
May 06, 2017
by
Nicolas Joyard
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Load groupes depuis ND + ajout couleurs
parent
bd0b6c7d
Changes
9
Hide whitespace changes
Inline
Side-by-side
Showing
9 changed files
with
184 additions
and
20 deletions
+184
-20
irfm/cli.py
irfm/cli.py
+1
-0
irfm/importers/nosdeputes.py
irfm/importers/nosdeputes.py
+90
-11
irfm/models/__init__.py
irfm/models/__init__.py
+1
-1
irfm/models/parlementaire.py
irfm/models/parlementaire.py
+13
-2
irfm/routes.py
irfm/routes.py
+3
-1
irfm/templates/_base.html.j2
irfm/templates/_base.html.j2
+5
-3
irfm/templates/list.html.j2
irfm/templates/list.html.j2
+2
-2
migrations/versions/9784b9baaf7d_suppression_groupe.py
migrations/versions/9784b9baaf7d_suppression_groupe.py
+30
-0
migrations/versions/beb25e23d267_ajout_entite_groupe_relation_parl.py
...ersions/beb25e23d267_ajout_entite_groupe_relation_parl.py
+39
-0
No files found.
irfm/cli.py
View file @
2c097a31
...
...
@@ -24,4 +24,5 @@ def runserver():
@
manager
.
command
def
import_nd
():
"""Importe les députés depuis NosDéputés.fr"""
app
.
config
.
update
(
SQLALCHEMY_ECHO
=
False
)
NosDeputesImporter
(
app
).
run
()
irfm/importers/nosdeputes.py
View file @
2c097a31
...
...
@@ -6,7 +6,7 @@ import dateparser
import
requests
from
sqlalchemy.inspection
import
inspect
from
..models
import
db
,
Parlementaire
from
..models
import
db
,
Groupe
,
Parlementaire
def
parse_date
(
date
):
...
...
@@ -18,12 +18,30 @@ def parse_date(date):
return
dateparser
.
parse
(
date
[
0
:
10
])
def
dechex
(
dec
):
s
=
hex
(
int
(
dec
))[
2
:]
if
len
(
s
)
==
1
:
s
=
'0'
+
s
elif
len
(
s
)
>
2
:
s
=
'ff'
return
s
def
parse_couleur
(
couleur
):
if
not
couleur
:
return
'#000000'
else
:
return
'#'
+
''
.
join
(
map
(
dechex
,
couleur
.
split
(
','
)))
class
NosDeputesImporter
(
object
):
URL_LISTE
=
'https://www.nosdeputes.fr/deputes/json'
URL_GROUPES
=
'https://www.nosdeputes.fr/organismes/groupe/json'
URL_DEPUTES
=
'https://www.nosdeputes.fr/deputes/json'
URL_PHOTO
=
'//www.nosdeputes.fr/depute/photo/%(slug)s'
columns
=
None
groupes
=
{}
def
__init__
(
self
,
app
):
self
.
app
=
app
...
...
@@ -65,8 +83,8 @@ class NosDeputesImporter(object):
'num_deptmt'
:
data
[
'num_deptmt'
],
'nom_circo'
:
data
[
'nom_circo'
],
'num_circo'
:
data
[
'num_circo'
],
'groupe'
:
data
[
'parti_ratt_financier'
],
'groupe
_sigle'
:
data
[
'groupe_sigle
'
],
'groupe
'
:
self
.
groupes
[
data
[
'groupe_sigle'
]
or
'NI
'
],
'url_photo'
:
self
.
URL_PHOTO
%
data
,
'url_rc'
:
data
[
'url_nosdeputes'
],
...
...
@@ -86,13 +104,11 @@ class NosDeputesImporter(object):
return
created
,
updated
def
run
(
self
):
self
.
info
(
'Début import NosDéputés.fr'
)
def
import_deputes
(
self
):
try
:
data
=
requests
.
get
(
self
.
URL_
LISTE
).
json
()
data
=
requests
.
get
(
self
.
URL_
DEPUTES
).
json
()
except
Exception
as
e
:
self
.
error
(
'Téléchargement %s impossible: %s'
%
(
URL_
LISTE
,
e
))
self
.
error
(
'Téléchargement %s impossible: %s'
%
(
URL_
DEPUTES
,
e
))
return
self
.
info
(
'%s députés trouvés'
%
len
(
data
[
'deputes'
]))
...
...
@@ -110,5 +126,68 @@ class NosDeputesImporter(object):
db
.
session
.
commit
()
db
.
session
.
flush
()
self
.
info
(
'Import terminé: %s créés, %s mis à jour'
%
(
created
,
updated
))
self
.
info
(
'Import députés terminé: %s créés, %s mis à jour'
%
(
created
,
updated
))
def
import_groupe
(
self
,
data
):
created
=
False
updated
=
False
if
data
.
get
(
'acronyme'
,
None
):
id_data
=
{
'chambre'
:
'AN'
,
'sigle'
:
data
[
'acronyme'
]
}
groupe
=
Groupe
.
query
.
filter_by
(
**
id_data
).
first
()
if
not
groupe
:
groupe
=
Groupe
(
**
id_data
)
db
.
session
.
add
(
groupe
)
created
=
True
self
.
groupes
[
id_data
[
'sigle'
]]
=
groupe
fields
=
{
'nom'
:
data
[
'nom'
],
'couleur'
:
parse_couleur
(
data
[
'couleur'
])
}
for
key
,
newvalue
in
fields
.
items
():
curvalue
=
getattr
(
groupe
,
key
)
if
curvalue
!=
newvalue
:
updated
=
True
setattr
(
groupe
,
key
,
newvalue
)
return
created
,
updated
def
import_groupes
(
self
):
try
:
data
=
requests
.
get
(
self
.
URL_GROUPES
).
json
()
except
Exception
as
e
:
self
.
error
(
'Téléchargement %s impossible: %s'
%
(
URL_DEPUTES
,
e
))
return
self
.
info
(
'%s organismes trouvés'
%
len
(
data
[
'organismes'
]))
created
=
0
updated
=
0
for
org
in
data
[
'organismes'
]:
c
,
u
=
self
.
import_groupe
(
org
[
'organisme'
])
if
c
:
created
+=
1
elif
u
:
updated
+=
1
db
.
session
.
commit
()
db
.
session
.
flush
()
self
.
info
(
'Import groupes terminé: %s créés, %s mis à jour'
%
(
created
,
updated
))
def
run
(
self
):
self
.
info
(
'Début import NosDéputés.fr'
)
self
.
import_groupes
()
self
.
import_deputes
()
\ No newline at end of file
irfm/models/__init__.py
View file @
2c097a31
# -*- coding: utf-8 -*-
from
.database
import
db
from
.parlementaire
import
Parlementaire
from
.parlementaire
import
Groupe
,
Parlementaire
irfm/models/parlementaire.py
View file @
2c097a31
...
...
@@ -6,6 +6,16 @@ from .constants import CHAMBRES, ETAPES, SEXES
from
.database
import
db
class
Groupe
(
db
.
Model
):
__tablename__
=
'groupes'
id
=
db
.
Column
(
db
.
Integer
,
primary_key
=
True
)
sigle
=
db
.
Column
(
db
.
Unicode
)
nom
=
db
.
Column
(
db
.
Unicode
)
chambre
=
db
.
Column
(
db
.
Enum
(
*
CHAMBRES
.
keys
(),
name
=
'chambres'
))
couleur
=
db
.
Column
(
db
.
Unicode
)
class
Parlementaire
(
db
.
Model
):
__tablename__
=
'parlementaires'
...
...
@@ -24,8 +34,9 @@ class Parlementaire(db.Model):
num_deptmt
=
db
.
Column
(
db
.
Unicode
)
nom_circo
=
db
.
Column
(
db
.
Unicode
)
num_circo
=
db
.
Column
(
db
.
Integer
)
groupe
=
db
.
Column
(
db
.
Unicode
)
groupe_sigle
=
db
.
Column
(
db
.
Unicode
)
groupe_id
=
db
.
Column
(
db
.
Integer
,
db
.
ForeignKey
(
'groupes.id'
))
groupe
=
db
.
relationship
(
'Groupe'
)
url_photo
=
db
.
Column
(
db
.
Unicode
)
url_rc
=
db
.
Column
(
db
.
Unicode
)
...
...
irfm/routes.py
View file @
2c097a31
# -*- coding: utf-8 -*-
from
flask
import
render_template
from
sqlalchemy.orm
import
joinedload
from
.models
import
Parlementaire
...
...
@@ -37,7 +38,8 @@ def setup_routes(app):
@
app
.
route
(
'/parlementaires'
,
endpoint
=
'parlementaires'
)
def
parlementaires
():
qs
=
Parlementaire
.
query
.
options
(
joinedload
(
'groupe'
)).
all
()
return
render_template
(
'list.html.j2'
,
parlementaires
=
Parlementaire
.
query
.
all
()
parlementaires
=
qs
)
irfm/templates/_base.html.j2
View file @
2c097a31
...
...
@@ -12,8 +12,8 @@
{% endblock %}
</head>
<body>
<
section
class=
"container-fluid
"
>
<
header
class=
"col-md-12 page-header
"
>
<
header
class=
"jumbotron
"
>
<
div
class=
"container-fluid
"
>
<h1>
Transparence IRFM
</h1>
...
...
@@ -23,8 +23,10 @@
<li
role=
"presentation"
{%
if
request.endpoint =
=
item
.
endpoint
%}
class=
"active"
{%
endif
%}
><a
href=
"{{ item.url }}"
>
{{ item.label }}
</a></li>
{% endfor %}
</ul>
</header>
</div>
</header>
<section
class=
"container-fluid"
>
<div
class=
"col-md-12"
>
{% block content %}
{% endblock %}
...
...
irfm/templates/list.html.j2
View file @
2c097a31
...
...
@@ -28,10 +28,10 @@
<tr>
<td>
<img class="chamber-icon" src="{{ url_for('static', filename=parl.chambre|lower+'.png') }}">
<span class="search-vector">{{ parl.nom }} {{ parl.prenom }} {{ parl.nom_circo }} {{ parl.num_deptmt }} {{ parl.groupe
_sigle }} {{ parl.groupe
}}</span>
<span class="search-vector">{{ parl.nom }} {{ parl.prenom }} {{ parl.nom_circo }} {{ parl.num_deptmt }} {{ parl.groupe
.sigle }} {{ parl.groupe.nom
}}</span>
</td>
<td data-value="{{ parl.nom }} {{ parl.prenom }}">{{ parl.prenom }} {{ parl.nom }}</td>
<td>
{{ parl.groupe_sigle }}
</td>
<td>
<span title="{{ parl.groupe.nom }}" class="label" style="background-color: {{ parl.groupe.couleur }};">{{ parl.groupe.sigle }}</span>
</td>
<td data-value="{{ parl.num_deptmt }} {{ parl.num_circo }}">{{ parl.nom_circo }} n°{{ parl.num_circo }}</td>
<td>{{ parl.etape }}</td>
</tr>
...
...
migrations/versions/9784b9baaf7d_suppression_groupe.py
0 → 100644
View file @
2c097a31
"""Suppression groupe
Revision ID: 9784b9baaf7d
Revises: 8d32ba048444
Create Date: 2017-05-06 00:06:25.565160
"""
from
alembic
import
op
import
sqlalchemy
as
sa
# revision identifiers, used by Alembic.
revision
=
'9784b9baaf7d'
down_revision
=
'8d32ba048444'
branch_labels
=
None
depends_on
=
None
def
upgrade
():
# ### commands auto generated by Alembic - please adjust! ###
op
.
drop_column
(
'parlementaires'
,
'groupe'
)
op
.
drop_column
(
'parlementaires'
,
'groupe_sigle'
)
# ### end Alembic commands ###
def
downgrade
():
# ### commands auto generated by Alembic - please adjust! ###
op
.
add_column
(
'parlementaires'
,
sa
.
Column
(
'groupe_sigle'
,
sa
.
VARCHAR
(),
autoincrement
=
False
,
nullable
=
True
))
op
.
add_column
(
'parlementaires'
,
sa
.
Column
(
'groupe'
,
sa
.
VARCHAR
(),
autoincrement
=
False
,
nullable
=
True
))
# ### end Alembic commands ###
migrations/versions/beb25e23d267_ajout_entite_groupe_relation_parl.py
0 → 100644
View file @
2c097a31
"""Ajout entité groupe + relation parl
Revision ID: beb25e23d267
Revises: 9784b9baaf7d
Create Date: 2017-05-06 00:07:59.939030
"""
from
alembic
import
op
import
sqlalchemy
as
sa
from
sqlalchemy.dialects.postgresql
import
ENUM
# revision identifiers, used by Alembic.
revision
=
'beb25e23d267'
down_revision
=
'9784b9baaf7d'
branch_labels
=
None
depends_on
=
None
def
upgrade
():
# ### commands auto generated by Alembic - please adjust! ###
op
.
create_table
(
'groupes'
,
sa
.
Column
(
'id'
,
sa
.
Integer
(),
nullable
=
False
),
sa
.
Column
(
'sigle'
,
sa
.
Unicode
(),
nullable
=
True
),
sa
.
Column
(
'nom'
,
sa
.
Unicode
(),
nullable
=
True
),
sa
.
Column
(
'chambre'
,
ENUM
(
'SEN'
,
'AN'
,
name
=
'chambres'
,
create_type
=
False
),
nullable
=
True
),
sa
.
Column
(
'couleur'
,
sa
.
Unicode
(),
nullable
=
True
),
sa
.
PrimaryKeyConstraint
(
'id'
)
)
op
.
add_column
(
'parlementaires'
,
sa
.
Column
(
'groupe_id'
,
sa
.
Integer
(),
nullable
=
True
))
op
.
create_foreign_key
(
None
,
'parlementaires'
,
'groupes'
,
[
'groupe_id'
],
[
'id'
])
# ### end Alembic commands ###
def
downgrade
():
# ### commands auto generated by Alembic - please adjust! ###
op
.
drop_constraint
(
None
,
'parlementaires'
,
type_
=
'foreignkey'
)
op
.
drop_column
(
'parlementaires'
,
'groupe_id'
)
op
.
drop_table
(
'groupes'
)
# ### end Alembic commands ###
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment