Remove now obsolete migrate_references django command.
parent
3584364e02
commit
421f8e2585
|
@ -1,171 +0,0 @@
|
|||
import re
|
||||
from collections import defaultdict
|
||||
|
||||
from django.core.management.base import BaseCommand, CommandError
|
||||
from django.core.paginator import Paginator
|
||||
from django.db.models.loading import get_model
|
||||
from django.db.models import signals
|
||||
from django.db import models
|
||||
from django.db import transaction as tx
|
||||
|
||||
from reversion import get_unique_for_object
|
||||
|
||||
from taiga.projects.references.models import make_reference
|
||||
|
||||
|
||||
class Command(BaseCommand):
|
||||
help = "Migrate old references to new references system."
|
||||
|
||||
def iter_queryset(self, queryset):
|
||||
paginator = Paginator(queryset, 20)
|
||||
for page_num in paginator.page_range:
|
||||
page = paginator.page(page_num)
|
||||
for element in page.object_list:
|
||||
yield element
|
||||
|
||||
def iter_object_versions(self, instance):
|
||||
revs = get_unique_for_object(instance)
|
||||
for rev in revs:
|
||||
yield rev
|
||||
|
||||
def __init__(self, *args, **kwargs):
|
||||
super().__init__(*args, **kwargs)
|
||||
self.refmap = defaultdict(lambda: {"us": {}, "task": {}, "issue": {},})
|
||||
|
||||
@tx.atomic
|
||||
def handle(self, *args, **options):
|
||||
self.disable_signals()
|
||||
self.process_userstories_refs()
|
||||
self.process_issues_refs()
|
||||
self.process_tasks_refs()
|
||||
|
||||
self.process_userstories_comments()
|
||||
self.process_issues_comments()
|
||||
self.process_tasks_comments()
|
||||
self.process_wikipages()
|
||||
|
||||
def replace_references_on_text(self, ppk, text):
|
||||
matches = re.findall(r"(\:((?:us|issue|task))\:(\d+))", text)
|
||||
for val, t, ref in matches:
|
||||
ref = int(ref)
|
||||
if ref not in self.refmap[ppk][t]:
|
||||
continue
|
||||
|
||||
newref = self.refmap[ppk][t][ref]
|
||||
text = text.replace(val, ":{}:{}".format(t, newref))
|
||||
|
||||
matches = re.findall(r"(((?:US|Issue|Task)) \#(\d+))", text)
|
||||
for val, t, ref in matches:
|
||||
ref = int(ref)
|
||||
if ref not in self.refmap[ppk][t.lower()]:
|
||||
continue
|
||||
|
||||
newref = self.refmap[ppk][t.lower()][ref]
|
||||
text = text.replace(val, "{} #{}".format(t, newref))
|
||||
|
||||
return text
|
||||
|
||||
def disable_signals(self):
|
||||
print(".. Disabling signals.")
|
||||
issue_model = get_model("issues", "Issue")
|
||||
us_model = get_model("userstories", "UserStory")
|
||||
task_model = get_model("tasks", "Task")
|
||||
project_model = get_model("projects", "Project")
|
||||
|
||||
models.signals.post_save.disconnect(dispatch_uid="refus", sender=us_model)
|
||||
models.signals.post_save.disconnect(dispatch_uid="refissue", sender=issue_model)
|
||||
models.signals.post_save.disconnect(dispatch_uid="reftask", sender=task_model)
|
||||
models.signals.post_save.disconnect(dispatch_uid="refproj", sender=project_model)
|
||||
|
||||
def process_userstories_comments(self):
|
||||
print(".. Processing userstory comments.")
|
||||
model_cls = get_model("userstories", "UserStory")
|
||||
|
||||
for item in self.iter_queryset(model_cls.objects.all()):
|
||||
item.description = self.replace_references_on_text(item.project_id, item.description)
|
||||
item.blocked_note = self.replace_references_on_text(item.project_id, item.blocked_note)
|
||||
item.save()
|
||||
|
||||
for rev in self.iter_object_versions(item):
|
||||
rev.revision.comment = self.replace_references_on_text(item.project_id, rev.revision.comment)
|
||||
rev.revision.save()
|
||||
rev.save()
|
||||
|
||||
def process_issues_comments(self):
|
||||
print(".. Processing issues comments.")
|
||||
model_cls = get_model("issues", "Issue")
|
||||
|
||||
for item in self.iter_queryset(model_cls.objects.all()):
|
||||
item.description = self.replace_references_on_text(item.project_id, item.description)
|
||||
item.blocked_note = self.replace_references_on_text(item.project_id, item.blocked_note)
|
||||
item.save()
|
||||
|
||||
for rev in self.iter_object_versions(item):
|
||||
rev.revision.comment = self.replace_references_on_text(item.project_id, rev.revision.comment)
|
||||
rev.revision.save()
|
||||
rev.save()
|
||||
|
||||
def process_tasks_comments(self):
|
||||
print(".. Processing task comments.")
|
||||
model_cls = get_model("tasks", "Task")
|
||||
|
||||
for item in self.iter_queryset(model_cls.objects.all()):
|
||||
item.description = self.replace_references_on_text(item.project_id, item.description)
|
||||
item.blocked_note = self.replace_references_on_text(item.project_id, item.blocked_note)
|
||||
item.save()
|
||||
|
||||
for rev in self.iter_object_versions(item):
|
||||
rev.revision.comment = self.replace_references_on_text(item.project_id, rev.revision.comment)
|
||||
rev.revision.save()
|
||||
rev.save()
|
||||
|
||||
def process_wikipages(self):
|
||||
print(".. Processing wikipages.")
|
||||
model_cls = get_model("wiki", "WikiPage")
|
||||
|
||||
for item in self.iter_queryset(model_cls.objects.all()):
|
||||
item.content = self.replace_references_on_text(item.project_id, item.content)
|
||||
item.save()
|
||||
|
||||
for rev in self.iter_object_versions(item):
|
||||
rev.revision.comment = self.replace_references_on_text(item.project_id, rev.revision.comment)
|
||||
rev.revision.save()
|
||||
rev.save()
|
||||
|
||||
def process_userstories_refs(self):
|
||||
print(".. Processing userstories.")
|
||||
model_cls = get_model("userstories", "UserStory")
|
||||
queryset = model_cls.objects.only("ref")
|
||||
|
||||
for item in self.iter_queryset(queryset):
|
||||
refval, _ = make_reference(item, item.project, create=True)
|
||||
print("process us {0}: {1} -> {2}".format(item.pk, item.ref, refval))
|
||||
self.refmap[item.project_id]["us"][item.ref] = refval
|
||||
item.ref = refval
|
||||
item.save(update_fields=["ref"])
|
||||
|
||||
def process_tasks_refs(self):
|
||||
print(".. Processing tasks.")
|
||||
model_cls = get_model("tasks", "Task")
|
||||
queryset = model_cls.objects.only("ref")
|
||||
|
||||
for item in self.iter_queryset(queryset):
|
||||
refval, _ = make_reference(item, item.project, create=True)
|
||||
print("process task {0}: {1} -> {2}".format(item.pk, item.ref, refval))
|
||||
self.refmap[item.project_id]["task"][item.ref] = refval
|
||||
item.ref = refval
|
||||
item.save(update_fields=["ref"])
|
||||
|
||||
def process_issues_refs(self):
|
||||
print(".. Processing issues.")
|
||||
model_cls = get_model("issues", "Issue")
|
||||
queryset = model_cls.objects.all()
|
||||
|
||||
for item in self.iter_queryset(queryset):
|
||||
refval, _ = make_reference(item, item.project, create=True)
|
||||
print("process issue {0}: {1} -> {2}".format(item.pk, item.ref, refval))
|
||||
self.refmap[item.project_id]["issue"][item.ref] = refval
|
||||
item.ref = refval
|
||||
item.save()
|
||||
|
||||
|
Loading…
Reference in New Issue