示例#1
0
class Command(BaseCommand):
    sd = SampleDataHelper(seed=12345678901)

    @transaction.atomic
    def handle(self, *args, **options):

        self.users = [User.objects.get(is_superuser=True)]

        # create users
        if BASE_USERS:
            for username, full_name, email in BASE_USERS:
                self.users.append(self.create_user(username=username, full_name=full_name, email=email))
        else:
            for x in range(NUM_USERS):
                self.users.append(self.create_user(counter=x))


    def create_user(self, counter=None, username=None, full_name=None, email=None):
        counter = counter or self.sd.int()
        username = username or "user{0}".format(counter)
        full_name = full_name or "{} {}".format(self.sd.name('es'), self.sd.surname('es', number=1))
        email = email or "user{0}@tweets2cash.demo".format(counter)

        user = User.objects.create(username=username,
                                   full_name=full_name,
                                   email=email,
                                   token=self.sd.hex_chars(10,10)))

        user.set_password('123123')
        user.save()

        return user
示例#2
0
class Command(BaseCommand):
    args = ''
    help = 'Example data generator'
    sd = SampleDataHelper(seed=12345678901)

    #this function populate's the user and activity_period table in databse
    def generate_mymodel_data(self, instances):
        choices = [
            "America/Los_Angeles", "Belgium/Brussels", "Cambodia/Phnom Penh",
            "Denmark/Copenhagen", "Fiji/Suva", "India/Kolkata", "India/Ranchi",
            "China/Wuhan", "Russia/Moscow"
        ]

        user_instance = User()
        for x in range(1, instances):
            instance = User.objects.create(
                uid=self.sd.hex_chars(min_chars=9, max_chars=9),
                real_name=self.sd.fullname(locale=None, as_list=False),
                tz=self.sd.choice(choices),
            )

        for outer_loop in range(1, instances):
            for inner_loop in range(3):
                activeity_period = Activity_Periods.objects.create(
                    start_time=self.sd.datetime(begin=-1440, end=1440),
                    end_time=self.sd.datetime(begin=-1440, end=1440),
                    user=User.objects.get(id=outer_loop))
#this function is responsible for running the above function and this fun get's executed while running
#the <python mange.py dummydata> dummydata is this module name

    def handle(self, *args, **options):
        print("Generating MyModel data")
        self.generate_mymodel_data(51)
示例#3
0
class Register(object):
    fields = {}
    ignored_fields = []
    _instance = None
    sd = SampleDataHelper()

    def __new__(cls, *args, **kwargs):
        if not cls._instance:
            cls._instance = super(Register, cls).__new__(cls, *args, **kwargs)
        return cls._instance

    def register(self, field_class, handler_class):
        self.fields[field_class] = handler_class

    def ignore(self, field_class):
        self.ignored_fields.append(field_class)

    def get_handler(self, field_instance):
        if field_instance.__class__ in self.ignored_fields:
            return None
        handler = self.fields.get(field_instance.__class__, None)
        if handler:
            return handler(self.sd, field_instance)
        return None
