1- from xml .etree import ElementTree
2-
31import requests
42from requests .adapters import HTTPAdapter
53from requests .packages .urllib3 .util .retry import Retry
64
75from mapswipe_workers .definitions import (
86 OHSOME_API_LINK ,
9- OSM_API_LINK ,
7+ OSMCHA_API_KEY ,
8+ OSMCHA_API_LINK ,
109 CustomError ,
1110 logger ,
1211)
@@ -27,7 +26,8 @@ def retry_get(url, retries=3, timeout=4):
2726 retry = Retry (total = retries )
2827 with requests .Session () as session :
2928 session .mount ("https://" , HTTPAdapter (max_retries = retry ))
30- return session .get (url , timeout = timeout )
29+ headers = {"Authorization" : OSMCHA_API_KEY }
30+ return session .get (url , timeout = timeout , headers = headers )
3131
3232
3333def geojsonToFeatureCollection (geojson : dict ) -> dict :
@@ -49,36 +49,30 @@ def chunks(arr, n_objects):
4949 ]
5050
5151
52- def query_osm (changeset_ids : list , changeset_results ):
52+ def query_osmcha (changeset_ids : list , changeset_results ):
5353 """Get data from changesetId."""
5454 id_string = "," .join (map (str , changeset_ids ))
5555
56- url = OSM_API_LINK + f"changesets?changesets={ id_string } "
56+ url = OSMCHA_API_LINK + f"changesets/?ids={ id_string } "
57+ logger .info (url )
58+ logger .info (len (changeset_ids ))
5759 response = retry_get (url )
5860 if response .status_code != 200 :
59- err = f"osm request failed: { response .status_code } "
61+ err = f"osmcha request failed: { response .status_code } "
6062 logger .warning (f"{ err } " )
6163 logger .warning (response .json ())
6264 raise CustomError (err )
63- tree = ElementTree .fromstring (response .content )
64-
65- for changeset in tree .iter ("changeset" ):
66- id = changeset .attrib ["id" ]
67- username = remove_troublesome_chars (changeset .attrib ["user" ])
68- userid = changeset .attrib ["uid" ]
69- comment = created_by = None
70- for tag in changeset .iter ("tag" ):
71- if tag .attrib ["k" ] == "comment" :
72- comment = tag .attrib ["v" ]
73- if tag .attrib ["k" ] == "created_by" :
74- created_by = tag .attrib ["v" ]
75-
76- changeset_results [int (id )] = {
77- "username" : remove_troublesome_chars (username ),
78- "userid" : userid ,
79- "comment" : remove_troublesome_chars (comment ),
80- "created_by" : remove_troublesome_chars (created_by ),
65+ response = response .json ()
66+ logger .info (response )
67+ for feature in response ["features" ]:
68+ logger .info (feature )
69+ changeset_results [int (feature ["id" ])] = {
70+ "username" : remove_troublesome_chars (feature ["properties" ]["user" ]),
71+ "userid" : feature ["properties" ]["uid" ],
72+ "comment" : remove_troublesome_chars (feature ["properties" ]["comment" ]),
73+ "editor" : remove_troublesome_chars (feature ["properties" ]["editor" ]),
8174 }
75+
8276 return changeset_results
8377
8478
@@ -111,15 +105,16 @@ def remove_noise_and_add_user_info(json: dict) -> dict:
111105 logger .info (
112106 f"""{ len_osm } changesets will be queried in roughly { batches } batches"""
113107 )
114- chunk_list = chunks (list (changeset_results .keys ()), 100 )
108+ chunk_list = chunks (list (changeset_results .keys ()), 50 )
115109 for i , subset in enumerate (chunk_list ):
116- changeset_results = query_osm (subset , changeset_results )
110+ changeset_results = query_osmcha (subset , changeset_results )
117111 progress = round (100 * ((i + 1 ) / len (chunk_list )), 1 )
118112 logger .info (f"finished query { i + 1 } /{ len (chunk_list )} , { progress } " )
119113
120114 for feature in json ["features" ]:
121- changeset = changeset_results [feature ["properties" ]["changesetId" ]]
122- for attribute_name in ["username" , "comment" , "created_by" , "userid" ]:
115+ changeset = changeset_results [int (feature ["properties" ]["changesetId" ])]
116+ logger .warn (changeset )
117+ for attribute_name in ["username" , "comment" , "editor" , "userid" ]:
123118 feature ["properties" ][attribute_name ] = changeset [attribute_name ]
124119
125120 logger .info ("finished filtering and adding extra info" )
0 commit comments