Backwards incompatible: django-mptt removal.

Removal of django-mptt and therefor the removal of a tree based snippet list, due to performance reasons with large snippet counts.

Snippets still have a 'parent' relation if it's an answer of another snippet, however this is no longer a Nested Set. The UI is simplified too and the user can now only compare an answer to it's parent snippet. I believe this is the major use case anyway.
This commit is contained in:
Martin Mahner 2017-01-19 12:10:35 +01:00
parent a6982b7414
commit ae27acf1f9
8 changed files with 52 additions and 69 deletions

View file

@ -0,0 +1,31 @@
# -*- coding: utf-8 -*-
# Generated by Django 1.10.5 on 2017-01-19 10:38
from __future__ import unicode_literals
from django.db import migrations
class Migration(migrations.Migration):
dependencies = [
('dpaste', '0001_initial'),
]
operations = [
migrations.RemoveField(
model_name='snippet',
name='level',
),
migrations.RemoveField(
model_name='snippet',
name='lft',
),
migrations.RemoveField(
model_name='snippet',
name='rght',
),
migrations.RemoveField(
model_name='snippet',
name='tree_id',
),
]

View file

@ -1,6 +1,5 @@
from random import SystemRandom
import mptt
from django.conf import settings
from django.core.urlresolvers import reverse
from django.db import models
@ -62,10 +61,6 @@ class Snippet(models.Model):
return remaining > 0 and remaining or 0
return None
@property
def is_single(self):
return self.is_root_node() and not self.get_children()
def save(self, *args, **kwargs):
if not self.secret_id:
self.secret_id = generate_secret_id()
@ -76,5 +71,3 @@ class Snippet(models.Model):
def __unicode__(self):
return self.secret_id
mptt.register(Snippet, order_insertion_by=['content'])

View file