示例#4
0
class Command(BaseCommand):
    sd = SampleDataHelper(seed=12345678901)

    #@transaction.atomic
    def handle(self, *args, **options):
        # Prevent events emission when sample data is running
        disconnect_events_signals()

        self.users = [User.objects.get(is_superuser=True)]

        # create users
        if BASE_USERS:
            for username, full_name, email in BASE_USERS:
                self.users.append(
                    self.create_user(username=username,
                                     full_name=full_name,
                                     email=email))
        else:
            for x in range(NUM_USERS):
                self.users.append(self.create_user(counter=x))

        # create project
        projects_range = range(NUM_PROJECTS + NUM_EMPTY_PROJECTS +
                               NUM_BLOCKED_PROJECTS)
        empty_projects_range = range(NUM_PROJECTS,
                                     NUM_PROJECTS + NUM_EMPTY_PROJECTS)
        blocked_projects_range = range(
            NUM_PROJECTS + NUM_EMPTY_PROJECTS,
            NUM_PROJECTS + NUM_EMPTY_PROJECTS + NUM_BLOCKED_PROJECTS)

        for x in projects_range:
            project = self.create_project(
                x,
                is_private=x in [2, 4],
                blocked_code=BLOCKED_BY_STAFF
                if x in (blocked_projects_range) else None)

            # added memberships
            computable_project_roles = set()
            for user in self.users:
                if user == project.owner:
                    continue

                role = self.sd.db_object_from_queryset(project.roles.all())

                Membership.objects.create(email=user.email,
                                          project=project,
                                          role=role,
                                          is_admin=self.sd.boolean(),
                                          user=user)

                if role.computable:
                    computable_project_roles.add(role)

            # Delete a random member so all the projects doesn't have the same team
            Membership.objects.filter(project=project).exclude(
                user=project.owner).order_by("?").first().delete()

            # added invitations
            for i in range(NUM_INVITATIONS):
                role = self.sd.db_object_from_queryset(project.roles.all())

                Membership.objects.create(email=self.sd.email(),
                                          project=project,
                                          role=role,
                                          is_admin=self.sd.boolean(),
                                          token=self.sd.hex_chars(10, 10))

                if role.computable:
                    computable_project_roles.add(role)

            # If the project isn't empty
            if x not in empty_projects_range:
                # added custom attributes
                names = set([self.sd.words(1, 3) for i in range(1, 6)])
                for name in names:
                    EpicCustomAttribute.objects.create(
                        name=name,
                        description=self.sd.words(3, 12),
                        type=self.sd.choice(TYPES_CHOICES)[0],
                        project=project,
                        order=i)
                names = set([self.sd.words(1, 3) for i in range(1, 6)])
                for name in names:
                    UserStoryCustomAttribute.objects.create(
                        name=name,
                        description=self.sd.words(3, 12),
                        type=self.sd.choice(TYPES_CHOICES)[0],
                        project=project,
                        order=i)
                names = set([self.sd.words(1, 3) for i in range(1, 6)])
                for name in names:
                    TaskCustomAttribute.objects.create(
                        name=name,
                        description=self.sd.words(3, 12),
                        type=self.sd.choice(TYPES_CHOICES)[0],
                        project=project,
                        order=i)
                names = set([self.sd.words(1, 3) for i in range(1, 6)])
                for name in names:
                    IssueCustomAttribute.objects.create(
                        name=name,
                        description=self.sd.words(3, 12),
                        type=self.sd.choice(TYPES_CHOICES)[0],
                        project=project,
                        order=i)

                start_date = now() - datetime.timedelta(55)

                # create milestones
                for y in range(self.sd.int(*NUM_MILESTONES)):
                    end_date = start_date + datetime.timedelta(15)
                    milestone = self.create_milestone(project, start_date,
                                                      end_date)

                    # create uss asociated to milestones
                    for z in range(self.sd.int(*NUM_USS)):
                        us = self.create_us(project, milestone,
                                            computable_project_roles)

                        # create tasks
                        rang = NUM_TASKS_FINISHED if start_date <= now(
                        ) and end_date <= now() else NUM_TASKS
                        for w in range(self.sd.int(*rang)):
                            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 milestones
                                pass

                    start_date = end_date

                # created unassociated uss.
                for y in range(self.sd.int(*NUM_USS_BACK)):
                    us = self.create_us(project, None,
                                        computable_project_roles)

                # create bugs.
                for y in range(self.sd.int(*NUM_ISSUES)):
                    bug = self.create_bug(project)

                # create a wiki pages and wiki links
                wiki_page = self.create_wiki_page(project, "home")

                for y in range(self.sd.int(*NUM_WIKI_LINKS)):
                    wiki_link = self.create_wiki_link(project)
                    if self.sd.boolean():
                        self.create_wiki_page(project, wiki_link.href)

                # create epics
                for y in range(self.sd.int(*NUM_EPICS)):
                    epic = self.create_epic(project)

            project.refresh_from_db()

            # Set color for some tags:
            for tag in project.tags_colors:
                if self.sd.boolean():
                    tag[1] = self.generate_color(tag[0])

            # Set a value to total_story_points to show the deadline in the backlog
            project_stats = get_stats_for_project(project)
            defined_points = project_stats["defined_points"]
            project.total_story_points = int(defined_points *
                                             self.sd.int(5, 12) / 10)
            project.save()

            self.create_likes(project)

    def create_attachment(self, obj, order):
        attached_file = self.sd.file_from_directory(*ATTACHMENT_SAMPLE_DATA)
        membership = self.sd.db_object_from_queryset(
            obj.project.memberships.filter(user__isnull=False))
        attachment = Attachment.objects.create(
            project=obj.project,
            name=path.basename(attached_file.name),
            size=attached_file.size,
            content_object=obj,
            order=order,
            owner=membership.user,
            is_deprecated=self.sd.boolean(),
            description=self.sd.words(3, 12),
            attached_file=attached_file)
        return attachment

    def create_wiki_link(self, project, title=None):
        wiki_link = WikiLink.objects.create(project=project,
                                            title=title or self.sd.words(1, 3))
        return wiki_link

    def create_wiki_page(self, project, slug):
        wiki_page = WikiPage.objects.create(
            project=project,
            slug=slug,
            content=self.sd.paragraphs(3, 15),
            owner=self.sd.db_object_from_queryset(
                project.memberships.filter(user__isnull=False)).user)

        for i in range(self.sd.int(*NUM_ATTACHMENTS)):
            attachment = self.create_attachment(wiki_page, i + 1)

        take_snapshot(wiki_page, user=wiki_page.owner)

        # Add history entry
        wiki_page.content = self.sd.paragraphs(3, 15)
        wiki_page.save()
        take_snapshot(wiki_page,
                      comment=self.sd.paragraph(),
                      user=wiki_page.owner)

        return wiki_page

    def get_custom_attributes_value(self, type):
        if type == TEXT_TYPE:
            return self.sd.words(1, 12)
        if type == MULTILINE_TYPE:
            return self.sd.paragraphs(2, 4)
        if type == DATE_TYPE:
            return self.sd.future_date(min_distance=0, max_distance=365)
        if type == URL_TYPE:
            return self.sd.choice(URL_CHOICES)
        return None

    def create_bug(self, project):
        bug = Issue.objects.create(
            project=project,
            subject=self.sd.choice(SUBJECT_CHOICES),
            description=self.sd.paragraph(),
            owner=self.sd.db_object_from_queryset(
                project.memberships.filter(user__isnull=False)).user,
            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=self.sd.words(1, 10).split(" "))

        bug.save()

        custom_attributes_values = {
            str(ca.id): self.get_custom_attributes_value(ca.type)
            for ca in project.issuecustomattributes.all().order_by('id')
            if self.sd.boolean()
        }
        if custom_attributes_values:
            bug.custom_attributes_values.attributes_values = custom_attributes_values
            bug.custom_attributes_values.save()

        for i in range(self.sd.int(*NUM_ATTACHMENTS)):
            attachment = self.create_attachment(bug, i + 1)

        if bug.status.order != 1:
            bug.assigned_to = self.sd.db_object_from_queryset(
                project.memberships.filter(user__isnull=False)).user
            bug.save()

        take_snapshot(bug, user=bug.owner)

        # Add history entry
        bug.status = self.sd.db_object_from_queryset(
            IssueStatus.objects.filter(project=project))
        bug.save()
        take_snapshot(bug, comment=self.sd.paragraph(), user=bug.owner)

        self.create_votes(bug)
        self.create_watchers(bug)

        return bug

    def create_task(self,
                    project,
                    milestone,
                    us,
                    min_date,
                    max_date,
                    closed=False):
        task = Task(subject=self.sd.choice(SUBJECT_CHOICES),
                    description=self.sd.paragraph(),
                    project=project,
                    owner=self.sd.db_object_from_queryset(
                        project.memberships.filter(user__isnull=False)).user,
                    milestone=milestone,
                    user_story=us,
                    finished_date=None,
                    assigned_to=self.sd.db_object_from_queryset(
                        project.memberships.filter(user__isnull=False)).user,
                    tags=self.sd.words(1, 10).split(" "))

        if closed:
            task.status = project.task_statuses.get(order=4)
        else:
            task.status = self.sd.db_object_from_queryset(
                project.task_statuses.all())

        if task.status.is_closed:
            task.finished_date = self.sd.datetime_between(min_date, max_date)

        task.save()

        custom_attributes_values = {
            str(ca.id): self.get_custom_attributes_value(ca.type)
            for ca in project.taskcustomattributes.all().order_by('id')
            if self.sd.boolean()
        }
        if custom_attributes_values:
            task.custom_attributes_values.attributes_values = custom_attributes_values
            task.custom_attributes_values.save()

        for i in range(self.sd.int(*NUM_ATTACHMENTS)):
            attachment = self.create_attachment(task, i + 1)

        take_snapshot(task, user=task.owner)

        # Add history entry
        task.status = self.sd.db_object_from_queryset(
            project.task_statuses.all())
        task.save()
        take_snapshot(task, comment=self.sd.paragraph(), user=task.owner)

        self.create_votes(task)
        self.create_watchers(task)

        return task

    def create_us(self, project, milestone=None, computable_project_roles=[]):
        us = UserStory.objects.create(
            subject=self.sd.choice(SUBJECT_CHOICES),
            project=project,
            owner=self.sd.db_object_from_queryset(
                project.memberships.filter(user__isnull=False)).user,
            description=self.sd.paragraph(),
            milestone=milestone,
            status=self.sd.db_object_from_queryset(
                project.us_statuses.filter(is_closed=False)),
            tags=self.sd.words(1, 3).split(" "))

        for role_points in us.role_points.filter(
                role__in=computable_project_roles):
            if milestone:
                role_points.points = self.sd.db_object_from_queryset(
                    us.project.points.exclude(value=None))
            else:
                role_points.points = self.sd.db_object_from_queryset(
                    us.project.points.all())

            role_points.save()

        us.save()

        custom_attributes_values = {
            str(ca.id): self.get_custom_attributes_value(ca.type)
            for ca in project.userstorycustomattributes.all().order_by('id')
            if self.sd.boolean()
        }
        if custom_attributes_values:
            us.custom_attributes_values.attributes_values = custom_attributes_values
            us.custom_attributes_values.save()

        for i in range(self.sd.int(*NUM_ATTACHMENTS)):
            attachment = self.create_attachment(us, i + 1)

        if self.sd.choice([True, True, False, True, True]):
            us.assigned_to = self.sd.db_object_from_queryset(
                project.memberships.filter(user__isnull=False)).user
            us.save()

        take_snapshot(us, user=us.owner)

        # Add history entry
        us.status = self.sd.db_object_from_queryset(
            project.us_statuses.filter(is_closed=False))
        us.save()
        take_snapshot(us, comment=self.sd.paragraph(), user=us.owner)

        self.create_votes(us)
        self.create_watchers(us)

        return us

    def create_milestone(self, project, start_date, end_date):
        milestone = Milestone.objects.create(
            project=project,
            name='Sprint {0}-{1}-{2}'.format(start_date.year, start_date.month,
                                             start_date.day),
            owner=self.sd.db_object_from_queryset(
                project.memberships.filter(user__isnull=False)).user,
            created_date=start_date,
            modified_date=start_date,
            estimated_start=start_date,
            estimated_finish=end_date,
            order=10)
        take_snapshot(milestone, user=milestone.owner)

        return milestone

    def create_epic(self, project):
        epic = Epic.objects.create(
            subject=self.sd.choice(SUBJECT_CHOICES),
            project=project,
            owner=self.sd.db_object_from_queryset(
                project.memberships.filter(user__isnull=False)).user,
            description=self.sd.paragraph(),
            status=self.sd.db_object_from_queryset(
                project.epic_statuses.filter(is_closed=False)),
            tags=self.sd.words(1, 3).split(" "))
        epic.save()

        custom_attributes_values = {
            str(ca.id): self.get_custom_attributes_value(ca.type)
            for ca in project.epiccustomattributes.all().order_by("id")
            if self.sd.boolean()
        }
        if custom_attributes_values:
            epic.custom_attributes_values.attributes_values = custom_attributes_values
            epic.custom_attributes_values.save()

        for i in range(self.sd.int(*NUM_ATTACHMENTS)):
            attachment = self.create_attachment(epic, i + 1)

        if self.sd.choice([True, True, False, True, True]):
            epic.assigned_to = self.sd.db_object_from_queryset(
                project.memberships.filter(user__isnull=False)).user
            epic.save()

        take_snapshot(epic, user=epic.owner)

        # Add history entry
        epic.status = self.sd.db_object_from_queryset(
            project.epic_statuses.filter(is_closed=False))
        epic.save()
        take_snapshot(epic, comment=self.sd.paragraph(), user=epic.owner)

        self.create_votes(epic)
        self.create_watchers(epic)

        if self.sd.choice([True, True, False, True, True]):
            filters = {}
            if self.sd.choice([True, True, False, True, True]):
                filters = {"project": epic.project}
            n = self.sd.choice(list(range(self.sd.int(*NUM_USS_EPICS))))
            user_stories = UserStory.objects.filter(
                **filters).order_by("?")[:n]
            for idx, us in enumerate(list(user_stories)):
                RelatedUserStory.objects.create(epic=epic,
                                                user_story=us,
                                                order=idx + 1)

        # Add history entry
        take_snapshot(epic, user=epic.owner)

        # Add history entry
        epic.status = self.sd.db_object_from_queryset(
            project.epic_statuses.filter(is_closed=False))
        epic.save()
        take_snapshot(epic, comment=self.sd.paragraph(), user=epic.owner)

        return epic

    def create_project(self, counter, is_private=None, blocked_code=None):
        if is_private is None:
            is_private = self.sd.boolean()

        anon_permissions = not is_private and list(
            map(lambda perm: perm[0], ANON_PERMISSIONS)) or []
        public_permissions = not is_private and list(
            map(lambda perm: perm[0], ANON_PERMISSIONS)) or []
        project = Project.objects.create(
            slug='project-%s' % (counter),
            name='Project Example {0}'.format(counter),
            description='Project example {0} description'.format(counter),
            owner=self.sd.choice(self.users),
            is_private=is_private,
            anon_permissions=anon_permissions,
            public_permissions=public_permissions,
            total_story_points=self.sd.int(600, 3000),
            total_milestones=self.sd.int(5, 10),
            tags=self.sd.words(1, 10).split(" "),
            blocked_code=blocked_code)

        project.is_looking_for_people = counter in LOOKING_FOR_PEOPLE_PROJECTS_POSITIONS
        if project.is_looking_for_people:
            project.looking_for_people_note = self.sd.short_sentence()
        project.is_featured = counter in FEATURED_PROJECTS_POSITIONS
        project.is_kanban_activated = True
        project.is_epics_activated = True
        project.save()
        take_snapshot(project, user=project.owner)

        self.create_likes(project)
        self.create_watchers(project, NotifyLevel.involved)

        return project

    def create_user(self,
                    counter=None,
                    username=None,
                    full_name=None,
                    email=None):
        counter = counter or self.sd.int()
        username = username or "user{0}".format(counter)
        full_name = full_name or "{} {}".format(
            self.sd.name('es'), self.sd.surname('es', number=1))
        email = email or "user{0}@taigaio.demo".format(counter)

        user = User.objects.create(username=username,
                                   full_name=full_name,
                                   email=email,
                                   token=self.sd.hex_chars(10, 10),
                                   color=self.sd.choice(COLOR_CHOICES))

        user.set_password('123123')
        user.save()

        return user

    def create_votes(self, obj):
        for i in range(self.sd.int(*NUM_VOTES)):
            user = self.sd.db_object_from_queryset(User.objects.all())
            add_vote(obj, user)

    def create_likes(self, obj):
        for i in range(self.sd.int(*NUM_LIKES)):
            user = self.sd.db_object_from_queryset(User.objects.all())
            add_like(obj, user)

    def create_watchers(self, obj, notify_level=None):
        for i in range(self.sd.int(*NUM_WATCHERS)):
            user = self.sd.db_object_from_queryset(User.objects.all())
            if not notify_level:
                obj.add_watcher(user)
            else:
                obj.add_watcher(user, notify_level)

    def generate_color(self, tag):
        color = sha1(tag.encode("utf-8")).hexdigest()[0:6]
        return "#{}".format(color)
