Skip to content

Commit

Permalink
refactor(openstreetmap): Drop use of XML endpoint
Browse files Browse the repository at this point in the history
  • Loading branch information
pennersr committed Nov 7, 2024
1 parent 57ec9ce commit 6ff9435
Show file tree
Hide file tree
Showing 3 changed files with 57 additions and 30 deletions.
10 changes: 8 additions & 2 deletions allauth/socialaccount/providers/openstreetmap/provider.py
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,13 @@ def get_profile_url(self):
)

def get_avatar_url(self):
return self.account.extra_data.get("avatar")
ret = None
if img := self.account.extra_data.get("img"):
ret = img.get("href")
if not ret:
# Backwards compatible (OSM provider data originating from XML)
ret = self.account.extra_data.get("avatar")
return ret

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

def extract_uid(self, data):
return data["id"]
return str(data["id"])

def extract_common_fields(self, data):
return dict(username=data["display_name"])
Expand Down
62 changes: 47 additions & 15 deletions allauth/socialaccount/providers/openstreetmap/tests.py
Original file line number Diff line number Diff line change
Expand Up @@ -12,21 +12,53 @@ def get_mocked_response(self):
return [
MockedResponse(
200,
r"""<?xml version="1.0" encoding="UTF-8"?>
<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/">
<user id="1" display_name="Steve" account_created="2005-09-13T15:32:57Z">
<description></description>
<contributor-terms agreed="true"/>
<img href="https://secure.gravatar.com/avatar.jpg"/>
<roles>
</roles>
<changesets count="899"/>
<traces count="21"/>
<blocks>
<received count="0" active="0"/>
</blocks>
</user>
</osm>
r"""
{
"version": "0.6",
"generator": "OpenStreetMap server",
"copyright": "OpenStreetMap and contributors",
"attribution": "http://www.openstreetmap.org/copyright",
"license": "http://opendatacommons.org/licenses/odbl/1-0/",
"user": {
"id": 1,
"display_name": "Steve",
"account_created": "2024-11-06T20:11:01Z",
"description": "",
"contributor_terms": {
"agreed": true,
"pd": true
},
"img": {
"href": "https://secure.gravatar.com/avatar.jpg"
},
"roles": [],
"changesets": {
"count": 0
},
"traces": {
"count": 0
},
"blocks": {
"received": {
"count": 0,
"active": 0
}
},
"languages": [
"en-US",
"en"
],
"messages": {
"received": {
"count": 0,
"unread": 0
},
"sent": {
"count": 0
}
}
}
}
""",
)
] # noqa
Expand Down
15 changes: 2 additions & 13 deletions allauth/socialaccount/providers/openstreetmap/views.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,3 @@
from xml.etree import ElementTree
from xml.parsers.expat import ExpatError

from allauth.socialaccount.providers.oauth.client import OAuth
from allauth.socialaccount.providers.oauth.views import (
OAuthAdapter,
Expand All @@ -13,16 +10,8 @@ class OpenStreetMapAPI(OAuth):
url = "https://api.openstreetmap.org/api/0.6/user/details.json"

def get_user_info(self):
raw_xml = self.query(self.url).text
try:
user_element = ElementTree.fromstring(raw_xml).find("user")
user_info = user_element.attrib
user_avatar = user_element.find("img")
if user_avatar is not None:
user_info.update({"avatar": user_avatar.attrib.get("href")})
return user_info
except (ExpatError, KeyError, IndexError):
return None
data = self.query(self.url).json()
return data["user"]


class OpenStreetMapOAuthAdapter(OAuthAdapter):
Expand Down

0 comments on commit 6ff9435

Please sign in to comment.