Skip to content
This repository has been archived by the owner on Mar 15, 2018. It is now read-only.

Commit

Permalink
Revert "Revert "make jetpack upgrader prettier and more effective (bu…
Browse files Browse the repository at this point in the history
…g 684412)""

This reverts commit 212f73b.
  • Loading branch information
cvan committed Nov 2, 2011
1 parent 491d681 commit 1565db5
Show file tree
Hide file tree
Showing 4 changed files with 170 additions and 66 deletions.
182 changes: 124 additions & 58 deletions apps/zadmin/templates/zadmin/jetpack.html
Original file line number Diff line number Diff line change
@@ -1,51 +1,129 @@
{% extends "admin/base.html" %}

{% block title %}{{ page_title('Jetpack') }}{% endblock %}
{% set title = 'Jetpack' %}

{% block title %}{{ page_title(title) }}{% endblock %}

{% block extrahead %}
<style>
.upgrade { color: green; }
#jetpacks tbody { font-family: monospace; }
.upgrade { color: green }
tr.upgrade { background-color: #efe }
#ranges { background: #cef }
td { font-family: monospace }
.fail { color: red }
form.highlight { background: #eee; border: 1px solid #ccc }
form.upgrading, .upgrade td { background: #efe; border-color: #9c9 }
.upgrade td { border-top: 1px solid #9c9 }
table { margin: .5em 0 }
tbody th { background: #fff; color: #000 }
tfoot th { background: #e1e1e1 }
tfoot td { vertical-align: middle }
</style>
{% endblock %}

{% set minver, maxver = upgrader.jetpack_versions() %}
{% set upgrading = upgrader.version() %}
{% set repack_status = upgrader.files() %}

{% block js %}
<script>
$(function() {
$('#change-range, #cancel-range').click(_pd(function() {
$('#ranges, #proceed').toggleClass('hidden').slideDown();
$('#change-range').fadeToggle();
}));
});
</script>
{% endblock %}

{% macro jetpack_head() %}
<thead>
<tr>
<th>Add-on</th>
<th>Version</th>
<th>Status</th>
<th>Jetpack</th>
<th>File</th>
{% if upgrading %}
<th>Upgrade</th>
<th></th>
{% endif %}
</tr>
</thead>
{% endmacro %}

{% macro jetpack_row(file, is_upgraded=False) %}
<tr {% if is_upgraded or file.needs_upgrade %}class="upgrade"{% endif %}>
<td><a href="{{ url('devhub.versions', file.version.addon_id) }}">{{ file.version.addon_id }}</a></td>
<td><a href="{{ url('devhub.versions.edit', file.version.addon_id, file.version.id) }}">{{ file.version.version }}</a></td>
<td>{{ amo.STATUS_CHOICES[file.status] }}</td>
<td>{{ file.jetpack_version }}</td>
<td><a href="{{ file.get_url_path('') }}">{{ file.id }}</a></td>
{% if upgrading %}
{% if file.id|string in repack_status %}
{% with repack = repack_status[file.id|string] %}
{% if repack.status == 'failed' %}
<td class="fail"><pre>{{ repack.msg }}</pre></td>
{% else %}
<td>{{ repack.status }} {{ repack.time|timesince }}</td>
{% endif %}
{% endwith %}
{% else %}
<td></td>
{% endif %}
<td><a href="{{ url('zadmin.jetpack.resend', file.id) }}">Resend</a></td>
{% endif %}
</tr>
{% endmacro %}

{% block content %}
{% include "messages.html" %}
<h2>Jetpack</h2>
<p>Jetpacks built with SDK versions <b>{{ minver }} &ndash; {{ maxver }}</b> will be upgraded.</p>
<p>Should it be something different?</p>
<form method="post" action="">
<h2>{{ title }}</h2>
<p>
Jetpacks built with SDK versions <b>{{ minver }} &ndash; {{ maxver }}</b>
{{ 'are being' if upgrading else 'will be' }} upgraded.
<a href="#" id="change-range">Select a different range.</a>
</p>
<form id="ranges" method="post" action=""
class="highlight{{ ' hidden' if not form.errors }}">
{{ csrf() }}
{{ form.minver }} to {{ form.maxver }}
<button>Hit it.</button>
<input type="submit" value="Update range">
or <a href="#" id="cancel-range">Cancel</a>
</form>

<h3>Jetpack Files ({{ jetpacks|length }})</h3>
<p>These are all the jetpack files we know about. Disabled files and add-ons are excluded.</p>
{% if upgrading %}
<p>We're running an upgrade to Jetpack <b>{{ upgrading }}</b> right now! Patience, my child.</p>
{% else %}
<p>Files in green will be upgraded to <b>{{ maxver }}</b> when you press the button.</p>
{% if settings.SEND_REAL_EMAIL %}
<p>Note: upgrade emails <b>will be sent</b> to developers.</p>
{% else %}
<p>Upgrade emails <b>will not</b> be sent to developers. You can find the logged emails at <a href="{{ url('zadmin.mail') }}">admin/mail</a>.</p>
{% endif %}
{% endif %}
<form method="post" action="">
<form id="proceed" method="post" action=""
class="highlight{{ ' upgrading' if upgrading }}{{ ' hidden' if form.errors }}">
{{ csrf() }}
{% if upgrading %}
<input type="submit" name="cancel" value="Cancel the upgrade">
<h3>Upgrade in progress&hellip;</h3>
<p>We're running an upgrade to Jetpack <b>{{ upgrading }}</b> right now! Patience, my child.</p>
{% else %}
<input type="submit" name="upgrade" value="Upgrade to Jetpack {{ maxver }}">
<h3>Are you sure you want to upgrade?</h3>
<p>{{ need_upgrade|length }} file(s) below will be upgraded to <b>{{ maxver }}</b> when you press the button.</p>
<table>
{{ jetpack_head() }}
<tbody class="upgrade">
{% for file in need_upgrade %}
{{ jetpack_row(file) }}
{% endfor %}
</tbody>
</table>
{% if settings.SEND_REAL_EMAIL %}
<p>Note: upgrade emails <b>will be sent</b> to developers.</p>
{% else %}
<p>Upgrade emails <b>will not</b> be sent to developers. You can find the logged emails at <a href="{{ url('zadmin.mail') }}">admin/mail</a>.</p>
{% endif %}
{% endif %}
<p>
{% if upgrading %}
<input type="submit" name="cancel" value="Cancel the upgrade">
{% else %}
<input type="submit" name="upgrade" value="Upgrade to Jetpack {{ maxver }}">
{% endif %}
</p>
</form>

<h3>Jetpack Tallies</h3>

<table>
<thead>
<tr>
Expand All @@ -61,44 +139,32 @@ <h3>Jetpack Files ({{ jetpacks|length }})</h3>
</tr>
{% endfor %}
</tbody>
<tfoot>
<tr>
<th>Total</th>
<td>{{ jetpacks|length }}</td>
</tr>
</tfoot>
</table>

<h3>Jetpack Files</h3>
<p>These are all the Jetpack files we know about. Disabled files and add-ons are excluded.</p>

<table id="jetpacks">
<thead>
<tr>
<th>Add-on</th>
<th>Version</th>
<th>Status</th>
<th>Jetpack</th>
<th>File</th>
{% if upgrading %}
<th>Upgrade</th>
{% endif %}
</tr>
</thead>
{{ jetpack_head() }}
<tbody>
{% for file in jetpacks %}
<tr {% if file.needs_upgrade %}class="upgrade"{% endif %}>
<td><a href="{{ url('devhub.versions', file.version.addon_id) }}">{{ file.version.addon_id }}</a></td>
<td><a href="{{ url('devhub.versions.edit', file.version.addon_id, file.version.id) }}">{{ file.version.version }}</a></td>
<td>{{ amo.STATUS_CHOICES[file.status] }}</td>
<td>{{ file.jetpack_version }}</td>
<td><a href="{{ file.get_url_path('') }}">{{ file.id }}</a></td>
{% if upgrading %}
{% if file.id|string in repack_status %}
{% with repack = repack_status[file.id|string] %}
{% if repack.status == 'failed' %}
<td class="fail"><pre>{{ repack.msg }}</pre></td>
{% else %}
<td>{{ repack.status }} {{ repack.time|timesince }}</td>
{% endif %}
{% endwith %}
{% else %}
<td></td>
{% endif %}
{% endif %}
</tr>
{% for status, files in repacked %}
<th colspan="0">{{ status }}</th>
{% for file in files %}
{{ jetpack_row(file.file, True) }}
{% endfor %}
{% endfor %}
{% if not upgrading %}
<th colspan="0">Archived</th>
{% for file in archived %}
{{ jetpack_row(file) }}
{% endfor %}
{% endif %}
</tbody>
</table>
{% endblock %}
21 changes: 15 additions & 6 deletions apps/zadmin/tests/test_views.py
Original file line number Diff line number Diff line change
Expand Up @@ -1405,26 +1405,35 @@ def set_range(self, min_, max_):
def test_change_range_success(self):
self.set_range('1.0', '1.1')

def test_upgrade(self):
self.set_range('1.2', '1.2.1')

def submit_upgrade(self):
r = self.client.post(self.url, {'upgrade': True})
self.assertRedirects(r, self.url)

def test_upgrade(self):
self.set_range('1.2', '1.2.1')
self.submit_upgrade()

r = self.client.get(self.url)
eq_(r.status_code, 200)
eq_(r.context['upgrader'].version(), '1.2.1')
eq_(pq(r.content)('input[name=cancel]').length, 1)

def test_cancel(self):
self.set_range('1.2', '1.2.1')

r = self.client.post(self.url, {'upgrade': True})
self.assertRedirects(r, self.url)
self.submit_upgrade()

r = self.client.post(self.url, {'cancel': True})
self.assertRedirects(r, self.url)

r = self.client.get(self.url)
eq_(r.status_code, 200)
eq_(r.context['upgrader'].version(), None)

@mock.patch('zadmin.views.files.tasks.start_upgrade.delay')
def test_resend(self, start_upgrade):
self.set_range('1.2', '1.2.1')
self.submit_upgrade()

file_id = str(5)
r = self.client.get(reverse('zadmin.jetpack.resend', args=[file_id]))
start_upgrade.assert_called_with([file_id], sdk_version='1.2.1')
2 changes: 2 additions & 0 deletions apps/zadmin/urls.py
Original file line number Diff line number Diff line change
Expand Up @@ -40,6 +40,8 @@
url(r'^email_preview/(?P<topic>.*)\.csv$',
views.email_preview_csv, name='zadmin.email_preview_csv'),
url(r'^jetpack$', views.jetpack, name='zadmin.jetpack'),
url(r'^jetpack/resend/(?P<file_id>\d+)$', views.jetpack_resend,
name='zadmin.jetpack.resend'),

url('^features$', views.features, name='zadmin.features'),
url('^features/collections\.json$', views.es_collections_json,
Expand Down
31 changes: 29 additions & 2 deletions apps/zadmin/views.py
Original file line number Diff line number Diff line change
Expand Up @@ -345,11 +345,31 @@ def jetpack(request):
messages.error(request, form.errors.as_text())

jetpacks = files.utils.find_jetpacks(minver, maxver)

need_upgrade = filter(lambda f: f.needs_upgrade, jetpacks)
archived = filter(lambda f: not f.needs_upgrade, jetpacks)
repacked = []

upgrading = upgrader.version() # Current Jetpack version upgrading to.
repack_status = upgrader.files() # The files being repacked.

if upgrading:
# Group the repacked files by status for this Jetpack upgrade.
grouped_files = sorted_groupby(repack_status.values(),
key=lambda f: f['status'])
for group, rows in grouped_files:
rows = sorted(list(rows), key=lambda f: f['file'])
for idx, row in enumerate(rows):
rows[idx]['file'] = File.objects.get(id=row['file'])
repacked.append((group, rows))

groups = sorted_groupby(jetpacks, 'jetpack_version')
by_version = dict((version, len(list(files))) for version, files in groups)
return jingo.render(request, 'zadmin/jetpack.html',
dict(form=form, jetpacks=jetpacks, upgrader=upgrader,
by_version=by_version))
dict(form=form, upgrader=upgrader,
by_version=by_version, upgrading=upgrading,
need_upgrade=need_upgrade, archived=archived,
repacked=repacked, repack_status=repack_status))


def start_upgrade(minver, maxver):
Expand All @@ -360,6 +380,13 @@ def start_upgrade(minver, maxver):
files.tasks.start_upgrade.delay(ids, sdk_version=maxver)


def jetpack_resend(request, file_id):
maxver = files.utils.JetpackUpgrader().version()
log.info('Starting a jetpack upgrade to %s [1 file].' % maxver)
files.tasks.start_upgrade.delay([file_id], sdk_version=maxver)
return redirect('zadmin.jetpack')


@login_required
@json_view
def es_collections_json(request):
Expand Down

0 comments on commit 1565db5

Please sign in to comment.