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
=== modified file 'requirements.txt'
--- requirements.txt 2017-10-03 15:08:45 +0000
+++ requirements.txt 2018-01-29 11:51:32 +0000
@@ -42,6 +42,7 @@
42pybars==0.0.442pybars==0.0.4
43PyMeta==0.5.043PyMeta==0.5.0
44pyinotify==0.9.344pyinotify==0.9.3
45six==1.10.0
45soupmatchers==0.246soupmatchers==0.2
46testresources==0.2.547testresources==0.2.5
47testtools==0.9.1648testtools==0.9.16
4849
=== modified file 'revtracker/data.py'
--- revtracker/data.py 2016-09-27 14:31:46 +0000
+++ revtracker/data.py 2018-01-29 11:51:32 +0000
@@ -149,9 +149,9 @@
149 child_revisions_needing_qa = Revision.objects.filter(149 child_revisions_needing_qa = Revision.objects.filter(
150 status__exact=Revision.STATUS_UNKNOWN, parent__in=undeployed_revisions)150 status__exact=Revision.STATUS_UNKNOWN, parent__in=undeployed_revisions)
151 revisions = list(child_revisions_needing_qa)151 revisions = list(child_revisions_needing_qa)
152 def is_unknown(rev):152 revisions += [
153 return rev.status == rev.STATUS_UNKNOWN153 rev for rev in undeployed_revisions
154 revisions += filter(is_unknown, undeployed_revisions)154 if rev.status == rev.STATUS_UNKNOWN]
155 return revisions155 return revisions
156156
157157
@@ -172,7 +172,7 @@
172 pk is not in the dict for one of the input revisions,172 pk is not in the dict for one of the input revisions,
173 it indicates that the project isn't deployed.173 it indicates that the project isn't deployed.
174 """174 """
175 projects = map(operator.attrgetter('project'), revisions)175 projects = [rev.project for rev in revisions]
176 revnos = dict(Revision.objects.filter(project__in=projects,176 revnos = dict(Revision.objects.filter(project__in=projects,
177 pk=F('project__deployed_revision')).values_list('project', 'revno'))177 pk=F('project__deployed_revision')).values_list('project', 'revno'))
178 return revnos178 return revnos
@@ -221,9 +221,9 @@
221 if children:221 if children:
222 if revision.status in (revision.STATUS_BAD, revision.STATUS_UNKNOWN):222 if revision.status in (revision.STATUS_BAD, revision.STATUS_UNKNOWN):
223 status = revision.status223 status = revision.status
224 elif filter(lambda c: c.status==revision.STATUS_BAD, children):224 elif any(c.status == revision.STATUS_BAD for c in children):
225 status = revision.STATUS_BAD225 status = revision.STATUS_BAD
226 elif filter(lambda c: c.status==revision.STATUS_UNKNOWN, children):226 elif any(c.status == revision.STATUS_UNKNOWN for c in children):
227 status = revision.STATUS_UNKNOWN227 status = revision.STATUS_UNKNOWN
228 else:228 else:
229 status = revision.status229 status = revision.status
@@ -279,7 +279,7 @@
279 then it will not be in the dict.279 then it will not be in the dict.
280 """280 """
281 query = Revision.objects.filter(281 query = Revision.objects.filter(
282 parent__pk__in=map(operator.attrgetter('pk'), parents),282 parent__pk__in=[rev.pk for rev in parents],
283 ).extra(order_by=['branch', 'revno']).select_related('committer')283 ).extra(order_by=['branch', 'revno']).select_related('committer')
284 child_map = {}284 child_map = {}
285 for child in query:285 for child in query:
@@ -298,7 +298,7 @@
298 be in the dict.298 be in the dict.
299 """299 """
300 parent_map = dict(Revision.objects.filter(300 parent_map = dict(Revision.objects.filter(
301 pk__in=map(operator.attrgetter('pk'), revisions)).exclude(301 pk__in=[rev.pk for rev in revisions]).exclude(
302 parent__exact=None,302 parent__exact=None,
303 ).values_list('pk', 'parent__revno'))303 ).values_list('pk', 'parent__revno'))
304 return parent_map304 return parent_map
@@ -318,7 +318,7 @@
318 return dict()318 return dict()
319 content_type_id = ContentType.objects.get_for_model(revisions[0]).pk319 content_type_id = ContentType.objects.get_for_model(revisions[0]).pk
320 comments = Comment.objects.filter(content_type__exact=content_type_id,320 comments = Comment.objects.filter(content_type__exact=content_type_id,
321 object_pk__in=map(operator.attrgetter('pk'), revisions)).select_related('user')321 object_pk__in=[rev.pk for rev in revisions]).select_related('user')
322 comment_map = dict()322 comment_map = dict()
323 for comment in comments:323 for comment in comments:
324 object_pk = int(comment.object_pk)324 object_pk = int(comment.object_pk)
@@ -351,4 +351,4 @@
351 else:351 else:
352 requests = requests.order_by('-date_completed')352 requests = requests.order_by('-date_completed')
353 requests = requests[:100]353 requests = requests[:100]
354 return map(deployment_request_summary, requests)354 return [deployment_request_summary(request) for request in requests]
355355
=== modified file 'revtracker/models.py'
--- revtracker/models.py 2016-11-11 20:15:39 +0000
+++ revtracker/models.py 2018-01-29 11:51:32 +0000
@@ -46,7 +46,7 @@
4646
47class Revision(models.Model):47class Revision(models.Model):
4848
49 (STATUS_UNKNOWN, STATUS_OK, STATUS_BAD, STATUS_UNTESTABLE) = range(4)49 (STATUS_UNKNOWN, STATUS_OK, STATUS_BAD, STATUS_UNTESTABLE) = list(range(4))
5050
51 STATUS_CHOICES = (51 STATUS_CHOICES = (
52 (STATUS_UNKNOWN, 'Unknown'),52 (STATUS_UNKNOWN, 'Unknown'),
@@ -124,7 +124,7 @@
124124
125class DeploymentRequest(models.Model):125class DeploymentRequest(models.Model):
126126
127 (STATUS_WAITING, STATUS_COMPLETE) = range(2)127 (STATUS_WAITING, STATUS_COMPLETE) = list(range(2))
128128
129 STATUS_CHOICES = (129 STATUS_CHOICES = (
130 (STATUS_WAITING, 'Waiting'),130 (STATUS_WAITING, 'Waiting'),
131131
=== modified file 'revtracker/tasks.py'
--- revtracker/tasks.py 2017-10-03 16:36:16 +0000
+++ revtracker/tasks.py 2018-01-29 11:51:32 +0000
@@ -1,15 +1,10 @@
1from __future__ import print_function1from __future__ import print_function
22
3from email.Utils import parseaddr3from email.utils import parseaddr
4import os4import os
5import re5import re
6import shutil6import shutil
7import tempfile7import tempfile
8from urlparse import (
9 unquote,
10 urlsplit,
11 urlunsplit,
12 )
138
14from bzrlib import (9from bzrlib import (
15 errors as bzr_errors,10 errors as bzr_errors,
@@ -24,6 +19,11 @@
24from django.contrib.auth.models import User19from django.contrib.auth.models import User
25from django.db.models import Max20from django.db.models import Max
26import pygit221import pygit2
22from six.moves.urllib.parse import (
23 unquote,
24 urlsplit,
25 urlunsplit,
26 )
2727
28from revtracker.launchpad import get_launchpad28from revtracker.launchpad import get_launchpad
29from revtracker.models import (29from revtracker.models import (
@@ -47,7 +47,7 @@
4747
48class VCS(object):48class VCS(object):
4949
50 (VCS_BAZAAR, VCS_GIT) = range(2)50 (VCS_BAZAAR, VCS_GIT) = list(range(2))
5151
5252
53class LocalRevision(object):53class LocalRevision(object):
5454
=== modified file 'revtracker/tests/__init__.py'
--- revtracker/tests/__init__.py 2016-11-03 15:34:55 +0000
+++ revtracker/tests/__init__.py 2018-01-29 11:51:32 +0000
@@ -10,11 +10,6 @@
1010
11import soupmatchers11import soupmatchers
1212
13from test_api_helpers import *
14from test_data import *
15from test_templates import *
16from test_views import *
17
1813
19class TestClient(Client):14class TestClient(Client):
2015
2116
=== modified file 'revtracker/tests/test_data.py'
--- revtracker/tests/test_data.py 2016-11-10 17:25:49 +0000
+++ revtracker/tests/test_data.py 2018-01-29 11:51:32 +0000
@@ -738,9 +738,7 @@
738 revision = self.factory.make_one(Revision)738 revision = self.factory.make_one(Revision)
739 children = self.factory.make(2, Revision, parent=revision,739 children = self.factory.make(2, Revision, parent=revision,
740 branch="lp:foo", revno=1)740 branch="lp:foo", revno=1)
741 def load_rev(rev):741 from_db = [Revision.objects.get(pk=rev.pk) for rev in children]
742 return Revision.objects.get(pk=rev.pk)
743 from_db = map(load_rev, children)
744 self.assertNumQueries(1, data.get_parent_revnos, from_db)742 self.assertNumQueries(1, data.get_parent_revnos, from_db)
745743
746744
747745
=== modified file 'revtracker/tests/test_tasks.py'
--- revtracker/tests/test_tasks.py 2017-10-03 16:36:16 +0000
+++ revtracker/tests/test_tasks.py 2018-01-29 11:51:32 +0000
@@ -1,15 +1,15 @@
1from email.Utils import parseaddr1from email.utils import parseaddr
2import os.path2import os.path
3import shutil3import shutil
4import tempfile4import tempfile
5from test.test_support import captured_stdout5from test.test_support import captured_stdout
6from urllib import pathname2url
76
8from bzrlib.controldir import ControlDir7from bzrlib.controldir import ControlDir
9from bzrlib.tests import TestCaseWithTransport8from bzrlib.tests import TestCaseWithTransport
10from django.test.utils import override_settings9from django.test.utils import override_settings
11from django_factory import TestCase10from django_factory import TestCase
12import pygit211import pygit2
12from six.moves.urllib.request import pathname2url
13from testscenarios import WithScenarios13from testscenarios import WithScenarios
14from testtools.matchers import (14from testtools.matchers import (
15 MatchesSetwise,15 MatchesSetwise,
1616
=== modified file 'revtracker/tests/test_views.py'
--- revtracker/tests/test_views.py 2016-09-22 12:39:14 +0000
+++ revtracker/tests/test_views.py 2018-01-29 11:51:32 +0000
@@ -165,7 +165,7 @@
165 so_far = len(connection.queries)165 so_far = len(connection.queries)
166 try:166 try:
167 super(GetProjectInfoTests, self).assertNumQueries(*args, **kwargs)167 super(GetProjectInfoTests, self).assertNumQueries(*args, **kwargs)
168 except AssertionError, e:168 except AssertionError as e:
169 e.mismatch.annotation += ", Queries were:\n%s" % "\n".join(169 e.mismatch.annotation += ", Queries were:\n%s" % "\n".join(
170 map(itemgetter('sql'), connection.queries[so_far:]))170 map(itemgetter('sql'), connection.queries[so_far:]))
171 raise e171 raise e
172172
=== modified file 'revtracker/tests/test_views_logged_in.py'
--- revtracker/tests/test_views_logged_in.py 2016-11-03 15:38:36 +0000
+++ revtracker/tests/test_views_logged_in.py 2018-01-29 11:51:32 +0000
@@ -6,7 +6,7 @@
66
7from ..models import Project, Revision7from ..models import Project, Revision
88
9from . import(9from . import (
10 IndexProject,10 IndexProject,
11 IndexProjectsList,11 IndexProjectsList,
12 RevTrackerTestCase,12 RevTrackerTestCase,
@@ -20,7 +20,7 @@
20 ProjectRevisionSetRollbackForm20 ProjectRevisionSetRollbackForm
21 )21 )
2222
23from test_api_helpers import User23from .test_api_helpers import User
2424
2525
26class IndexViewTests(RevTrackerTestCase):26class IndexViewTests(RevTrackerTestCase):
2727
=== modified file 'revtracker/views.py'
--- revtracker/views.py 2016-11-03 21:24:00 +0000
+++ revtracker/views.py 2018-01-29 11:51:32 +0000
@@ -162,7 +162,7 @@
162 comment_form = CommentForm(revision)162 comment_form = CommentForm(revision)
163 info['comment_form'] = comment_form.generate_security_data()163 info['comment_form'] = comment_form.generate_security_data()
164 info['comment_form']['url'] = reverse('comments-post-comment')164 info['comment_form']['url'] = reverse('comments-post-comment')
165 info['comments'] = map(comment_to_info, comments)165 info['comments'] = [comment_to_info(comment) for comment in comments]
166 return info166 return info
167167
168168
@@ -180,14 +180,14 @@
180 def child_info(rev):180 def child_info(rev):
181 comments = comment_map.get(rev.pk, [])181 comments = comment_map.get(rev.pk, [])
182 return project_revision_to_info(project, rev, [], comments, show_deployability=True)182 return project_revision_to_info(project, rev, [], comments, show_deployability=True)
183 info['child_revisions'] = map(child_info, child_revisions)183 info['child_revisions'] = [child_info(rev) for rev in child_revisions]
184 return info184 return info
185185
186186
187def index_data():187def index_data():
188 projects = Project.objects.all().select_related('revision_set')188 projects = Project.objects.all().select_related('revision_set')
189 info = dict()189 info = dict()
190 info['projects'] = map(index_project_to_info, projects)190 info['projects'] = [index_project_to_info(project) for project in projects]
191 return info191 return info
192192
193193
@@ -218,7 +218,7 @@
218 def make_rev_info(rev):218 def make_rev_info(rev):
219 rev_children = child_revisions.get(rev.pk, [])219 rev_children = child_revisions.get(rev.pk, [])
220 return project_revision_to_info_with_children(project, rev, rev_children, comment_map)220 return project_revision_to_info_with_children(project, rev, rev_children, comment_map)
221 info['undeployed_revisions'] = map(make_rev_info, undeployed_revisions)221 info['undeployed_revisions'] = [make_rev_info(rev) for rev in undeployed_revisions]
222 return info222 return info
223223
224224
@@ -341,11 +341,11 @@
341 def make_rev_info(rev):341 def make_rev_info(rev):
342 rev_children = child_revisions.get(rev.pk, [])342 rev_children = child_revisions.get(rev.pk, [])
343 return project_revision_to_info_with_children(dr.project, rev, rev_children, comment_map)343 return project_revision_to_info_with_children(dr.project, rev, rev_children, comment_map)
344 info['deploy_revisions'] = map(make_rev_info, deploy_revisions)344 info['deploy_revisions'] = [make_rev_info(rev) for rev in deploy_revisions]
345 def check_deployability(rev):345 def check_deployability(rev):
346 rev_children = child_revisions.get(rev.pk, [])346 rev_children = child_revisions.get(rev.pk, [])
347 return data.revision_is_deployable(rev, rev_children)347 return data.revision_is_deployable(rev, rev_children)
348 bad_revisions = filter(lambda x: not x, map(check_deployability, deploy_revisions))348 bad_revisions = [rev for rev in deploy_revisions if not check_deployability(rev)]
349 if bad_revisions:349 if bad_revisions:
350 info['not_ok_revisions_count'] = len(bad_revisions)350 info['not_ok_revisions_count'] = len(bad_revisions)
351 info['not_deployable'] = bool(bad_revisions)351 info['not_deployable'] = bool(bad_revisions)
@@ -452,12 +452,12 @@
452 if parent_revno <= deployed_revnos[rev.project.pk]:452 if parent_revno <= deployed_revnos[rev.project.pk]:
453 return False453 return False
454 return True454 return True
455 revisions = filter(is_undeployed, revisions)455 revisions = [rev for rev in revisions if is_undeployed(rev)]
456 def make_rev_info(rev):456 def make_rev_info(rev):
457 return project_revision_to_info(rev.project, rev,457 return project_revision_to_info(rev.project, rev,
458 child_revisions.get(rev.pk, []), comment_map.get(rev.pk, []),458 child_revisions.get(rev.pk, []), comment_map.get(rev.pk, []),
459 show_deployability=True)459 show_deployability=True)
460 info['revisions_needing_qa'] = map(make_rev_info, revisions)460 info['revisions_needing_qa'] = [make_rev_info(rev) for rev in revisions]
461 return info461 return info
462462
463463
@@ -527,9 +527,8 @@
527 project = get_project(project_name)527 project = get_project(project_name)
528 info = checklist_data.checklist_info(project.deployment_checklist)528 info = checklist_data.checklist_info(project.deployment_checklist)
529 sub_links = project_sub_links(project)529 sub_links = project_sub_links(project)
530 def markdownize_description(step):530 info['steps'] = [
531 return markdownize_for_editor(step, 'description')531 markdownize_for_editor(step, 'description') for step in info['steps']]
532 info['steps'] = map(markdownize_description, info['steps'])
533 content = render_template('revtracker/checklist.html', info,532 content = render_template('revtracker/checklist.html', info,
534 get_partials(), get_helpers(request))533 get_partials(), get_helpers(request))
535 return HttpResponse(render_page('Deploying %s' % str(project.name),534 return HttpResponse(render_page('Deploying %s' % str(project.name),
536535
=== modified file 'setup.py'
--- setup.py 2016-09-27 14:31:46 +0000
+++ setup.py 2018-01-29 11:51:32 +0000
@@ -33,6 +33,7 @@
33 'oops_celery',33 'oops_celery',
34 'oops-wsgi',34 'oops-wsgi',
35 'pygit2>=0.23.2',35 'pygit2>=0.23.2',
36 'six',
36 ],37 ],
37 zip_safe=False,38 zip_safe=False,
38 packages=find_packages(),39 packages=find_packages(),

Subscribers

People subscribed via source and target branches