示例#5
0
class Command(BaseCommand):
    sd = SampleDataHelper(seed=12345678901)

    @transaction.atomic
    def handle(self, *args, **options):
        # Prevent events emission when sample data is running
        disconnect_events_signals()

        self.users = [User.objects.get(is_superuser=True)]

        # create users
        if BASE_USERS:
            for username, full_name, email in BASE_USERS:
                self.users.append(self.create_user(username=username, full_name=full_name, email=email))
        else:
            for x in range(NUM_USERS):
                self.users.append(self.create_user(counter=x))

        # create project
        for x in range(NUM_PROJECTS + NUM_EMPTY_PROJECTS):
            project = self.create_project(x)

            # added memberships
            computable_project_roles = set()
            for user in self.users:
                if user == project.owner:
                    continue

                role = self.sd.db_object_from_queryset(project.roles.all())

                Membership.objects.create(email=user.email,
                                          project=project,
                                          role=role,
                                          is_owner=self.sd.boolean(),
                                          user=user)

                if role.computable:
                    computable_project_roles.add(role)

            # added invitations
            for i in range(NUM_INVITATIONS):
                role = self.sd.db_object_from_queryset(project.roles.all())

                Membership.objects.create(email=self.sd.email(),
                                          project=project,
                                          role=role,
                                          is_owner=self.sd.boolean(),
                                          token=''.join(random.sample('abcdef0123456789', 10)))

                if role.computable:
                    computable_project_roles.add(role)

            # added custom attributes
            if self.sd.boolean:
                for i in range(1, 4):
                    UserStoryCustomAttribute.objects.create(name=self.sd.words(1, 3),
                                                            description=self.sd.words(3, 12),
                                                            project=project,
                                                            order=i)
            if self.sd.boolean:
                for i in range(1, 4):
                    TaskCustomAttribute.objects.create(name=self.sd.words(1, 3),
                                                       description=self.sd.words(3, 12),
                                                       project=project,
                                                       order=i)
            if self.sd.boolean:
                for i in range(1, 4):
                    IssueCustomAttribute.objects.create(name=self.sd.words(1, 3),
                                                        description=self.sd.words(3, 12),
                                                        project=project,
                                                        order=i)


            if x < NUM_PROJECTS:
                start_date = now() - datetime.timedelta(55)

                # create milestones
                for y in range(self.sd.int(*NUM_MILESTONES)):
                    end_date = start_date + datetime.timedelta(15)
                    milestone = self.create_milestone(project, start_date, end_date)

                    # create uss asociated to milestones
                    for z in range(self.sd.int(*NUM_USS)):
                        us = self.create_us(project, milestone, computable_project_roles)

                        # create tasks
                        rang = NUM_TASKS_FINISHED if start_date <= now() and end_date <= now() else NUM_TASKS
                        for w in range(self.sd.int(*rang)):
                            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 milestones
                                pass

                    start_date = end_date

                # created unassociated uss.
                for y in range(self.sd.int(*NUM_USS_BACK)):
                    us = self.create_us(project, None, computable_project_roles)

                # create bugs.
                for y in range(self.sd.int(*NUM_ISSUES)):
                    bug = self.create_bug(project)

                # create a wiki page
                wiki_page = self.create_wiki(project, "home")

            # Set a value to total_story_points to show the deadline in the backlog
            defined_points = sum(project.defined_points.values())
            project.total_story_points = int(defined_points * self.sd.int(5,12) / 10)
            project.save()


    def create_attachment(self, obj, order):
        attached_file = self.sd.file_from_directory(*ATTACHMENT_SAMPLE_DATA)
        membership = self.sd.db_object_from_queryset(obj.project.memberships
                                                     .filter(user__isnull=False))
        attachment = Attachment.objects.create(project=obj.project,
                                               name=path.basename(attached_file.name),
                                               size=attached_file.size,
                                               content_object=obj,
                                               order=order,
                                               owner=membership.user,
                                               is_deprecated=self.sd.boolean(),
                                               description=self.sd.words(3, 12),
                                               attached_file=attached_file)
        return attachment

    def create_wiki(self, project, slug):
        wiki_page = WikiPage.objects.create(project=project,
                                            slug=slug,
                                            content=self.sd.paragraphs(3,15),
                                            owner=self.sd.db_object_from_queryset(
                                                    project.memberships.filter(user__isnull=False)).user)

        for i in range(self.sd.int(*NUM_ATTACHMENTS)):
            attachment = self.create_attachment(wiki_page, i+1)

        take_snapshot(wiki_page,
                      comment=self.sd.paragraph(),
                      user=wiki_page.owner)

        # Add history entry
        wiki_page.content=self.sd.paragraphs(3,15)
        wiki_page.save()
        take_snapshot(wiki_page,
              comment=self.sd.paragraph(),
              user=wiki_page.owner)

        return wiki_page

    def create_bug(self, project):
        bug = Issue.objects.create(project=project,
                                   subject=self.sd.choice(SUBJECT_CHOICES),
                                   description=self.sd.paragraph(),
                                   owner=self.sd.db_object_from_queryset(
                                            project.memberships.filter(user__isnull=False)).user,
                                   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=self.sd.words(1, 10).split(" "))

        bug.save()

        custom_attributes_values = {str(ca.id): self.sd.words(1, 12) for ca in project.issuecustomattributes.all()
                                                                                             if self.sd.boolean()}
        if custom_attributes_values:
            bug.custom_attributes_values.attributes_values = custom_attributes_values
            bug.custom_attributes_values.save()

        for i in range(self.sd.int(*NUM_ATTACHMENTS)):
            attachment = self.create_attachment(bug, i+1)

        if bug.status.order != 1:
            bug.assigned_to = self.sd.db_object_from_queryset(project.memberships.filter(
                                                                      user__isnull=False)).user
            bug.save()

        watching_user = self.sd.db_object_from_queryset(project.memberships.filter(user__isnull=False)).user
        bug.watchers.add(watching_user)

        take_snapshot(bug,
                      comment=self.sd.paragraph(),
                      user=bug.owner)

        # Add history entry
        bug.status=self.sd.db_object_from_queryset(IssueStatus.objects.filter(project=project))
        bug.save()
        take_snapshot(bug,
              comment=self.sd.paragraph(),
              user=bug.owner)

        return bug

    def create_task(self, project, milestone, us, min_date, max_date, closed=False):
        task = Task(subject=self.sd.choice(SUBJECT_CHOICES),
                    description=self.sd.paragraph(),
                    project=project,
                    owner=self.sd.db_object_from_queryset(project.memberships.filter(user__isnull=False)).user,
                    milestone=milestone,
                    user_story=us,
                    finished_date=None,
                    assigned_to = self.sd.db_object_from_queryset(
                    project.memberships.filter(user__isnull=False)).user,
                    tags=self.sd.words(1, 10).split(" "))

        if closed:
            task.status = project.task_statuses.get(order=4)
        else:
            task.status = self.sd.db_object_from_queryset(project.task_statuses.all())

        if task.status.is_closed:
            task.finished_date = self.sd.datetime_between(min_date, max_date)

        task.save()

        custom_attributes_values = {str(ca.id): self.sd.words(1, 12) for ca in project.taskcustomattributes.all()
                                                                                            if self.sd.boolean()}
        if custom_attributes_values:
            task.custom_attributes_values.attributes_values = custom_attributes_values
            task.custom_attributes_values.save()

        for i in range(self.sd.int(*NUM_ATTACHMENTS)):
            attachment = self.create_attachment(task, i+1)

        take_snapshot(task,
                      comment=self.sd.paragraph(),
                      user=task.owner)

        watching_user = self.sd.db_object_from_queryset(project.memberships.filter(user__isnull=False)).user
        task.watchers.add(watching_user)

        # Add history entry
        task.status=self.sd.db_object_from_queryset(project.task_statuses.all())
        task.save()
        take_snapshot(task,
              comment=self.sd.paragraph(),
              user=task.owner)

        return task

    def create_us(self, project, milestone=None, computable_project_roles=[]):
        us = UserStory.objects.create(subject=self.sd.choice(SUBJECT_CHOICES),
                                      project=project,
                                      owner=self.sd.db_object_from_queryset(
                                              project.memberships.filter(user__isnull=False)).user,
                                      description=self.sd.paragraph(),
                                      milestone=milestone,
                                      status=self.sd.db_object_from_queryset(project.us_statuses.filter(
                                                                             is_closed=False)),
                                      tags=self.sd.words(1, 3).split(" "))

        for role_points in us.role_points.filter(role__in=computable_project_roles):
            if milestone:
                role_points.points = self.sd.db_object_from_queryset(
                                us.project.points.exclude(value=None))
            else:
                role_points.points = self.sd.db_object_from_queryset(
                                              us.project.points.all())

            role_points.save()

        us.save()

        custom_attributes_values = {str(ca.id): self.sd.words(1, 12) for ca in project.userstorycustomattributes.all()
                                                                                                 if self.sd.boolean()}
        if custom_attributes_values:
            us.custom_attributes_values.attributes_values = custom_attributes_values
            us.custom_attributes_values.save()


        for i in range(self.sd.int(*NUM_ATTACHMENTS)):
            attachment = self.create_attachment(us, i+1)

        if self.sd.choice([True, True, False, True, True]):
            us.assigned_to = self.sd.db_object_from_queryset(project.memberships.filter(user__isnull=False)).user
            us.save()

        watching_user = self.sd.db_object_from_queryset(project.memberships.filter(user__isnull=False)).user
        us.watchers.add(watching_user)

        take_snapshot(us,
                      comment=self.sd.paragraph(),
                      user=us.owner)

        # Add history entry
        us.status=self.sd.db_object_from_queryset(project.us_statuses.filter(is_closed=False))
        us.save()
        take_snapshot(us,
              comment=self.sd.paragraph(),
              user=us.owner)

        return us

    def create_milestone(self, project, start_date, end_date):
        milestone = Milestone.objects.create(project=project,
                                             name='Sprint {0}-{1}-{2}'.format(start_date.year,
                                                                              start_date.month,
                                                                              start_date.day),
                                              owner=self.sd.db_object_from_queryset(
                                                      project.memberships.filter(user__isnull=False)).user,
                                              created_date=start_date,
                                              modified_date=start_date,
                                              estimated_start=start_date,
                                              estimated_finish=end_date,
                                              order=10)
        take_snapshot(milestone, user=milestone.owner)

        return milestone

    def create_project(self, counter):
        is_private=self.sd.boolean()
        anon_permissions = not is_private and list(map(lambda perm: perm[0], ANON_PERMISSIONS)) or []
        public_permissions = not is_private and list(map(lambda perm: perm[0], ANON_PERMISSIONS)) or []
        project = Project.objects.create(slug='project-%s'%(counter),
                                         name='Project Example {0}'.format(counter),
                                         description='Project example {0} description'.format(counter),
                                         owner=random.choice(self.users),
                                         is_private=is_private,
                                         anon_permissions=anon_permissions,
                                         public_permissions=public_permissions,
                                         total_story_points=self.sd.int(600, 3000),
                                         total_milestones=self.sd.int(5,10))
        project.is_kanban_activated = True
        project.save()
        take_snapshot(project, user=project.owner)
        return project

    def create_user(self, counter=None, username=None, full_name=None, email=None):
        counter = counter or self.sd.int()
        username = username or "user{0}".format(counter)
        full_name = full_name or "{} {}".format(self.sd.name('es'), self.sd.surname('es', number=1))
        email = email or "user{0}@taigaio.demo".format(counter)

        user = User.objects.create(username=username,
                                   full_name=full_name,
                                   email=email,
                                   token=''.join(random.sample('abcdef0123456789', 10)),
                                   color=self.sd.choice(COLOR_CHOICES))

        user.set_password('123123')
        user.save()

        return user
示例#6
0
class Command(BaseCommand):
    help = 'Populate an empty database with data for development purpose.'
    sd = SampleDataHelper(seed=1234567890)

    def add_arguments(self, parser):
        parser.add_argument(
            "--from-fixtures",
            action="store_true",
            dest="from-fixtures",
            default=False,
            help="Load more real dates from a fixture (default false)",
        )

    @transaction.atomic
    def handle(self, *args, **options):
        # Create admin user
        self.stdout.write(
            " -> Create admin user [ username: '******' | password: '******' ]. "
        )
        self._create_admin_user()

        if options["from-fixtures"]:
            self.stdout.write(" -> Load data from fixtures.")
            self._populate_with_fixtures()
        else:
            self.stdout.write(" -> Generate sample data.")
            self._populate_with_sampledata()

    def _populate_with_fixtures(self):
        from django.core.management import call_command
        call_command("loaddata", "initial_data", traceback=True)

    def _populate_with_sampledata(self):
        # Create cinemas
        for name, address, price in CINEMAS:
            self._create_cinema(name, address, price)

        # Create movies
        for i in MOVIES_IDS:
            self._create_movie(i)

        # Create shows
        for i in range(1, NUM_SHOWS + 1):
            self._create_show()

        # Create users
        for i in range(1, NUM_USERS + 1):
            self._create_user(i)

        # Create favorites
        for user in User.objects.all():
            shows = Show.objects.all()
            for i in range(self.sd.int(RANGE_EVENTS[0], RANGE_EVENTS[1])):
                show = self.sd.db_object_from_queryset(shows)
                self._create_favorite(user, show)
                shows = shows.exclude(id=show.id)

    def _create_admin_user(self):
        user = User.objects.create(username="******",
                                   email="*****@*****.**",
                                   full_name="Administrator",
                                   is_superuser=True)

        user.set_password("123123")
        user.save()
        return user

    def _create_user(self, id):
        user = User.objects.create(username="******".format(id),
                                   email="user{}@cinemair.com".format(id),
                                   full_name="{} {}".format(
                                       self.sd.name('es'),
                                       self.sd.surname('es', number=1)))

        user.set_password("123123")
        user.save()
        return user

    def _create_cinema(self, name, address, approximate_price):
        return Cinema.objects.create(name=name,
                                     address=address,
                                     approximate_price=approximate_price,
                                     city="Madrid",
                                     country="Spain")

    def _create_movie(self, id):
        return Movie.objects.create(name=self.sd.words(1, 5), tmdb_id=id)

    def _create_show(self):
        return Show.objects.create(
            movie=self.sd.db_object(Movie),
            cinema=self.sd.db_object(Cinema),
            datetime=self.sd.future_datetime(max_distance=60 * 24 * 90))

    def _create_favorite(self, user, show):
        return Favorite.objects.create(user=user, show=show)
示例#7
0
class Command(BaseCommand):
    sd = SampleDataHelper(seed=12345678901)

    @transaction.atomic
    def handle(self, *args, **options):

        self.users = []
        self.conferences = []
        self.proposals = []
        self.proposal_reviewers = []

        print('  Updating domain to localhost:8000')  # Update site url
        site = Site.objects.get_current()
        site.domain, site.name = 'localhost:8000', 'Local'
        site.save()

        print('  Creating Superuser')  # create superuser
        super_user = self.create_user(is_superuser=True, username='******',
                                      is_active=True)
        EmailAddress.objects.get_or_create(user=super_user,
                                           verified=True,
                                           primary=True,
                                           email=super_user.email)

        print('  Creating sample Users')  # create users
        for x in range(NUM_USERS):
            self.users.append(self.create_user(counter=x))

        print('  Creating proposal sections')
        self.proposal_sections = self.create_proposal_sections()

        print('  Create proposal types')
        self.proposal_types = self.create_proposal_types()

        # create conferences
        print('  Creating sample Conferences')
        for x in range(NUM_CONFERENCES + NUM_EMPTY_CONFERENCES):
            conference = self.create_conference(x)
            self.conferences.append(conference)

            if x < NUM_CONFERENCES:
                self.create_moderators(conference)
                self.proposal_reviewers = self.create_propsoal_reviewers(conference)

                # attach all proposal sections
                for section in self.proposal_sections:
                    conference.proposal_sections.add(section)

                # attach all proposal types
                for proposal_type in self.proposal_types:
                    conference.proposal_types.add(proposal_type)

        # create proposals
        print('  Creating sample proposals')
        for x in range(NUM_PUBLIC_PROPOSALS):
            self.proposals.append(self.create_proposal(proposal_type="Public"))

        for x in range(NUM_DRAFT_PROPOSALS):
            self.proposals.append(self.create_proposal(proposal_type="Draft"))

        for x in range(NUM_CANCELLED_PROPOSALS):
            self.proposals.append(self.create_proposal(proposal_type="Cancelled"))

        print('  Create sample Schedule')
        for proposal in self.proposals:
            if not proposal.get_status_display() == 'Public':
                continue
            self.create_scheduled_item(proposal=proposal)
        self.create_scheduled_item(proposal='Break',
                                   conference=self.conferences[0])

        # create comments
        print('  Creating sample proposal comments')
        for x in range(NUM_PUBLIC_COMMENTS):
            self.create_proposal_comment(users=self.users)

        reviewers = [i.reviewer for i in self.proposal_reviewers]
        for x in range(NUM_REVIEWER_COMMENTS):
            self.create_proposal_comment(users=reviewers)

        print(' Creating default choices for proposal reviewer vote values.')
        for vote in constants.ProposalReviewVote.CHOICES:
            ProposalSectionReviewerVoteValue.objects.create(vote_value=vote[0], description=vote[1])

    def create_proposal_sections(self):
        sections = []
        for count in range(NUM_PROPOSAL_SECTIONS):
            sections.append(ProposalSection.objects.create(**{
                'name': "Proposal Section %d" % count,
                'description': "Proposal Section %d description" % count,
                'active': True
            }))
        return sections

    def create_proposal_types(self):
        types = []
        for count in range(NUM_PROPOSAL_TYPES):
            types.append(ProposalType.objects.create(**{
                'name': "Proposal Type %d" % count,
                'description': "Proposal Section %d description" % count,
                'active': True
            }))
        return types

    def create_moderators(self, conference):
        moderators = []
        count = self.sd.int(1, len(self.users))
        for user in random.sample(self.users, count):
            moderators.append(conference.moderators.create(
                moderator=user, active=self.sd.boolean()))
        return moderators

    def create_propsoal_reviewers(self, conference):
        proposal_reviewers = []
        count = self.sd.int(1, len(self.users))
        for user in random.sample(self.users, count):
            proposal_reviewers.append(conference.proposal_reviewers.create(
                reviewer=user, active=self.sd.boolean()))
        return proposal_reviewers

    def create_scheduled_item(self, proposal, conference=None):
        kwargs = {}
        kwargs['conference'] = conference if conference \
            else proposal.conference
        kwargs['event_date'] = kwargs['conference'].start_date
        kwargs['start_time'] = datetime.datetime.time(datetime.datetime.now())
        kwargs['end_time'] = datetime.datetime.time(
            datetime.datetime.now() + datetime.timedelta(minutes=45))
        if isinstance(proposal, six.string_types):
            ScheduleItem.objects.create(
                alt_name=proposal,
                **kwargs)
        else:
            ScheduleItem.objects.create(
                session=proposal,
                **kwargs)

    def create_conference(self, counter, start_date=None, end_date=None):
        if counter == 0:
            min_days_from_creation = 30

            start_date = now() + datetime.timedelta(
                days=min_days_from_creation)
            # 2 day conference
            end_date = now() + datetime.timedelta(
                days=min_days_from_creation + 2)
        else:
            start_date = start_date or now() + datetime.timedelta(
                random.randrange(-55, 55))
            end_date = end_date or start_date + datetime.timedelta(
                random.randrange(1, 4))

        conference = Conference.objects.create(
            name='%s Conference' % self.sd.words(1, 2).title(),
            description=self.sd.paragraph(),
            status=self.sd.choices_key(constants.ConferenceStatus.CHOICES),
            start_date=start_date,
            end_date=end_date,
            created_by=self.sd.choice(self.users),
            modified_by=self.sd.choice(self.users))

        return conference

    def create_user(self, counter=None, username=None, email=None, **kwargs):
        counter = counter or self.sd.int()
        params = {
            "username": username or 'user{0}'.format(counter),
            "first_name": kwargs.get('first_name', self.sd.name("us", 1)),
            "last_name": kwargs.get('last_name', self.sd.surname("us", 1)),
            "email": email or self.sd.email(),
            "is_active": kwargs.get('is_active', self.sd.boolean()),
            "is_superuser": kwargs.get('is_superuser', False),
            "is_staff": kwargs.get('is_staff', kwargs.get('is_superuser', self.sd.boolean())),
        }
        user = get_user_model().objects.create(**params)
        password = '******'

        user.set_password(password)
        user.save()

        print("User created with username: {username} and password: {password}".format(
            username=params.get('username'), password=password))

        return user

    def create_proposal(self, proposal_type):

        status = next((i[0] for i in constants.ProposalStatus.CHOICES if
                       i[1] == proposal_type))

        proposal = Proposal.objects.create(
            conference=self.sd.choice(self.conferences),
            proposal_section=self.sd.choice(self.proposal_sections),
            proposal_type=self.sd.choice(self.proposal_types),
            author=self.sd.choice(self.users),
            title='%s Proposal' % self.sd.words(1, 2).title(),
            description=self.sd.paragraph(),
            status=status,
            deleted=self.sd.boolean())

        return proposal

    def create_proposal_comment(self, users):

        commenter = self.sd.choice(users)

        comment = ProposalComment.objects.create(
            proposal=self.sd.choice(self.proposals),
            private=self.sd.boolean(),
            comment='Comment',
            commenter=commenter)

        return comment