@ -114,7 +114,6 @@ TEMPLATES = [
INSTALLED_APPS = (
'django.contrib.staticfiles',
'django.contrib.sessions',
'mptt',
'gunicorn',
'dpaste',
)

View file

@ -1,6 +1,5 @@
{% extends "dpaste/base.html" %}
{% load mptt_tags %}
{% load i18n %}
{% load dpaste_tags %}
@ -21,34 +20,9 @@
======================================================================= -->
<div id="snippet-diff" class="snippet-diff container-fluid">
<div class="row-fluid" style="width: auto; padding: 30px 0">
<div class="span9">
<div class="span12">
<div id="diff" style="display:none;"></div>
</div>
<div class="span3">
<form method="get" id="diffform" action="{% url "snippet_diff" %}">
{% csrf_token %}
<div class="tree">
{% for tree_item,structure in tree|tree_info %}
{% if structure.new_level %}<ul><li>{% else %}</li><li>{% endif %}
<div>
<span class="diff">
<input type="radio" name="a" value="{{ tree_item.id }}" {% ifequal tree_item.id snippet.parent_id %}checked="checked"{% endifequal %}>
<input type="radio" name="b" value="{{ tree_item.id }}" {% ifequal snippet tree_item %}checked="checked"{% endifequal %}>
</span>
{% ifequal snippet tree_item %}
<strong>#{{ tree_item.id }}</strong>
{% else %}
<a href="{{ tree_item.get_absolute_url }}">#{{ tree_item.id }}</a>
{% endifequal %}
</div>
{% for level in structure.closed_levels %}</li></ul>{% endfor %}
{% endfor %}
<div class="submit">
<input type="submit" value="{% trans "Compare" %}">
</div>
</div>
</form>
</div>
</div>
</div>
@ -68,8 +42,8 @@
{% if snippet.pk|in_list:request.session.snippet_list %}
<a class="btn" href="{% url "snippet_delete" snippet.secret_id %}" onclick="return confirm('{% trans "Really delete this snippet?" %}');"><i class="icon-trash"></i> {% trans "Delete Now" %}</a>
{% endif %}
{% if not snippet.is_single %}
<a class="btn snippet-diff-trigger" href="#snippet-diff"><i class="icon-search"></i> {% trans "Compare Snippets" %}</a>
{% if snippet.parent %}
<a class="btn snippet-diff-trigger" href="#snippet-diff"><i class="icon-search"></i> {% trans "Compare this Answer" %}</a>
{% endif %}
{% if snippet.expire_type != 3 %}
<a class="btn" href="{% url "snippet_details_raw" snippet.secret_id %}"><i class="icon-align-left"></i> {% trans "View Raw" %}</a>
@ -125,21 +99,15 @@ jQuery(function($) {
$(this).removeClass('snippet-reply-hidden');
});
var curLine = document.location.hash;
{% if snippet.parent %}
/* ------------------------------------------------------------------------
Diff Ajax Call
------------------------------------------------------------------------ */
var diffReq;
$('.snippet-diff-trigger').click(function(e) {
e.preventDefault();
$('#snippet-diff').slideDown('fast');
$('#snippet-diff form').submit();
});
$('#diffform').submit(function() {
var a = $('input[name="a"]:checked').val(),
b = $('input[name="b"]:checked').val();
function fetchDiff() {
var a = {{ snippet.parent.pk }},
b = {{ snippet.pk }};
window.location.hash = 'D' + a + ',' + b;
@ -156,23 +124,20 @@ jQuery(function($) {
}).complete(function() {
diffReq = null;
});
}
return false;
var diffReq;
$('.snippet-diff-trigger').click(function(e) {
e.preventDefault();
fetchDiff();
$('#snippet-diff').slideDown('fast');
});
var curLine = document.location.hash,
hashlist;
if (curLine.substring(0, 2) === '#D') {
hashlist = curLine.substring(2).split(',');
if (hashlist.length === 2) {
console.log(hashlist);
$('#diffform input[name="a"][value="' + hashlist[0] + '"]').prop('checked', true);
$('#diffform input[name="b"][value="' + hashlist[1] + '"]').prop('checked', true);
$('#snippet-diff').slideDown('fast');
$('#snippet-diff form').submit();
}
fetchDiff();
$('#snippet-diff').slideDown('fast');
}
{% endif %}
/* ------------------------------------------------------------------------
Line Highlighting
@ -201,7 +166,7 @@ jQuery(function($) {
});
/* ------------------------------------------------------------------------
Line Highlighting
Wordwrap
------------------------------------------------------------------------ */
$('#toggleWordwrap').click(function(e){
e.preventDefault();

View file

@ -2,7 +2,8 @@
<h4>
{% blocktrans with fileA.get_absolute_url as filea_url and fileB.get_absolute_url as fileb_url and fileA.id as filea_id and fileB.id as fileb_id %}
Diff between <a href="{{ filea_url }}">#{{ filea_id }}</a> and <a href="{{ fileb_url }}">#{{ fileb_id }}</a>
Difference between this answer <a href="{{ fileb_url }}">#{{ fileb_id }}</a>
and the parent snippet <a href="{{ filea_url }}">#{{ filea_id }}</a>
{% endblocktrans %}
</h4>

View file

@ -65,9 +65,6 @@ def snippet_details(request, snippet_id, template_name='dpaste/snippet_details.h
snippet.view_count += 1
snippet.save()
tree = snippet.get_root()
tree = tree.get_descendants(include_self=True)
new_snippet_initial = {
'content': snippet.content,
'lexer': snippet.lexer,
@ -92,7 +89,6 @@ def snippet_details(request, snippet_id, template_name='dpaste/snippet_details.h
'snippet': snippet,
'lexers': LEXER_LIST,
'lines': range(snippet.get_linecount()),
'tree': tree,
'wordwrap': snippet.lexer in LEXER_WORDWRAP and 'True' or 'False',
'gist': getattr(settings, 'DPASTE_ENABLE_GIST', True),
}

View file

@ -32,7 +32,6 @@ SETTINGS = {
'INSTALLED_APPS': [
'django.contrib.sessions',
'django.contrib.staticfiles',
'mptt',
'dpaste',
],
'MIDDLEWARE_CLASSES': (

View file

@ -50,7 +50,6 @@ setup(
include_package_data=True,
install_requires=[
'django>=1.8',
'django-mptt>=0.8.3',
'pygments>=1.6',
'requests>=2.0.0',
],