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
diff --git a/lib/lp/registry/model/sourcepackagename.py b/lib/lp/registry/model/sourcepackagename.py
index 9d3615f..49e6335 100644
--- a/lib/lp/registry/model/sourcepackagename.py
+++ b/lib/lp/registry/model/sourcepackagename.py
@@ -31,7 +31,6 @@ from lp.services.database.sqlbase import (
31 SQLBase,31 SQLBase,
32 sqlvalues,32 sqlvalues,
33 )33 )
34from lp.services.helpers import ensure_unicode
3534
3635
37@six.python_2_unicode_compatible36@six.python_2_unicode_compatible
@@ -66,7 +65,7 @@ class SourcePackageNameSet:
6665
67 def __getitem__(self, name):66 def __getitem__(self, name):
68 """See `ISourcePackageNameSet`."""67 """See `ISourcePackageNameSet`."""
69 name = ensure_unicode(name)68 name = six.ensure_text(name, 'ASCII')
70 try:69 try:
71 return SourcePackageName.byName(name)70 return SourcePackageName.byName(name)
72 except SQLObjectNotFound:71 except SQLObjectNotFound:
diff --git a/lib/lp/registry/vocabularies.py b/lib/lp/registry/vocabularies.py
index 59242f0..952899d 100644
--- a/lib/lp/registry/vocabularies.py
+++ b/lib/lp/registry/vocabularies.py
@@ -185,10 +185,7 @@ from lp.services.database.stormexpr import (
185 fti_search,185 fti_search,
186 RegexpMatch,186 RegexpMatch,
187 )187 )
188from lp.services.helpers import (188from lp.services.helpers import shortlist
189 ensure_unicode,
190 shortlist,
191 )
192from lp.services.identity.interfaces.account import AccountStatus189from lp.services.identity.interfaces.account import AccountStatus
193from lp.services.identity.interfaces.emailaddress import (190from lp.services.identity.interfaces.emailaddress import (
194 EmailAddressStatus,191 EmailAddressStatus,
@@ -1191,7 +1188,7 @@ class ProductReleaseVocabulary(SQLObjectVocabularyBase):
1191 if not query:1188 if not query:
1192 return self.emptySelectResults()1189 return self.emptySelectResults()
11931190
1194 query = ensure_unicode(query).lower()1191 query = six.ensure_text(query).lower()
1195 objs = self._table.select(1192 objs = self._table.select(
1196 AND(1193 AND(
1197 Milestone.q.id == ProductRelease.q.milestoneID,1194 Milestone.q.id == ProductRelease.q.milestoneID,
@@ -1248,7 +1245,7 @@ class ProductSeriesVocabulary(SQLObjectVocabularyBase):
1248 return self.emptySelectResults()1245 return self.emptySelectResults()
1249 user = getUtility(ILaunchBag).user1246 user = getUtility(ILaunchBag).user
1250 privacy_filter = ProductSet.getProductPrivacyFilter(user)1247 privacy_filter = ProductSet.getProductPrivacyFilter(user)
1251 query = ensure_unicode(query).lower().strip('/')1248 query = six.ensure_text(query).lower().strip('/')
1252 # If there is a slash splitting the product and productseries1249 # If there is a slash splitting the product and productseries
1253 # names, they must both match. If there is no slash, we don't1250 # names, they must both match. If there is no slash, we don't
1254 # know whether it is matching the product or the productseries1251 # know whether it is matching the product or the productseries
@@ -1582,7 +1579,7 @@ class DistroSeriesVocabulary(NamedSQLObjectVocabulary):
1582 if not query:1579 if not query:
1583 return self.emptySelectResults()1580 return self.emptySelectResults()
15841581
1585 query = ensure_unicode(query).lower()1582 query = six.ensure_text(query).lower()
1586 objs = self._table.select(1583 objs = self._table.select(
1587 AND(1584 AND(
1588 Distribution.q.id == DistroSeries.q.distributionID,1585 Distribution.q.id == DistroSeries.q.distributionID,
@@ -1991,7 +1988,7 @@ class SourcePackageNameVocabulary(NamedStormHugeVocabulary):
1991 if not query:1988 if not query:
1992 return self.emptySelectResults()1989 return self.emptySelectResults()
19931990
1994 query = ensure_unicode(query).lower()1991 query = six.ensure_text(query).lower()
1995 results = IStore(self._table).find(1992 results = IStore(self._table).find(
1996 self._table,1993 self._table,
1997 Or(1994 Or(
diff --git a/lib/lp/services/helpers.py b/lib/lp/services/helpers.py
index f676e61..66070c1 100644
--- a/lib/lp/services/helpers.py
+++ b/lib/lp/services/helpers.py
@@ -322,48 +322,3 @@ def english_list(items, conjunction='and'):
322 else:322 else:
323 items[-1] = '%s %s' % (conjunction, items[-1])323 items[-1] = '%s %s' % (conjunction, items[-1])
324 return ', '.join(items)324 return ', '.join(items)
325
326
327def ensure_unicode(string):
328 r"""Return input as unicode. None is passed through unharmed.
329
330 Do not use this method. This method exists only to help migration
331 of legacy code where str objects were being passed into contexts
332 where unicode objects are required. All invokations of
333 ensure_unicode() should eventually be removed.
334
335 This differs from the builtin unicode() function, as a TypeError
336 exception will be raised if the parameter is not a string type or if
337 a raw string is not ASCII.
338
339 >>> ensure_unicode(u'hello')
340 u'hello'
341
342 >>> ensure_unicode('hello')
343 u'hello'
344
345 >>> ensure_unicode(u'A'.encode('utf-16')) # Not ASCII
346 Traceback (most recent call last):
347 ...
348 TypeError: '\xff\xfeA\x00' is not US-ASCII
349
350 >>> ensure_unicode(42)
351 Traceback (most recent call last):
352 ...
353 TypeError: 42 is not a string type (<type 'int'>)
354
355 >>> ensure_unicode(None) is None
356 True
357 """
358 if string is None:
359 return None
360 elif isinstance(string, six.text_type):
361 return string
362 elif isinstance(string, bytes):
363 try:
364 return string.decode('US-ASCII')
365 except UnicodeDecodeError:
366 raise TypeError("%s is not US-ASCII" % repr(string))
367 else:
368 raise TypeError(
369 "%r is not a string type (%r)" % (string, type(string)))
diff --git a/lib/lp/services/webapp/vocabulary.py b/lib/lp/services/webapp/vocabulary.py
index b77961f..a75c7c5 100644
--- a/lib/lp/services/webapp/vocabulary.py
+++ b/lib/lp/services/webapp/vocabulary.py
@@ -50,7 +50,6 @@ from zope.security.proxy import isinstance as zisinstance
5050
51from lp.services.database.interfaces import IStore51from lp.services.database.interfaces import IStore
52from lp.services.database.sqlbase import SQLBase52from lp.services.database.sqlbase import SQLBase
53from lp.services.helpers import ensure_unicode
5453
5554
56class ForgivingSimpleVocabulary(SimpleVocabulary):55class ForgivingSimpleVocabulary(SimpleVocabulary):
@@ -428,7 +427,7 @@ class NamedSQLObjectVocabulary(SQLObjectVocabularyBase):
428 def search(self, query, vocab_filter=None):427 def search(self, query, vocab_filter=None):
429 """Return terms where query is a subtring of the name."""428 """Return terms where query is a subtring of the name."""
430 if query:429 if query:
431 clause = CONTAINSSTRING(self._table.q.name, ensure_unicode(query))430 clause = CONTAINSSTRING(self._table.q.name, six.ensure_text(query))
432 if self._filter:431 if self._filter:
433 clause = AND(clause, self._filter)432 clause = AND(clause, self._filter)
434 return self._table.select(clause, orderBy=self._orderBy)433 return self._table.select(clause, orderBy=self._orderBy)
@@ -569,7 +568,7 @@ class NamedStormVocabulary(StormVocabularyBase):
569 if not query:568 if not query:
570 return self.emptySelectResults()569 return self.emptySelectResults()
571570
572 query = ensure_unicode(query).lower()571 query = six.ensure_text(query).lower()
573 results = IStore(self._table).find(572 results = IStore(self._table).find(
574 self._table,573 self._table,
575 self._table.name.contains_string(query),574 self._table.name.contains_string(query),
diff --git a/lib/lp/services/worlddata/model/language.py b/lib/lp/services/worlddata/model/language.py
index 258fd1f..8edad4f 100644
--- a/lib/lp/services/worlddata/model/language.py
+++ b/lib/lp/services/worlddata/model/language.py
@@ -40,7 +40,6 @@ from lp.services.database.interfaces import (
40 IStore,40 IStore,
41 )41 )
42from lp.services.database.sqlbase import SQLBase42from lp.services.database.sqlbase import SQLBase
43from lp.services.helpers import ensure_unicode
44from lp.services.propertycache import (43from lp.services.propertycache import (
45 cachedproperty,44 cachedproperty,
46 get_property_cache,45 get_property_cache,
@@ -295,7 +294,7 @@ class LanguageSet:
295 def search(self, text):294 def search(self, text):
296 """See `ILanguageSet`."""295 """See `ILanguageSet`."""
297 if text:296 if text:
298 text = ensure_unicode(text).lower()297 text = six.ensure_text(text).lower()
299 results = ISlaveStore(Language).find(298 results = ISlaveStore(Language).find(
300 Language, Or(299 Language, Or(
301 Language.code.lower().contains_string(text),300 Language.code.lower().contains_string(text),
diff --git a/lib/lp/soyuz/model/binarypackagename.py b/lib/lp/soyuz/model/binarypackagename.py
index de0f71a..7367dee 100644
--- a/lib/lp/soyuz/model/binarypackagename.py
+++ b/lib/lp/soyuz/model/binarypackagename.py
@@ -19,7 +19,6 @@ from zope.interface import implementer
19from lp.app.errors import NotFoundError19from lp.app.errors import NotFoundError
20from lp.services.database.interfaces import IStore20from lp.services.database.interfaces import IStore
21from lp.services.database.sqlbase import SQLBase21from lp.services.database.sqlbase import SQLBase
22from lp.services.helpers import ensure_unicode
23from lp.soyuz.interfaces.binarypackagename import (22from lp.soyuz.interfaces.binarypackagename import (
24 IBinaryPackageName,23 IBinaryPackageName,
25 IBinaryPackageNameSet,24 IBinaryPackageNameSet,
@@ -57,10 +56,10 @@ class BinaryPackageNameSet:
5756
58 def queryByName(self, name):57 def queryByName(self, name):
59 return IStore(BinaryPackageName).find(58 return IStore(BinaryPackageName).find(
60 BinaryPackageName, name=ensure_unicode(name)).one()59 BinaryPackageName, name=six.ensure_text(name, 'ASCII')).one()
6160
62 def new(self, name):61 def new(self, name):
63 return BinaryPackageName(name=ensure_unicode(name))62 return BinaryPackageName(name=six.ensure_text(name, 'ASCII'))
6463
65 def ensure(self, name):64 def ensure(self, name):
66 """Ensure that the given BinaryPackageName exists, creating it65 """Ensure that the given BinaryPackageName exists, creating it
@@ -68,7 +67,7 @@ class BinaryPackageNameSet:
6867
69 Returns the BinaryPackageName68 Returns the BinaryPackageName
70 """69 """
71 name = ensure_unicode(name)70 name = six.ensure_text(name, 'ASCII')
72 try:71 try:
73 return self[name]72 return self[name]
74 except NotFoundError:73 except NotFoundError:
diff --git a/lib/lp/soyuz/model/packageset.py b/lib/lp/soyuz/model/packageset.py
index 7bf5204..bb17ad8 100644
--- a/lib/lp/soyuz/model/packageset.py
+++ b/lib/lp/soyuz/model/packageset.py
@@ -26,7 +26,6 @@ from lp.services.database.interfaces import (
26 IMasterStore,26 IMasterStore,
27 IStore,27 IStore,
28 )28 )
29from lp.services.helpers import ensure_unicode
30from lp.soyuz.interfaces.packageset import (29from lp.soyuz.interfaces.packageset import (
31 DuplicatePackagesetName,30 DuplicatePackagesetName,
32 IPackageset,31 IPackageset,
@@ -302,7 +301,7 @@ class Packageset(Storm):
302 def addSources(self, names):301 def addSources(self, names):
303 """See `IPackageset`."""302 """See `IPackageset`."""
304 if isinstance(names, six.string_types):303 if isinstance(names, six.string_types):
305 names = [ensure_unicode(names)]304 names = [six.ensure_text(names, 'ASCII')]
306 clauses = (SourcePackageName, SourcePackageName.name.is_in(names))305 clauses = (SourcePackageName, SourcePackageName.name.is_in(names))
307 self._api_add_or_remove(clauses, self._addSourcePackageNames)306 self._api_add_or_remove(clauses, self._addSourcePackageNames)
308307
diff --git a/lib/lp/soyuz/scripts/initialize_distroseries.py b/lib/lp/soyuz/scripts/initialize_distroseries.py
index 60c0bc8..2f64d2b 100644
--- a/lib/lp/soyuz/scripts/initialize_distroseries.py
+++ b/lib/lp/soyuz/scripts/initialize_distroseries.py
@@ -12,6 +12,7 @@ __all__ = [
12from collections import OrderedDict12from collections import OrderedDict
13from operator import methodcaller13from operator import methodcaller
1414
15import six
15import transaction16import transaction
16from zope.component import getUtility17from zope.component import getUtility
1718
@@ -24,7 +25,6 @@ from lp.registry.model.distroseries import DistroSeries
24from lp.services.database import bulk25from lp.services.database import bulk
25from lp.services.database.interfaces import IMasterStore26from lp.services.database.interfaces import IMasterStore
26from lp.services.database.sqlbase import sqlvalues27from lp.services.database.sqlbase import sqlvalues
27from lp.services.helpers import ensure_unicode
28from lp.services.scripts import log28from lp.services.scripts import log
29from lp.soyuz.adapters.packagelocation import PackageLocation29from lp.soyuz.adapters.packagelocation import PackageLocation
30from lp.soyuz.enums import (30from lp.soyuz.enums import (
@@ -125,7 +125,8 @@ class InitializeDistroSeries:
125 self.packagesets = None125 self.packagesets = None
126 else:126 else:
127 self.packagesets_ids = [127 self.packagesets_ids = [
128 ensure_unicode(packageset) for packageset in packagesets]128 six.ensure_text(packageset, 'ASCII')
129 for packageset in packagesets]
129 self.packagesets = bulk.load(130 self.packagesets = bulk.load(
130 Packageset, [int(packageset) for packageset in packagesets])131 Packageset, [int(packageset) for packageset in packagesets])
131 self.rebuild = rebuild132 self.rebuild = rebuild

Subscribers

People subscribed via source and target branches

to status/vote changes: