[Backport] Fixing memory leak on export related to timeline
parent
b68935fa1d
commit
709bee710e
|
@ -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.history import models as history_models
|
||||||
from taiga.projects.attachments import models as attachments_models
|
from taiga.projects.attachments import models as attachments_models
|
||||||
from taiga.timeline import models as timeline_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.users import models as users_models
|
||||||
from taiga.projects.notifications import services as notifications_services
|
from taiga.projects.notifications import services as notifications_services
|
||||||
from taiga.projects.votes import services as votes_service
|
from taiga.projects.votes import services as votes_service
|
||||||
|
@ -674,12 +673,7 @@ class ProjectExportSerializer(WatcheableObjectModelSerializer):
|
||||||
issues = IssueExportSerializer(many=True, required=False)
|
issues = IssueExportSerializer(many=True, required=False)
|
||||||
wiki_links = WikiLinkExportSerializer(many=True, required=False)
|
wiki_links = WikiLinkExportSerializer(many=True, required=False)
|
||||||
wiki_pages = WikiPageExportSerializer(many=True, required=False)
|
wiki_pages = WikiPageExportSerializer(many=True, required=False)
|
||||||
timeline = serializers.SerializerMethodField("get_timeline")
|
|
||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
model = projects_models.Project
|
model = projects_models.Project
|
||||||
exclude = ('id', 'creation_template', 'members')
|
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
|
|
||||||
|
|
|
@ -31,7 +31,7 @@ from django.core.files.storage import default_storage
|
||||||
|
|
||||||
from taiga.base.utils import json
|
from taiga.base.utils import json
|
||||||
from taiga.projects.history.services import make_key_from_model_object, take_snapshot
|
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 sequences as seq
|
||||||
from taiga.projects.references import models as refs
|
from taiga.projects.references import models as refs
|
||||||
from taiga.projects.userstories.models import RolePoints
|
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)
|
value = field.field_to_native(project, field_name)
|
||||||
outfile.write('"{}": {}'.format(field_name, json.dumps(value)))
|
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):
|
def store_project(data):
|
||||||
|
|
Loading…
Reference in New Issue