Skip to content
This repository was archived by the owner on Mar 7, 2025. It is now read-only.

Commit f829f9e

Browse files
author
Pierre GIRAUD
committed
urllib quote_plus needs encoding strings not unicode
1 parent f222d15 commit f829f9e

File tree

4 files changed

+46
-5
lines changed

4 files changed

+46
-5
lines changed

osmtm/templates/task.mako

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -99,14 +99,14 @@ querymiddle = ''
9999
userlist = []
100100
for step in history:
101101
if hasattr(step, 'user') and step.user is not None and step.user.username not in userlist:
102-
stepquery = '<query type="node"><user name="%(name)s"/><bbox-query %(bbox)s/></query><query type="way"><user name="%(name)s"/><bbox-query %(bbox)s/></query><query type="relation"><user name="%(name)s"/><bbox-query %(bbox)s/></query>' % {
102+
stepquery = u'<query type="node"><user name="%(name)s"/><bbox-query %(bbox)s/></query><query type="way"><user name="%(name)s"/><bbox-query %(bbox)s/></query><query type="relation"><user name="%(name)s"/><bbox-query %(bbox)s/></query>' % {
103103
'name': step.user.username,
104104
'bbox': 'w="%f" s="%f" e="%f" n="%f"' % bounds
105105
}
106106
querymiddle = querymiddle + stepquery
107107
userlist.append(step.user.username)
108108
query = queryprefix + querymiddle + querysuffix
109-
query = urllib.quote_plus(query)
109+
query = urllib.quote_plus(query.encode('utf8'))
110110
%>
111111
<small>
112112
<a href="http://overpass-turbo.eu/map.html?Q=${query}" rel="tooltip" data-original-title="${_('See the changes in this area using the overpass-turbo API.')}"><span class="glyphicon glyphicon-share-alt"></span> overpass-turbo</a>

osmtm/templates/user.mako

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -96,11 +96,11 @@ else:
9696
<%
9797
import urllib
9898
bbox = project.to_bbox()
99-
query = '<osm-script output="json" timeout="25"><union><query type="node"><user name="%(name)s"/><bbox-query %(bbox)s/></query><query type="way"><user name="%(name)s"/><bbox-query %(bbox)s/></query><query type="relation"><user name="%(name)s"/><bbox-query %(bbox)s/></query></union><print mode="body"/><recurse type="down"/><print mode="skeleton" order="quadtile"/></osm-script>' % {
99+
query = u'<osm-script output="json" timeout="25"><union><query type="node"><user name="%(name)s"/><bbox-query %(bbox)s/></query><query type="way"><user name="%(name)s"/><bbox-query %(bbox)s/></query><query type="relation"><user name="%(name)s"/><bbox-query %(bbox)s/></query></union><print mode="body"/><recurse type="down"/><print mode="skeleton" order="quadtile"/></osm-script>' % {
100100
'name': contributor.username,
101101
'bbox': 'w="%f" s="%f" e="%f" n="%f"' % bbox
102102
}
103-
query = urllib.quote_plus(query)
103+
query = urllib.quote_plus(query.encode('utf8'))
104104
%>
105105
<small>
106106
<a href="http://overpass-turbo.eu/map.html?Q=${query}" ><span class="glyphicon glyphicon-share-alt"></span> overpass-turbo</a>

osmtm/tests/__init__.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -116,6 +116,9 @@ def login_as_user1(self):
116116
def login_as_user2(self):
117117
return self.__remember(self.user2_id)
118118

119+
def login_as_user(self, user_id):
120+
return self.__remember(user_id)
121+
119122
def __remember(self, userid):
120123
from pyramid.security import remember
121124
from pyramid import testing

osmtm/tests/test_user.py

Lines changed: 39 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
# -*- coding: utf-8 -*-
12
from . import BaseTestCase
23
import httpretty
34

@@ -15,7 +16,7 @@ def test_users__logged_in(self):
1516

1617
def test_users_json(self):
1718
res = self.testapp.get('/users.json', status=200)
18-
self.assertEqual(len(res.json), 4)
19+
self.assertEqual(len(res.json), 5)
1920

2021
def test_users_json__query(self):
2122
res = self.testapp.get('/users.json',
@@ -161,3 +162,40 @@ def test_user__OSM_API_failure(self):
161162
status=500)
162163

163164
self.testapp.get('/user/%s' % username, status=200)
165+
166+
def test_user__username_with_accents(self):
167+
httpretty.enable()
168+
169+
from osmtm.models import User, DBSession
170+
import transaction
171+
172+
userid = 12
173+
username = u'new_user_éà'
174+
user = User(userid, username)
175+
DBSession.add(user)
176+
DBSession.flush()
177+
transaction.commit()
178+
179+
httpretty.register_uri(
180+
httpretty.GET,
181+
"http://www.openstreetmap.org/api/0.6/user/%s" % userid,
182+
body='<?xml version="1.0" encoding="UTF-8"?>' +
183+
'<osm> <user display_name="%s"></user></osm>' % username,
184+
content_type='application/xml; charset=utf-8')
185+
186+
headers = self.login_as_user(userid)
187+
self.testapp.get('/project/1/task/4/lock', status=200,
188+
headers=headers,
189+
xhr=True)
190+
self.testapp.get('/project/1/task/4/done', status=200,
191+
headers=headers,
192+
params={
193+
'comment': 'some_comment'
194+
},
195+
xhr=True)
196+
197+
self.testapp.get((u'/user/%s' % username).encode('utf8'), status=200)
198+
199+
self.testapp.get('/project/1/task/4', status=200,
200+
headers=headers,
201+
xhr=True)

0 commit comments

Comments
 (0)