taiga-back/greenmine/scrum/management/commands/sample_data.py

200 lines
6.6 KiB
Python

# -*- coding: utf-8 -*-
import random
import datetime
from sampledatahelper.helper import SampleDataHelper
from django.core.management.base import BaseCommand
from django.db import transaction
from django.utils.timezone import now
from django.contrib.webdesign import lorem_ipsum
from greenmine.base.models import User, Role
from greenmine.scrum.models import *
from greenmine.questions.models import *
subjects = [
"Fixing templates for Django 1.2.",
"get_actions() does not check for 'delete_selected' in actions",
"Experimental: modular file types",
"Add setting to allow regular users to create folders at the root level.",
"add tests for bulk operations",
"create testsuite with matrix builds",
"Lighttpd support",
"Lighttpd x-sendfile support",
"Added file copying and processing of images (resizing)",
"Exception is thrown if trying to add a folder with existing name",
"Feature/improved image admin",
"Support for bulk actions",
]
class Command(BaseCommand):
sd = SampleDataHelper(seed=12345678901)
@transaction.commit_on_success
def handle(self, *args, **options):
self.users = [User.objects.get(is_superuser=True)]
for x in range(10):
self.users.append(self.create_user(x))
role = Role.objects.all()[0]
# projects
for x in xrange(3):
project = self.create_project(x)
for user in self.users:
Membership.objects.create(project=project, role=role, user=user)
start_date = now() - datetime.timedelta(35)
# create random milestones
for y in xrange(self.sd.int(1, 5)):
end_date = start_date + datetime.timedelta(15)
milestone = self.create_milestone(project, start_date, end_date)
# create uss asociated to milestones
for z in xrange(self.sd.int(3, 7)):
us = self.create_us(project, milestone)
for w in xrange(self.sd.int(0,6)):
if start_date <= now() and end_date <= now():
task = self.create_task(project, milestone, us, start_date, end_date, closed=True)
elif start_date <= now() and end_date >= now():
task = self.create_task(project, milestone, us, start_date, now())
else:
# No task on not initiated sprints
pass
start_date = end_date
# created unassociated uss.
for y in xrange(self.sd.int(8,15)):
us = self.create_us(project)
# create bugs.
for y in xrange(self.sd.int(15,25)):
bug = self.create_bug(project)
# create questions.
for y in xrange(self.sd.int(15,25)):
question = self.create_question(project)
def create_question(self, project):
question = Question.objects.create(
project=project,
subject=self.sd.words(1,5),
content=self.sd.paragraph(),
owner=project.owner,
status=self.sd.db_object_from_queryset(QuestionStatus.objects.filter(project=project)),
tags=[],
)
for tag in self.sd.words(1,5).split(" "):
question.tags.append(tag)
question.save()
def create_bug(self, project):
bug = Issue.objects.create(
project=project,
subject=self.sd.words(1, 5),
description=self.sd.paragraph(),
owner=project.owner,
severity=self.sd.db_object_from_queryset(Severity.objects.filter(project=project)),
status=self.sd.db_object_from_queryset(IssueStatus.objects.filter(project=project)),
priority=self.sd.db_object_from_queryset(Priority.objects.filter(project=project)),
type=self.sd.db_object_from_queryset(IssueType.objects.filter(project=project)),
tags=[],
)
for tag in self.sd.words(1, 5).split(" "):
bug.tags.append(tag)
bug.save()
return bug
def create_task(self, project, milestone, us, min_date, max_date, closed=False):
task = Task(
subject="Task {0}".format(self.sd.words(3,4)),
description=self.sd.paragraph(),
project=project,
owner=self.sd.choice(self.users),
milestone=milestone,
user_story=us,
finished_date=None,
)
if closed:
task.status = TaskStatus.objects.get(project=project, order=4)
else:
task.status = self.sd.db_object_from_queryset(TaskStatus.objects.filter(project=project))
if task.status.is_closed:
task.finished_date = self.sd.datetime_between(min_date, max_date)
task.save()
return task
def create_us(self, project, milestone=None):
us = UserStory(
subject=self.sd.words(4,9),
project=project,
owner=self.sd.choice(self.users),
description=self.sd.paragraph(),
milestone=milestone,
status=UserStoryStatus.objects.get(project=project, order=2),
points=self.sd.db_object_from_queryset(Points.objects.filter(project=project)),
tags=[]
)
for tag in self.sd.words().split(" "):
us.tags.append(tag)
us.save()
return us
def create_milestone(self, project, start_date, end_date):
milestone = Milestone(
project=project,
name='Sprint {0}'.format(start_date),
owner=project.owner,
created_date=start_date,
modified_date=start_date,
estimated_start=start_date,
estimated_finish=end_date,
order=10
)
milestone.save()
return milestone
def create_project(self, counter):
# create project
project = Project(
name='Project Example 1 {0}'.format(counter),
description='Project example {0} description'.format(counter),
owner=random.choice(self.users),
public=True,
total_story_points=60,
sprints=4
)
project.save()
return project
def create_user(self, counter):
user = User.objects.create(
username='user-{0}-{1}'.format(counter, self.sd.word()),
first_name=self.sd.name('es'),
last_name=self.sd.surname('es'),
email=self.sd.email(),
token=''.join(random.sample('abcdef0123456789', 10)),
)
user.set_password('user{0}'.format(counter))
user.save()
return user