Merge lp:~cjwatson/isitdeployable/py3-syntax-and-imports into lp:isitdeployable

Proposed by Colin Watson
Status: Merged
Approved by: Colin Watson
Approved revision: 271
Merge reported by: Otto Co-Pilot
Merged at revision: not available
Proposed branch: lp:~cjwatson/isitdeployable/py3-syntax-and-imports
Merge into: lp:isitdeployable
Diff against target: 326 lines (+37/-43)
11 files modified
requirements.txt (+1/-0)
revtracker/data.py (+10/-10)
revtracker/models.py (+2/-2)
revtracker/tasks.py (+7/-7)
revtracker/tests/__init__.py (+0/-5)
revtracker/tests/test_data.py (+1/-3)
revtracker/tests/test_tasks.py (+2/-2)
revtracker/tests/test_views.py (+1/-1)
revtracker/tests/test_views_logged_in.py (+2/-2)
revtracker/views.py (+10/-11)
setup.py (+1/-0)
To merge this branch: bzr merge lp:~cjwatson/isitdeployable/py3-syntax-and-imports
Reviewer Review Type Date Requested Status
Ricardo Kirkner (community) Approve
Review via email: mp+336769@code.launchpad.net

Commit message

Make various bits of syntax and standard library imports compatible with Python 3.

To post a comment you must log in.
Revision history for this message
Ricardo Kirkner (ricardokirkner) wrote :

LGTM

