Merge ~cjwatson/launchpad:py3-remove-ensure-unicode into launchpad:master

Proposed by Colin Watson
Status: Merged
Approved by: Colin Watson
Approved revision: 1f39584a161307acd13145234dd3244e8ba8fdd4
Merge reported by: Otto Co-Pilot
Merged at revision: not available
Proposed branch: ~cjwatson/launchpad:py3-remove-ensure-unicode
Merge into: launchpad:master
Diff against target: 262 lines (+16/-68)
8 files modified
lib/lp/registry/model/sourcepackagename.py (+1/-2)
lib/lp/registry/vocabularies.py (+5/-8)
lib/lp/services/helpers.py (+0/-45)
lib/lp/services/webapp/vocabulary.py (+2/-3)
lib/lp/services/worlddata/model/language.py (+1/-2)
lib/lp/soyuz/model/binarypackagename.py (+3/-4)
lib/lp/soyuz/model/packageset.py (+1/-2)
lib/lp/soyuz/scripts/initialize_distroseries.py (+3/-2)
Reviewer Review Type Date Requested Status
Cristian Gonzalez (community) Approve
Review via email: mp+399093@code.launchpad.net

Commit message

Remove deprecated ensure_unicode function

Description of the change

This is equivalent to `six.ensure_text` (strictly with `encoding='ASCII'`, although that doesn't seem necessary in search methods) if the input string is not None. It may be that we could get away without some of these `six.ensure_text` calls, but let's just keep it simple for now; we can drop them more easily once we're on Python 3 everywhere.

To post a comment you must log in.
Revision history for this message
Cristian Gonzalez (cristiangsp) wrote :

Looks good!

review: Approve

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1diff --git a/lib/lp/registry/model/sourcepackagename.py b/lib/lp/registry/model/sourcepackagename.py
2index 9d3615f..49e6335 100644
3--- a/lib/lp/registry/model/sourcepackagename.py
4+++ b/lib/lp/registry/model/sourcepackagename.py
5@@ -31,7 +31,6 @@ from lp.services.database.sqlbase import (
6 SQLBase,
7 sqlvalues,
8 )
9-from lp.services.helpers import ensure_unicode
10
11
12 @six.python_2_unicode_compatible
13@@ -66,7 +65,7 @@ class SourcePackageNameSet:
14
15 def __getitem__(self, name):
16 """See `ISourcePackageNameSet`."""
17- name = ensure_unicode(name)
18+ name = six.ensure_text(name, 'ASCII')
19 try:
20 return SourcePackageName.byName(name)
21 except SQLObjectNotFound:
22diff --git a/lib/lp/registry/vocabularies.py b/lib/lp/registry/vocabularies.py
23index 59242f0..952899d 100644
24--- a/lib/lp/registry/vocabularies.py
25+++ b/lib/lp/registry/vocabularies.py
26@@ -185,10 +185,7 @@ from lp.services.database.stormexpr import (
27 fti_search,
28 RegexpMatch,
29 )
30-from lp.services.helpers import (
31- ensure_unicode,
32- shortlist,
33- )
34+from lp.services.helpers import shortlist
35 from lp.services.identity.interfaces.account import AccountStatus
36 from lp.services.identity.interfaces.emailaddress import (
37 EmailAddressStatus,
38@@ -1191,7 +1188,7 @@ class ProductReleaseVocabulary(SQLObjectVocabularyBase):
39 if not query:
40 return self.emptySelectResults()
41
42- query = ensure_unicode(query).lower()
43+ query = six.ensure_text(query).lower()
44 objs = self._table.select(
45 AND(
46 Milestone.q.id == ProductRelease.q.milestoneID,
47@@ -1248,7 +1245,7 @@ class ProductSeriesVocabulary(SQLObjectVocabularyBase):
48 return self.emptySelectResults()
49 user = getUtility(ILaunchBag).user
50 privacy_filter = ProductSet.getProductPrivacyFilter(user)
51- query = ensure_unicode(query).lower().strip('/')
52+ query = six.ensure_text(query).lower().strip('/')
53 # If there is a slash splitting the product and productseries
54 # names, they must both match. If there is no slash, we don't
55 # know whether it is matching the product or the productseries
56@@ -1582,7 +1579,7 @@ class DistroSeriesVocabulary(NamedSQLObjectVocabulary):
57 if not query:
58 return self.emptySelectResults()
59
60- query = ensure_unicode(query).lower()
61+ query = six.ensure_text(query).lower()
62 objs = self._table.select(
63 AND(
64 Distribution.q.id == DistroSeries.q.distributionID,
65@@ -1991,7 +1988,7 @@ class SourcePackageNameVocabulary(NamedStormHugeVocabulary):
66 if not query:
67 return self.emptySelectResults()
68
69- query = ensure_unicode(query).lower()
70+ query = six.ensure_text(query).lower()
71 results = IStore(self._table).find(
72 self._table,
73 Or(
74diff --git a/lib/lp/services/helpers.py b/lib/lp/services/helpers.py
75index f676e61..66070c1 100644
76--- a/lib/lp/services/helpers.py
77+++ b/lib/lp/services/helpers.py
78@@ -322,48 +322,3 @@ def english_list(items, conjunction='and'):
79 else:
80 items[-1] = '%s %s' % (conjunction, items[-1])
81 return ', '.join(items)
82-
83-
84-def ensure_unicode(string):
85- r"""Return input as unicode. None is passed through unharmed.
86-
87- Do not use this method. This method exists only to help migration
88- of legacy code where str objects were being passed into contexts
89- where unicode objects are required. All invokations of
90- ensure_unicode() should eventually be removed.
91-
92- This differs from the builtin unicode() function, as a TypeError
93- exception will be raised if the parameter is not a string type or if
94- a raw string is not ASCII.
95-
96- >>> ensure_unicode(u'hello')
97- u'hello'
98-
99- >>> ensure_unicode('hello')
100- u'hello'
101-
102- >>> ensure_unicode(u'A'.encode('utf-16')) # Not ASCII
103- Traceback (most recent call last):
104- ...
105- TypeError: '\xff\xfeA\x00' is not US-ASCII
106-
107- >>> ensure_unicode(42)
108- Traceback (most recent call last):
109- ...
110- TypeError: 42 is not a string type (<type 'int'>)
111-
112- >>> ensure_unicode(None) is None
113- True
114- """
115- if string is None:
116- return None
117- elif isinstance(string, six.text_type):
118- return string
119- elif isinstance(string, bytes):
120- try:
121- return string.decode('US-ASCII')
122- except UnicodeDecodeError:
123- raise TypeError("%s is not US-ASCII" % repr(string))
124- else:
125- raise TypeError(
126- "%r is not a string type (%r)" % (string, type(string)))
127diff --git a/lib/lp/services/webapp/vocabulary.py b/lib/lp/services/webapp/vocabulary.py
128index b77961f..a75c7c5 100644
129--- a/lib/lp/services/webapp/vocabulary.py
130+++ b/lib/lp/services/webapp/vocabulary.py
131@@ -50,7 +50,6 @@ from zope.security.proxy import isinstance as zisinstance
132
133 from lp.services.database.interfaces import IStore
134 from lp.services.database.sqlbase import SQLBase
135-from lp.services.helpers import ensure_unicode
136
137
138 class ForgivingSimpleVocabulary(SimpleVocabulary):
139@@ -428,7 +427,7 @@ class NamedSQLObjectVocabulary(SQLObjectVocabularyBase):
140 def search(self, query, vocab_filter=None):
141 """Return terms where query is a subtring of the name."""
142 if query:
143- clause = CONTAINSSTRING(self._table.q.name, ensure_unicode(query))
144+ clause = CONTAINSSTRING(self._table.q.name, six.ensure_text(query))
145 if self._filter:
146 clause = AND(clause, self._filter)
147 return self._table.select(clause, orderBy=self._orderBy)
148@@ -569,7 +568,7 @@ class NamedStormVocabulary(StormVocabularyBase):
149 if not query:
150 return self.emptySelectResults()
151
152- query = ensure_unicode(query).lower()
153+ query = six.ensure_text(query).lower()
154 results = IStore(self._table).find(
155 self._table,
156 self._table.name.contains_string(query),
157diff --git a/lib/lp/services/worlddata/model/language.py b/lib/lp/services/worlddata/model/language.py
158index 258fd1f..8edad4f 100644
159--- a/lib/lp/services/worlddata/model/language.py
160+++ b/lib/lp/services/worlddata/model/language.py
161@@ -40,7 +40,6 @@ from lp.services.database.interfaces import (
162 IStore,
163 )
164 from lp.services.database.sqlbase import SQLBase
165-from lp.services.helpers import ensure_unicode
166 from lp.services.propertycache import (
167 cachedproperty,
168 get_property_cache,
169@@ -295,7 +294,7 @@ class LanguageSet:
170 def search(self, text):
171 """See `ILanguageSet`."""
172 if text:
173- text = ensure_unicode(text).lower()
174+ text = six.ensure_text(text).lower()
175 results = ISlaveStore(Language).find(
176 Language, Or(
177 Language.code.lower().contains_string(text),
178diff --git a/lib/lp/soyuz/model/binarypackagename.py b/lib/lp/soyuz/model/binarypackagename.py
179index de0f71a..7367dee 100644
180--- a/lib/lp/soyuz/model/binarypackagename.py
181+++ b/lib/lp/soyuz/model/binarypackagename.py
182@@ -19,7 +19,6 @@ from zope.interface import implementer
183 from lp.app.errors import NotFoundError
184 from lp.services.database.interfaces import IStore
185 from lp.services.database.sqlbase import SQLBase
186-from lp.services.helpers import ensure_unicode
187 from lp.soyuz.interfaces.binarypackagename import (
188 IBinaryPackageName,
189 IBinaryPackageNameSet,
190@@ -57,10 +56,10 @@ class BinaryPackageNameSet:
191
192 def queryByName(self, name):
193 return IStore(BinaryPackageName).find(
194- BinaryPackageName, name=ensure_unicode(name)).one()
195+ BinaryPackageName, name=six.ensure_text(name, 'ASCII')).one()
196
197 def new(self, name):
198- return BinaryPackageName(name=ensure_unicode(name))
199+ return BinaryPackageName(name=six.ensure_text(name, 'ASCII'))
200
201 def ensure(self, name):
202 """Ensure that the given BinaryPackageName exists, creating it
203@@ -68,7 +67,7 @@ class BinaryPackageNameSet:
204
205 Returns the BinaryPackageName
206 """
207- name = ensure_unicode(name)
208+ name = six.ensure_text(name, 'ASCII')
209 try:
210 return self[name]
211 except NotFoundError:
212diff --git a/lib/lp/soyuz/model/packageset.py b/lib/lp/soyuz/model/packageset.py
213index 7bf5204..bb17ad8 100644
214--- a/lib/lp/soyuz/model/packageset.py
215+++ b/lib/lp/soyuz/model/packageset.py
216@@ -26,7 +26,6 @@ from lp.services.database.interfaces import (
217 IMasterStore,
218 IStore,
219 )
220-from lp.services.helpers import ensure_unicode
221 from lp.soyuz.interfaces.packageset import (
222 DuplicatePackagesetName,
223 IPackageset,
224@@ -302,7 +301,7 @@ class Packageset(Storm):
225 def addSources(self, names):
226 """See `IPackageset`."""
227 if isinstance(names, six.string_types):
228- names = [ensure_unicode(names)]
229+ names = [six.ensure_text(names, 'ASCII')]
230 clauses = (SourcePackageName, SourcePackageName.name.is_in(names))
231 self._api_add_or_remove(clauses, self._addSourcePackageNames)
232
233diff --git a/lib/lp/soyuz/scripts/initialize_distroseries.py b/lib/lp/soyuz/scripts/initialize_distroseries.py
234index 60c0bc8..2f64d2b 100644
235--- a/lib/lp/soyuz/scripts/initialize_distroseries.py
236+++ b/lib/lp/soyuz/scripts/initialize_distroseries.py
237@@ -12,6 +12,7 @@ __all__ = [
238 from collections import OrderedDict
239 from operator import methodcaller
240
241+import six
242 import transaction
243 from zope.component import getUtility
244
245@@ -24,7 +25,6 @@ from lp.registry.model.distroseries import DistroSeries
246 from lp.services.database import bulk
247 from lp.services.database.interfaces import IMasterStore
248 from lp.services.database.sqlbase import sqlvalues
249-from lp.services.helpers import ensure_unicode
250 from lp.services.scripts import log
251 from lp.soyuz.adapters.packagelocation import PackageLocation
252 from lp.soyuz.enums import (
253@@ -125,7 +125,8 @@ class InitializeDistroSeries:
254 self.packagesets = None
255 else:
256 self.packagesets_ids = [
257- ensure_unicode(packageset) for packageset in packagesets]
258+ six.ensure_text(packageset, 'ASCII')
259+ for packageset in packagesets]
260 self.packagesets = bulk.load(
261 Packageset, [int(packageset) for packageset in packagesets])
262 self.rebuild = rebuild

Subscribers

People subscribed via source and target branches

to status/vote changes: