forked from ietf-tools/datatracker
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathfactories.py
More file actions
165 lines (136 loc) · 5.73 KB
/
Copy pathfactories.py
File metadata and controls
165 lines (136 loc) · 5.73 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
# Copyright The IETF Trust 2015-2022, All Rights Reserved
import datetime
import debug # pyflakes:ignore
import factory
from typing import List # pyflakes:ignore
from django.utils import timezone
from ietf.group.models import (
Appeal,
AppealArtifact,
Group,
GroupEvent,
GroupMilestone,
GroupHistory,
Role,
RoleHistory
)
from ietf.review.factories import ReviewTeamSettingsFactory
from ietf.utils.timezone import date_today
class GroupFactory(factory.django.DjangoModelFactory):
class Meta:
model = Group
django_get_or_create = ('acronym',)
skip_postgeneration_save = True
name = factory.Faker('text', max_nb_chars=80)
acronym = factory.Sequence(lambda n: 'acronym%d' %n)
state_id = 'active'
type_id = 'wg'
list_email = factory.LazyAttribute(lambda a: '%s@ietf.org'% a.acronym)
uses_milestone_dates = True
used_roles = [] # type: List[str]
@factory.lazy_attribute
def parent(self):
if self.type_id in ['wg','ag']:
return GroupFactory(type_id='area')
elif self.type_id in ['rg','rag']:
return GroupFactory(acronym='irtf', type_id='irtf')
else:
return None
class ReviewTeamFactory(GroupFactory):
type_id = 'review'
@factory.post_generation
def settings(obj, create, extracted, **kwargs):
ReviewTeamSettingsFactory.create(group=obj,**kwargs)
class RoleFactory(factory.django.DjangoModelFactory):
class Meta:
model = Role
group = factory.SubFactory(GroupFactory)
person = factory.SubFactory('ietf.person.factories.PersonFactory')
email = factory.LazyAttribute(lambda obj: obj.person.email())
class GroupEventFactory(factory.django.DjangoModelFactory):
class Meta:
model = GroupEvent
group = factory.SubFactory(GroupFactory)
by = factory.SubFactory('ietf.person.factories.PersonFactory')
type = 'comment'
desc = factory.Faker('paragraph')
class BaseGroupMilestoneFactory(factory.django.DjangoModelFactory):
class Meta:
model = GroupMilestone
group = factory.SubFactory(GroupFactory)
state_id = 'active'
desc = factory.Faker('sentence')
class DatedGroupMilestoneFactory(BaseGroupMilestoneFactory):
group = factory.SubFactory(GroupFactory, uses_milestone_dates=True)
due = date_today() + datetime.timedelta(days=180)
class DatelessGroupMilestoneFactory(BaseGroupMilestoneFactory):
group = factory.SubFactory(GroupFactory, uses_milestone_dates=False)
order = factory.Sequence(lambda n: n)
class GroupHistoryFactory(factory.django.DjangoModelFactory):
class Meta:
model=GroupHistory
skip_postgeneration_save = True
time = lambda: timezone.now()
group = factory.SubFactory(GroupFactory, state_id='active')
name = factory.LazyAttribute(lambda obj: obj.group.name)
state_id = factory.LazyAttribute(lambda obj: obj.group.state_id)
type_id = factory.LazyAttribute(lambda obj: obj.group.type_id)
parent = factory.LazyAttribute(lambda obj: obj.group.parent)
uses_milestone_dates = factory.LazyAttribute(lambda obj: obj.group.uses_milestone_dates)
used_roles = factory.LazyAttribute(lambda obj: obj.group.used_roles)
description = factory.LazyAttribute(lambda obj: obj.group.description)
list_email = factory.LazyAttribute(lambda obj: '%s@ietf.org'% obj.group.acronym) #TODO : move this to GroupFactory
list_subscribe = factory.LazyAttribute(lambda obj: obj.group.list_subscribe)
list_archive = factory.LazyAttribute(lambda obj: obj.group.list_archive)
comments = factory.LazyAttribute(lambda obj: obj.group.comments)
meeting_seen_as_area = factory.LazyAttribute(lambda obj: obj.group.meeting_seen_as_area)
acronym = factory.LazyAttribute(lambda obj: obj.group.acronym)
@factory.post_generation
def unused_states(obj, create, extracted, **kwargs):
if create:
if extracted:
obj.unused_states.set(extracted)
else:
obj.unused_states.set(obj.group.unused_states.all())
@factory.post_generation
def unused_tags(obj, create, extracted, **kwargs):
if create:
if extracted:
obj.unused_tags.set(extracted)
else:
obj.unused_tags.set(obj.group.unused_states.all())
class RoleHistoryFactory(factory.django.DjangoModelFactory):
class Meta:
model=RoleHistory
group = factory.SubFactory(GroupHistoryFactory)
person = factory.SubFactory('ietf.person.factories.PersonFactory')
email = factory.LazyAttribute(lambda obj: obj.person.email())
class AppealFactory(factory.django.DjangoModelFactory):
class Meta:
model=Appeal
name=factory.Faker("sentence")
group=factory.SubFactory(GroupFactory, acronym="iab")
class AppealArtifactFactory(factory.django.DjangoModelFactory):
class Meta:
model=AppealArtifact
skip_postgeneration_save = True
appeal = factory.SubFactory(AppealFactory)
artifact_type = factory.SubFactory("ietf.name.factories.AppealArtifactTypeNameFactory", slug="appeal")
content_type = "text/markdown;charset=utf-8"
# Needs newer factory_boy
# bits = factory.Transformer(
# "Some example **Markdown**",
# lambda o: memoryview(o.encode("utf-8") if isinstance(o,str) else o)
# )
#
# Usage: a = AppealArtifactFactory(set_bits__using="foo bar") or
# a = AppealArtifactFactory(set_bits__using=b"foo bar")
@factory.post_generation
def set_bits(obj, create, extracted, **kwargs):
if not create:
return
using = kwargs.pop("using","Some example **Markdown**")
if isinstance(using, str):
using = using.encode("utf-8")
obj.bits = memoryview(using)
obj.save()