[Backport] Fixing memory leak on export related to timeline

remotes/origin/issue/4795/notification_even_they_are_disabled
Alejandro Alonso 2016-03-08 14:46:51 +01:00 committed by David Barragán Merino
parent b68935fa1d
commit 709bee710e
2 changed files with 17 additions and 8 deletions

View File

@ -43,7 +43,6 @@ from taiga.projects.wiki import models as wiki_models
from taiga.projects.history import models as history_models
from taiga.projects.attachments import models as attachments_models
from taiga.timeline import models as timeline_models
from taiga.timeline import service as timeline_service
from taiga.users import models as users_models
from taiga.projects.notifications import services as notifications_services
from taiga.projects.votes import services as votes_service
@ -674,12 +673,7 @@ class ProjectExportSerializer(WatcheableObjectModelSerializer):
issues = IssueExportSerializer(many=True, required=False)
wiki_links = WikiLinkExportSerializer(many=True, required=False)
wiki_pages = WikiPageExportSerializer(many=True, required=False)
timeline = serializers.SerializerMethodField("get_timeline")
class Meta:
model = projects_models.Project
exclude = ('id', 'creation_template', 'members')
def get_timeline(self, obj):
timeline_qs = timeline_service.get_project_timeline(obj)
return TimelineExportSerializer(timeline_qs, many=True).data

View File

@ -31,7 +31,7 @@ from django.core.files.storage import default_storage
from taiga.base.utils import json
from taiga.projects.history.services import make_key_from_model_object, take_snapshot
from taiga.timeline.service import build_project_namespace
from taiga.timeline.service import build_project_namespace, get_project_timeline
from taiga.projects.references import sequences as seq
from taiga.projects.references import models as refs
from taiga.projects.userstories.models import RolePoints
@ -132,7 +132,22 @@ def render_project(project, outfile, chunk_size = 8190):
value = field.field_to_native(project, field_name)
outfile.write('"{}": {}'.format(field_name, json.dumps(value)))
outfile.write('}\n')
# Generate the timeline
outfile.write(',\n"timeline": [\n')
first_timeline = True
for timeline_item in get_project_timeline(project).iterator():
# Avoid writing "," in the last element
if not first_timeline:
outfile.write(",\n")
else:
first_timeline = False
dumped_value = json.dumps(serializers.TimelineExportSerializer(timeline_item).data)
outfile.write(dumped_value)
outfile.flush()
gc.collect()
outfile.write(']}\n')
def store_project(data):