review: Approve
Revision history for this message
Otto Co-Pilot (otto-copilot) wrote :

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== modified file 'requirements.txt'
2--- requirements.txt 2017-10-03 15:08:45 +0000
3+++ requirements.txt 2018-01-29 11:51:32 +0000
4@@ -42,6 +42,7 @@
5 pybars==0.0.4
6 PyMeta==0.5.0
7 pyinotify==0.9.3
8+six==1.10.0
9 soupmatchers==0.2
10 testresources==0.2.5
11 testtools==0.9.16
12
13=== modified file 'revtracker/data.py'
14--- revtracker/data.py 2016-09-27 14:31:46 +0000
15+++ revtracker/data.py 2018-01-29 11:51:32 +0000
16@@ -149,9 +149,9 @@
17 child_revisions_needing_qa = Revision.objects.filter(
18 status__exact=Revision.STATUS_UNKNOWN, parent__in=undeployed_revisions)
19 revisions = list(child_revisions_needing_qa)
20- def is_unknown(rev):
21- return rev.status == rev.STATUS_UNKNOWN
22- revisions += filter(is_unknown, undeployed_revisions)
23+ revisions += [
24+ rev for rev in undeployed_revisions
25+ if rev.status == rev.STATUS_UNKNOWN]
26 return revisions
27
28
29@@ -172,7 +172,7 @@
30 pk is not in the dict for one of the input revisions,
31 it indicates that the project isn't deployed.
32 """
33- projects = map(operator.attrgetter('project'), revisions)
34+ projects = [rev.project for rev in revisions]
35 revnos = dict(Revision.objects.filter(project__in=projects,
36 pk=F('project__deployed_revision')).values_list('project', 'revno'))
37 return revnos
38@@ -221,9 +221,9 @@
39 if children:
40 if revision.status in (revision.STATUS_BAD, revision.STATUS_UNKNOWN):
41 status = revision.status
42- elif filter(lambda c: c.status==revision.STATUS_BAD, children):
43+ elif any(c.status == revision.STATUS_BAD for c in children):
44 status = revision.STATUS_BAD
45- elif filter(lambda c: c.status==revision.STATUS_UNKNOWN, children):
46+ elif any(c.status == revision.STATUS_UNKNOWN for c in children):
47 status = revision.STATUS_UNKNOWN
48 else:
49 status = revision.status
50@@ -279,7 +279,7 @@
51 then it will not be in the dict.
52 """
53 query = Revision.objects.filter(
54- parent__pk__in=map(operator.attrgetter('pk'), parents),
55+ parent__pk__in=[rev.pk for rev in parents],
56 ).extra(order_by=['branch', 'revno']).select_related('committer')
57 child_map = {}
58 for child in query:
59@@ -298,7 +298,7 @@
60 be in the dict.
61 """
62 parent_map = dict(Revision.objects.filter(
63- pk__in=map(operator.attrgetter('pk'), revisions)).exclude(
64+ pk__in=[rev.pk for rev in revisions]).exclude(
65 parent__exact=None,
66 ).values_list('pk', 'parent__revno'))
67 return parent_map
68@@ -318,7 +318,7 @@
69 return dict()
70 content_type_id = ContentType.objects.get_for_model(revisions[0]).pk
71 comments = Comment.objects.filter(content_type__exact=content_type_id,
72- object_pk__in=map(operator.attrgetter('pk'), revisions)).select_related('user')
73+ object_pk__in=[rev.pk for rev in revisions]).select_related('user')
74 comment_map = dict()
75 for comment in comments:
76 object_pk = int(comment.object_pk)
77@@ -351,4 +351,4 @@
78 else:
79 requests = requests.order_by('-date_completed')
80 requests = requests[:100]
81- return map(deployment_request_summary, requests)
82+ return [deployment_request_summary(request) for request in requests]
83
84=== modified file 'revtracker/models.py'
85--- revtracker/models.py 2016-11-11 20:15:39 +0000
86+++ revtracker/models.py 2018-01-29 11:51:32 +0000
87@@ -46,7 +46,7 @@
88
89 class Revision(models.Model):
90
91- (STATUS_UNKNOWN, STATUS_OK, STATUS_BAD, STATUS_UNTESTABLE) = range(4)
92+ (STATUS_UNKNOWN, STATUS_OK, STATUS_BAD, STATUS_UNTESTABLE) = list(range(4))
93
94 STATUS_CHOICES = (
95 (STATUS_UNKNOWN, 'Unknown'),
96@@ -124,7 +124,7 @@
97
98 class DeploymentRequest(models.Model):
99
100- (STATUS_WAITING, STATUS_COMPLETE) = range(2)
101+ (STATUS_WAITING, STATUS_COMPLETE) = list(range(2))
102
103 STATUS_CHOICES = (
104 (STATUS_WAITING, 'Waiting'),
105
106=== modified file 'revtracker/tasks.py'
107--- revtracker/tasks.py 2017-10-03 16:36:16 +0000
108+++ revtracker/tasks.py 2018-01-29 11:51:32 +0000
109@@ -1,15 +1,10 @@
110 from __future__ import print_function
111
112-from email.Utils import parseaddr
113+from email.utils import parseaddr
114 import os
115 import re
116 import shutil
117 import tempfile
118-from urlparse import (
119- unquote,
120- urlsplit,
121- urlunsplit,
122- )
123
124 from bzrlib import (
125 errors as bzr_errors,
126@@ -24,6 +19,11 @@
127 from django.contrib.auth.models import User
128 from django.db.models import Max
129 import pygit2
130+from six.moves.urllib.parse import (
131+ unquote,
132+ urlsplit,
133+ urlunsplit,
134+ )
135
136 from revtracker.launchpad import get_launchpad
137 from revtracker.models import (
138@@ -47,7 +47,7 @@
139
140 class VCS(object):
141
142- (VCS_BAZAAR, VCS_GIT) = range(2)
143+ (VCS_BAZAAR, VCS_GIT) = list(range(2))
144
145
146 class LocalRevision(object):
147
148=== modified file 'revtracker/tests/__init__.py'
149--- revtracker/tests/__init__.py 2016-11-03 15:34:55 +0000
150+++ revtracker/tests/__init__.py 2018-01-29 11:51:32 +0000
151@@ -10,11 +10,6 @@
152
153 import soupmatchers
154
155-from test_api_helpers import *
156-from test_data import *
157-from test_templates import *
158-from test_views import *
159-
160
161 class TestClient(Client):
162
163
164=== modified file 'revtracker/tests/test_data.py'
165--- revtracker/tests/test_data.py 2016-11-10 17:25:49 +0000
166+++ revtracker/tests/test_data.py 2018-01-29 11:51:32 +0000
167@@ -738,9 +738,7 @@
168 revision = self.factory.make_one(Revision)
169 children = self.factory.make(2, Revision, parent=revision,
170 branch="lp:foo", revno=1)
171- def load_rev(rev):
172- return Revision.objects.get(pk=rev.pk)
173- from_db = map(load_rev, children)
174+ from_db = [Revision.objects.get(pk=rev.pk) for rev in children]
175 self.assertNumQueries(1, data.get_parent_revnos, from_db)
176
177
178
179=== modified file 'revtracker/tests/test_tasks.py'
180--- revtracker/tests/test_tasks.py 2017-10-03 16:36:16 +0000
181+++ revtracker/tests/test_tasks.py 2018-01-29 11:51:32 +0000
182@@ -1,15 +1,15 @@
183-from email.Utils import parseaddr
184+from email.utils import parseaddr
185 import os.path
186 import shutil
187 import tempfile
188 from test.test_support import captured_stdout
189-from urllib import pathname2url
190
191 from bzrlib.controldir import ControlDir
192 from bzrlib.tests import TestCaseWithTransport
193 from django.test.utils import override_settings
194 from django_factory import TestCase
195 import pygit2
196+from six.moves.urllib.request import pathname2url
197 from testscenarios import WithScenarios
198 from testtools.matchers import (
199 MatchesSetwise,
200
201=== modified file 'revtracker/tests/test_views.py'
202--- revtracker/tests/test_views.py 2016-09-22 12:39:14 +0000
203+++ revtracker/tests/test_views.py 2018-01-29 11:51:32 +0000
204@@ -165,7 +165,7 @@
205 so_far = len(connection.queries)
206 try:
207 super(GetProjectInfoTests, self).assertNumQueries(*args, **kwargs)
208- except AssertionError, e:
209+ except AssertionError as e:
210 e.mismatch.annotation += ", Queries were:\n%s" % "\n".join(
211 map(itemgetter('sql'), connection.queries[so_far:]))
212 raise e
213
214=== modified file 'revtracker/tests/test_views_logged_in.py'
215--- revtracker/tests/test_views_logged_in.py 2016-11-03 15:38:36 +0000
216+++ revtracker/tests/test_views_logged_in.py 2018-01-29 11:51:32 +0000
217@@ -6,7 +6,7 @@
218
219 from ..models import Project, Revision
220
221-from . import(
222+from . import (
223 IndexProject,
224 IndexProjectsList,
225 RevTrackerTestCase,
226@@ -20,7 +20,7 @@
227 ProjectRevisionSetRollbackForm
228 )
229
230-from test_api_helpers import User
231+from .test_api_helpers import User
232
233
234 class IndexViewTests(RevTrackerTestCase):
235
236=== modified file 'revtracker/views.py'
237--- revtracker/views.py 2016-11-03 21:24:00 +0000
238+++ revtracker/views.py 2018-01-29 11:51:32 +0000
239@@ -162,7 +162,7 @@
240 comment_form = CommentForm(revision)
241 info['comment_form'] = comment_form.generate_security_data()
242 info['comment_form']['url'] = reverse('comments-post-comment')
243- info['comments'] = map(comment_to_info, comments)
244+ info['comments'] = [comment_to_info(comment) for comment in comments]
245 return info
246
247
248@@ -180,14 +180,14 @@
249 def child_info(rev):
250 comments = comment_map.get(rev.pk, [])
251 return project_revision_to_info(project, rev, [], comments, show_deployability=True)
252- info['child_revisions'] = map(child_info, child_revisions)
253+ info['child_revisions'] = [child_info(rev) for rev in child_revisions]
254 return info
255
256
257 def index_data():
258 projects = Project.objects.all().select_related('revision_set')
259 info = dict()
260- info['projects'] = map(index_project_to_info, projects)
261+ info['projects'] = [index_project_to_info(project) for project in projects]
262 return info
263
264
265@@ -218,7 +218,7 @@
266 def make_rev_info(rev):
267 rev_children = child_revisions.get(rev.pk, [])
268 return project_revision_to_info_with_children(project, rev, rev_children, comment_map)
269- info['undeployed_revisions'] = map(make_rev_info, undeployed_revisions)
270+ info['undeployed_revisions'] = [make_rev_info(rev) for rev in undeployed_revisions]
271 return info
272
273
274@@ -341,11 +341,11 @@
275 def make_rev_info(rev):
276 rev_children = child_revisions.get(rev.pk, [])
277 return project_revision_to_info_with_children(dr.project, rev, rev_children, comment_map)
278- info['deploy_revisions'] = map(make_rev_info, deploy_revisions)
279+ info['deploy_revisions'] = [make_rev_info(rev) for rev in deploy_revisions]
280 def check_deployability(rev):
281 rev_children = child_revisions.get(rev.pk, [])
282 return data.revision_is_deployable(rev, rev_children)
283- bad_revisions = filter(lambda x: not x, map(check_deployability, deploy_revisions))
284+ bad_revisions = [rev for rev in deploy_revisions if not check_deployability(rev)]
285 if bad_revisions:
286 info['not_ok_revisions_count'] = len(bad_revisions)
287 info['not_deployable'] = bool(bad_revisions)
288@@ -452,12 +452,12 @@
289 if parent_revno <= deployed_revnos[rev.project.pk]:
290 return False
291 return True
292- revisions = filter(is_undeployed, revisions)
293+ revisions = [rev for rev in revisions if is_undeployed(rev)]
294 def make_rev_info(rev):
295 return project_revision_to_info(rev.project, rev,
296 child_revisions.get(rev.pk, []), comment_map.get(rev.pk, []),
297 show_deployability=True)
298- info['revisions_needing_qa'] = map(make_rev_info, revisions)
299+ info['revisions_needing_qa'] = [make_rev_info(rev) for rev in revisions]
300 return info
301
302
303@@ -527,9 +527,8 @@
304 project = get_project(project_name)
305 info = checklist_data.checklist_info(project.deployment_checklist)
306 sub_links = project_sub_links(project)
307- def markdownize_description(step):
308- return markdownize_for_editor(step, 'description')
309- info['steps'] = map(markdownize_description, info['steps'])
310+ info['steps'] = [
311+ markdownize_for_editor(step, 'description') for step in info['steps']]
312 content = render_template('revtracker/checklist.html', info,
313 get_partials(), get_helpers(request))
314 return HttpResponse(render_page('Deploying %s' % str(project.name),
315
316=== modified file 'setup.py'
317--- setup.py 2016-09-27 14:31:46 +0000
318+++ setup.py 2018-01-29 11:51:32 +0000
319@@ -33,6 +33,7 @@
320 'oops_celery',
321 'oops-wsgi',
322 'pygit2>=0.23.2',
323+ 'six',
324 ],
325 zip_safe=False,
326 packages=find_packages(),

Subscribers

People subscribed via source and target branches