Skip to content

Commit 6ff9435

Browse files
committed
refactor(openstreetmap): Drop use of XML endpoint
1 parent 57ec9ce commit 6ff9435

File tree

3 files changed

+57
-30
lines changed

3 files changed

+57
-30
lines changed

allauth/socialaccount/providers/openstreetmap/provider.py

+8-2
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,13 @@ def get_profile_url(self):
1313
)
1414

1515
def get_avatar_url(self):
16-
return self.account.extra_data.get("avatar")
16+
ret = None
17+
if img := self.account.extra_data.get("img"):
18+
ret = img.get("href")
19+
if not ret:
20+
# Backwards compatible (OSM provider data originating from XML)
21+
ret = self.account.extra_data.get("avatar")
22+
return ret
1723

1824
def get_username(self):
1925
return self.account.extra_data["display_name"]
@@ -26,7 +32,7 @@ class OpenStreetMapProvider(OAuthProvider):
2632
oauth_adapter_class = OpenStreetMapOAuthAdapter
2733

2834
def extract_uid(self, data):
29-
return data["id"]
35+
return str(data["id"])
3036

3137
def extract_common_fields(self, data):
3238
return dict(username=data["display_name"])

allauth/socialaccount/providers/openstreetmap/tests.py

+47-15
Original file line numberDiff line numberDiff line change
@@ -12,21 +12,53 @@ def get_mocked_response(self):
1212
return [
1313
MockedResponse(
1414
200,
15-
r"""<?xml version="1.0" encoding="UTF-8"?>
16-
<osm version="0.6" generator="OpenStreetMap server" copyright="OpenStreetMap and contributors" attribution="http://www.openstreetmap.org/copyright" license="http://opendatacommons.org/licenses/odbl/1-0/">
17-
<user id="1" display_name="Steve" account_created="2005-09-13T15:32:57Z">
18-
<description></description>
19-
<contributor-terms agreed="true"/>
20-
<img href="https://secure.gravatar.com/avatar.jpg"/>
21-
<roles>
22-
</roles>
23-
<changesets count="899"/>
24-
<traces count="21"/>
25-
<blocks>
26-
<received count="0" active="0"/>
27-
</blocks>
28-
</user>
29-
</osm>
15+
r"""
16+
{
17+
"version": "0.6",
18+
"generator": "OpenStreetMap server",
19+
"copyright": "OpenStreetMap and contributors",
20+
"attribution": "http://www.openstreetmap.org/copyright",
21+
"license": "http://opendatacommons.org/licenses/odbl/1-0/",
22+
"user": {
23+
"id": 1,
24+
"display_name": "Steve",
25+
"account_created": "2024-11-06T20:11:01Z",
26+
"description": "",
27+
"contributor_terms": {
28+
"agreed": true,
29+
"pd": true
30+
},
31+
"img": {
32+
"href": "https://secure.gravatar.com/avatar.jpg"
33+
},
34+
"roles": [],
35+
"changesets": {
36+
"count": 0
37+
},
38+
"traces": {
39+
"count": 0
40+
},
41+
"blocks": {
42+
"received": {
43+
"count": 0,
44+
"active": 0
45+
}
46+
},
47+
"languages": [
48+
"en-US",
49+
"en"
50+
],
51+
"messages": {
52+
"received": {
53+
"count": 0,
54+
"unread": 0
55+
},
56+
"sent": {
57+
"count": 0
58+
}
59+
}
60+
}
61+
}
3062
""",
3163
)
3264
] # noqa

allauth/socialaccount/providers/openstreetmap/views.py

+2-13
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,3 @@
1-
from xml.etree import ElementTree
2-
from xml.parsers.expat import ExpatError
3-
41
from allauth.socialaccount.providers.oauth.client import OAuth
52
from allauth.socialaccount.providers.oauth.views import (
63
OAuthAdapter,
@@ -13,16 +10,8 @@ class OpenStreetMapAPI(OAuth):
1310
url = "https://api.openstreetmap.org/api/0.6/user/details.json"
1411

1512
def get_user_info(self):
16-
raw_xml = self.query(self.url).text
17-
try:
18-
user_element = ElementTree.fromstring(raw_xml).find("user")
19-
user_info = user_element.attrib
20-
user_avatar = user_element.find("img")
21-
if user_avatar is not None:
22-
user_info.update({"avatar": user_avatar.attrib.get("href")})
23-
return user_info
24-
except (ExpatError, KeyError, IndexError):
25-
return None
13+
data = self.query(self.url).json()
14+
return data["user"]
2615

2716

2817
class OpenStreetMapOAuthAdapter(OAuthAdapter):

0 commit comments

Comments
 (0)