3
3
import json
4
4
import yaml
5
5
6
- from local_settings import POPIT_USERNAME , POPIT_PASSWORD
6
+ from local_settings import POPIT_USERNAME , POPIT_PASSWORD , POPIT_APIKEY
7
7
8
8
instance = "http://yournextmep.popit.mysociety.org/api/v0.1/"
9
9
10
10
instance_meta = requests .get (instance ).json ()
11
11
12
12
people_api_url = instance_meta ['meta' ]['persons_api_url' ]
13
+ posts_api_url = instance_meta ['meta' ]['posts_api_url' ]
13
14
memberships_api_url = instance_meta ['meta' ]['memberships_api_url' ]
14
15
16
+ headers = {'content-type' : 'application/json' ,
17
+ 'Apikey' : POPIT_APIKEY }
18
+
15
19
def add_person (person ):
16
- print person
17
20
return requests .post (people_api_url ,
18
21
data = json .dumps (person ),
19
22
auth = (POPIT_USERNAME , POPIT_PASSWORD ),
20
- headers = { 'content-type' : 'application/json' } )
23
+ headers = headers )
21
24
22
25
def update_person (person ):
23
26
return requests .put (person ['url' ],
24
27
data = json .dumps (person ),
25
28
auth = (POPIT_USERNAME , POPIT_PASSWORD ),
26
- headers = { 'content-type' : 'application/json' } )
29
+ headers = headers )
27
30
31
+ def delete_person (person ):
32
+ return requests .delete (person ['url' ],
33
+ auth = (POPIT_USERNAME , POPIT_PASSWORD ),
34
+ headers = headers )
28
35
29
36
def add_membership (membership ):
30
37
return requests .post (memberships_api_url ,
31
38
data = json .dumps (membership ),
32
39
auth = (POPIT_USERNAME , POPIT_PASSWORD ),
33
- headers = { 'content-type' : 'application/json' } )
40
+ headers = headers )
34
41
35
42
def update_membership (membership ):
36
43
return requests .put (membership ['url' ],
37
44
data = json .dumps (membership ),
38
45
auth = (POPIT_USERNAME , POPIT_PASSWORD ),
39
- headers = { 'content-type' : 'application/json' } )
46
+ headers = headers )
40
47
41
48
def delete_membership (membership ):
42
49
return requests .delete (membership ['url' ],
43
50
auth = (POPIT_USERNAME , POPIT_PASSWORD ),
44
- headers = { 'content-type' : 'application/json' } )
51
+ headers = headers )
45
52
46
53
def popitize (person , party_id , party ):
47
54
person = dict (person )
48
55
49
56
person ['identifiers' ] = []
50
57
person ['identifiers' ].append ({'identifier' : party_id + "/" + person ['id' ],
51
- 'scheme' : 'yournextmep' })
58
+ 'scheme' : 'yournextmep-candidate' })
59
+
60
+ person ['contact_details' ] = []
61
+
62
+ if 'email' in person :
63
+ person ['contact_details' ].append ({'type' : 'email' ,
64
+ 'value' : person ['email' ],})
65
+ del person ['email' ]
66
+
67
+ if 'links' in person :
68
+ for link in person ['links' ]:
69
+ if 'twitter' in link ['url' ]:
70
+ twitter_id = link ['url' ].split ('/' )[- 1 ]
71
+
72
+ person ['contact_details' ].append ({'type' : 'twitter' ,
73
+ 'value' : twitter_id })
52
74
53
75
if 'image' in person :
54
- person ['image' ] = "http://yournextmep.com" + person ['image' ]
76
+ image = {'url' : "http://yournextmep.com" + person ['image' ]}
77
+
78
+ person ['images' ] = [image ]
55
79
56
80
del person ['id' ]
57
81
@@ -70,26 +94,23 @@ def find_org_id(org_id):
70
94
71
95
return None
72
96
73
- def find_person_id (person_id ):
97
+ def find_persons_id (person_id ):
74
98
url = instance + "search/persons?q=identifiers.identifier:\" {}\" " .format (person_id )
75
99
76
100
resp = requests .get (url ).json ()
77
101
78
- print url
79
-
80
102
if len (resp ['result' ]) > 1 :
81
- print "MULTIPLE HITS" , url
103
+ print "MULTIPLE PEOPLE HITS" , url
82
104
83
105
if resp ['result' ]:
84
- for org in resp ['result' ]:
85
- for ident in org ['identifiers' ]:
86
- if ident ['scheme' ] == "yournextmep" and ident ['identifier' ] == person_id :
87
- return org
106
+ for person in resp ['result' ]:
107
+ for ident in person ['identifiers' ]:
108
+ if ident ['scheme' ] == "yournextmep-candidate " and ident ['identifier' ] == person_id :
109
+ yield person
88
110
89
- return None
90
-
111
+ return
91
112
92
- def find_membership_id (person_id , org_id ):
113
+ def find_memberships_id (person_id , org_id ):
93
114
url = instance + "search/memberships?q=(person_id:\" {}\" ) AND (organization_id:\" {}\" )" .format (person_id , org_id )
94
115
95
116
resp = requests .get (url ).json ()
@@ -98,10 +119,17 @@ def find_membership_id(person_id, org_id):
98
119
print "MULTIPLE HITS" , url
99
120
100
121
if resp ['result' ]:
101
- return resp ['result' ][ 0 ]
122
+ return resp ['result' ]
102
123
103
124
return None
104
125
126
+ def find_post (region_name ):
127
+ url = instance + "search/posts?q=label:\" Member of the European Parliament for {}\" " .format (region_name )
128
+
129
+ resp = requests .get (url ).json ()
130
+
131
+ return resp ['result' ][0 ]
132
+
105
133
if __name__ == "__main__" :
106
134
party_id = sys .argv [1 ]
107
135
candidates = yaml .load (open ("_data/{}_candidates.yaml" .format (party_id )))
@@ -111,50 +139,58 @@ def find_membership_id(person_id, org_id):
111
139
party = find_org_id (party_id )
112
140
113
141
for region_id , region_candidates in candidates .items ():
142
+ popit_post = find_post (regions [region_id ]['name' ])
143
+
114
144
for candidate in region_candidates :
115
145
person_id = candidate ['id' ]
116
146
117
147
person = people [person_id ]
118
148
person = popitize (person , party_id , party )
119
149
120
- popit_person = find_person_id (party_id + "/" + person_id )
150
+ print person_id
151
+
152
+ popit_persons = list (find_persons_id (party_id + "/" + person_id ))
121
153
122
- if popit_person is None :
154
+ if not popit_persons :
123
155
print " Adding"
124
156
resp = add_person (person )
125
- print resp .status_code , resp .text
126
157
else :
127
- print " Already up" , popit_person ['url' ]
128
- #resp = update_person(popit_person)
129
-
130
-
131
- popit_person = find_person_id (party_id + "/" + person_id )
132
-
133
- popit_membership = find_membership_id (popit_person ['id' ], party_id )
158
+ for popit_person in popit_persons [1 :]:
159
+ print "Deleting duplicate person"
160
+ delete_person (popit_person )
134
161
135
- if popit_membership is not None :
136
- delete_membership (popit_membership )
162
+ popit_person = popit_persons [0 ]
163
+ print " Updating" , popit_person ['url' ]
164
+ popit_person .update (person )
165
+ resp = update_person (popit_person )
137
166
138
- popit_membership = find_membership_id (popit_person ['id' ], party ['id' ])
167
+ #popit_person = find_person_id(party_id + "/" + person_id)
168
+ popit_person = resp .json ()['result' ]
169
+
170
+ popit_memberships = find_memberships_id (popit_person ['id' ], party ['id' ])
139
171
140
- print popit_membership
172
+ if popit_memberships :
173
+ for popit_membership in popit_memberships [1 :]:
174
+ print "Deleting membership"
175
+ delete_membership (popit_membership )
141
176
142
177
membership = {
143
178
"label" : "European electoral candidate for {}" .format (regions [region_id ]['name' ]),
144
- "role" : "European electoral candidate" ,
179
+ "role" : "candidate" ,
180
+ "post_id" : popit_post ['id' ],
145
181
"person_id" : popit_person ['id' ],
146
182
"organization_id" : party ['id' ],
147
- "area" : {"name" : regions [region_id ]['name' ],
148
- "classification" : "EUR" ,
149
- "id" : "mapit.mysociety.org/area/{}" .format (regions [region_id ]['identifiers' ][0 ]['identifier' ])}
150
183
}
151
184
152
- if popit_membership is None :
185
+ if popit_memberships is None :
186
+ print "Adding membership"
153
187
resp = add_membership (membership )
154
188
else :
189
+ print "Updating membership"
190
+ popit_membership = popit_memberships [0 ]
155
191
membership ['id' ] = popit_membership ['id' ]
156
192
membership ['url' ] = popit_membership ['url' ]
157
193
resp = update_membership (membership )
158
194
159
- print resp .status_code , resp . text
195
+ print resp .status_code
160
196
0 commit comments