示例#8
0
class Command(BaseCommand):
    sd = SampleDataHelper(seed=12345678901)

    @transaction.atomic
    def handle(self, *args, **options):
        self.users = [User.objects.get(is_superuser=True)]

        # create users
        for x in range(10):
            self.users.append(self.create_user(x))

        # create project
        for x in range(4):
            project = self.create_project(x)

            # added memberships
            computable_project_roles = set()
            for user in self.users:
                if user == project.owner:
                    continue

                role = self.sd.db_object_from_queryset(Role.objects.all())

                Membership.objects.create(email=user.email,
                                          project=project,
                                          role=role,
                                          user=user)

                if role.computable:
                    computable_project_roles.add(role)

            start_date = now() - datetime.timedelta(55)

            # create milestones
            for y in range(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 range(self.sd.int(3, 7)):
                    us = self.create_us(project, milestone,
                                        computable_project_roles)

                    # create tasks
                    rang = (
                        1,
                        4) if start_date <= now() and end_date <= now() else (
                            0, 6)
                    for w in range(self.sd.int(*rang)):
                        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 milestones
                            pass

                start_date = end_date

            # created unassociated uss.
            for y in range(self.sd.int(8, 20)):
                us = self.create_us(project, None, computable_project_roles)

            # Set a value to total_story_points to show the deadline in the backlog
            defined_points = sum(project.defined_points.values())
            project.total_story_points = int(defined_points *
                                             self.sd.int(5, 12) / 10)
            project.save()

            # create bugs.
            for y in range(self.sd.int(15, 25)):
                bug = self.create_bug(project)

            # create a wiki page
            wiki_page = self.create_wiki(project, "home")

    def create_attachment(self, object):
        attachment = Attachment.objects.create(
            project=object.project,
            content_type=ContentType.objects.get_for_model(object.__class__),
            content_object=object,
            object_id=object.id,
            owner=self.sd.db_object_from_queryset(
                object.project.memberships.all()).user,
            attached_file=self.sd.image_from_directory(
                *ATTACHMENT_SAMPLE_DATA))

        return attachment

    def create_wiki(self, project, slug):
        wiki_page = WikiPage.objects.create(
            project=project,
            slug=slug,
            content=self.sd.paragraphs(3, 15),
            owner=self.sd.db_object_from_queryset(
                project.memberships.all()).user)

        for i in range(self.sd.int(0, 4)):
            attachment = self.create_attachment(wiki_page)

        return wiki_page

    def create_bug(self, project):
        bug = Issue.objects.create(
            project=project,
            subject=self.sd.choice(SUBJECT_CHOICES),
            description=self.sd.paragraph(),
            owner=self.sd.db_object_from_queryset(
                project.memberships.all()).user,
            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=self.sd.words(1, 5).split(" "))

        for i in range(self.sd.int(0, 4)):
            attachment = self.create_attachment(bug)

        if bug.status.order != 1:
            bug.assigned_to = self.sd.db_object_from_queryset(
                project.memberships.all()).user
            bug.save()

        return bug

    def create_task(self,
                    project,
                    milestone,
                    us,
                    min_date,
                    max_date,
                    closed=False):
        task = Task(subject=self.sd.choice(SUBJECT_CHOICES),
                    description=self.sd.paragraph(),
                    project=project,
                    owner=self.sd.db_object_from_queryset(
                        project.memberships.all()).user,
                    milestone=milestone,
                    user_story=us,
                    finished_date=None,
                    assigned_to=self.sd.db_object_from_queryset(
                        project.memberships.all()).user)

        if closed:
            task.status = project.task_statuses.get(order=4)
        else:
            task.status = self.sd.db_object_from_queryset(
                project.task_statuses.all())

        if task.status.is_closed:
            task.finished_date = self.sd.datetime_between(min_date, max_date)

        task.save()

        for i in range(self.sd.int(0, 4)):
            attachment = self.create_attachment(task)

        return task

    def create_us(self,
                  project,
                  milestone=None,
                  computable_project_roles=list(Role.objects.all())):
        us = UserStory.objects.create(
            subject=self.sd.choice(SUBJECT_CHOICES),
            project=project,
            owner=self.sd.db_object_from_queryset(
                project.memberships.all()).user,
            description=self.sd.paragraph(),
            milestone=milestone,
            status=self.sd.db_object_from_queryset(
                project.us_statuses.filter(is_closed=False)),
            tags=self.sd.words(1, 3).split(" "))

        for role_points in us.role_points.filter(
                role__in=computable_project_roles):
            if milestone:
                role_points.points = self.sd.db_object_from_queryset(
                    us.project.points.exclude(value=None))
            else:
                role_points.points = self.sd.db_object_from_queryset(
                    us.project.points.all())

            role_points.save()

        for i in range(self.sd.int(0, 4)):
            attachment = self.create_attachment(us)

        if self.sd.choice([True, True, False, True, True]):
            us.assigned_to = self.sd.db_object_from_queryset(
                project.memberships.all()).user
            us.save()

        return us

    def create_milestone(self, project, start_date, end_date):
        milestone = Milestone.objects.create(
            project=project,
            name='Sprint {0}-{1}-{2}'.format(start_date.year, start_date.month,
                                             start_date.day),
            owner=self.sd.db_object_from_queryset(
                project.memberships.all()).user,
            created_date=start_date,
            modified_date=start_date,
            estimated_start=start_date,
            estimated_finish=end_date,
            order=10)

        return milestone

    def create_project(self, counter):
        project = Project.objects.create(
            name='Project Example {0}'.format(counter),
            description='Project example {0} description'.format(counter),
            owner=random.choice(self.users),
            domain_id=1,
            public=True,
            total_story_points=self.sd.int(600, 3000),
            total_milestones=self.sd.int(5, 10))

        return project

    def create_user(self, counter):
        user = User.objects.create(username='******'.format(counter),
                                   first_name=self.sd.name('es'),
                                   last_name=self.sd.surname('es', number=1),
                                   email=self.sd.email(),
                                   token=''.join(
                                       random.sample('abcdef0123456789', 10)),
                                   color=self.sd.choice(COLOR_CHOICES))

        user.set_password('user{0}'.format(counter))
        user.save()

        return user
示例#9
0
class Command(BaseCommand):
    sd = SampleDataHelper(seed=12345678901)

    @transaction.atomic
    def handle(self, *args, **options):

        self.users = []

        # Update site url
        print('  Updating domain to localhost:8000')
        site = Site.objects.get_current()
        site.domain = 'localhost:8000'
        site.name = 'Local'
        site.save()

        # create superuser
        print('  Creating Superuser')
        super_user = self.create_user(is_superuser=True,
                                      username='******',
                                      is_active=True)
        EmailAddress.objects.get_or_create(user=super_user,
                                           verified=True,
                                           primary=True,
                                           email=super_user.email)

        # create users
        print('  Creating sample Users')
        for x in range(NUM_USERS):
            self.users.append(self.create_user(counter=x))

        print('  Creating proposal sections')
        self.proposal_sections = self.create_proposal_sections()

        print('  Create proposal types')
        self.proposal_types = self.create_proposal_types()

        # create conferences
        print('  Creating sample Conferences')
        for x in range(NUM_CONFERENCES + NUM_EMPTY_CONFERENCES):
            conference = self.create_conference(x)

            if x < NUM_CONFERENCES:
                self.create_moderators(conference)
                self.create_propsoal_reviewers(conference)

                # attach all proposal sections
                for section in self.proposal_sections:
                    conference.proposal_sections.add(section)

                # attach all proposal types
                for proposal_type in self.proposal_types:
                    conference.proposal_types.add(proposal_type)

    def create_proposal_sections(self):
        sections = []
        for count in range(NUM_PROPOSAL_SECTIONS):
            sections.append(
                ProposalSection.objects.create(
                    **{
                        'name': "Proposal Section %d" % count,
                        'description': "Proposal Section %d description" %
                        count,
                        'active': True
                    }))
        return sections

    def create_proposal_types(self):
        types = []
        for count in range(NUM_PROPOSAL_TYPES):
            types.append(
                ProposalType.objects.create(
                    **{
                        'name': "Proposal Type %d" % count,
                        'description': "Proposal Section %d description" %
                        count,
                        'active': True
                    }))
        return types

    def create_moderators(self, conference):
        moderators = []
        count = self.sd.int(1, len(self.users))
        for user in random.sample(self.users, count):
            moderators.append(
                conference.moderators.create(moderator=user,
                                             active=self.sd.boolean()))
        return moderators

    def create_propsoal_reviewers(self, conference):
        proposal_reviewers = []
        count = self.sd.int(1, len(self.users))
        for user in random.sample(self.users, count):
            proposal_reviewers.append(
                conference.proposal_reviewers.create(reviewer=user,
                                                     active=self.sd.boolean()))
        return proposal_reviewers

    def create_conference(self, counter, start_date=None, end_date=None):
        if counter == 0:
            min_days_from_creation = 30

            start_date = now() + datetime.timedelta(
                days=min_days_from_creation)
            # 2 day conference
            end_date = now() + datetime.timedelta(days=min_days_from_creation +
                                                  2)
        else:
            start_date = start_date or now() + datetime.timedelta(
                random.randrange(-55, 55))
            end_date = end_date or start_date + datetime.timedelta(
                random.randrange(1, 4))

        conference = Conference.objects.create(
            name='%s Conference' % self.sd.words(1, 2).title(),
            description=self.sd.paragraph(),
            status=self.sd.choices_key(constants.CONFERENCE_STATUS_LIST),
            start_date=start_date,
            end_date=end_date,
            created_by=self.sd.choice(self.users),
            modified_by=self.sd.choice(self.users))

        return conference

    def create_user(self, counter=None, username=None, email=None, **kwargs):
        counter = counter or self.sd.int()
        params = {
            "username":
            username or 'user{0}'.format(counter),
            "first_name":
            kwargs.get('first_name', self.sd.name("us", 1)),
            "last_name":
            kwargs.get('last_name', self.sd.surname("us", 1)),
            "email":
            email or self.sd.email(),
            "is_active":
            kwargs.get('is_active', self.sd.boolean()),
            "is_superuser":
            kwargs.get('is_superuser', False),
            "is_staff":
            kwargs.get('is_staff', kwargs.get('is_superuser',
                                              self.sd.boolean())),
        }
        user = get_user_model().objects.create(**params)
        password = '******'

        user.set_password(password)
        user.save()

        print(
            "User created with username: {username} and password: {password}".
            format(username=params.get('username'), password=password))

        return user