|
| 1 | +import factory |
| 2 | +import random |
| 3 | + |
| 4 | +from ietf.nomcom.models import NomCom, Position, Nominee, NomineePosition |
| 5 | +from ietf.group.factories import GroupFactory |
| 6 | +from ietf.person.factories import PersonFactory |
| 7 | + |
| 8 | +import debug # pyflakes:ignore |
| 9 | + |
| 10 | +cert = '''-----BEGIN CERTIFICATE----- |
| 11 | +MIIDHjCCAgagAwIBAgIJAKDCCjbQboJzMA0GCSqGSIb3DQEBCwUAMBMxETAPBgNV |
| 12 | +BAMMCE5vbUNvbTE1MB4XDTE0MDQwNDIxMTQxNFoXDTE2MDQwMzIxMTQxNFowEzER |
| 13 | +MA8GA1UEAwwITm9tQ29tMTUwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIB |
| 14 | +AQC2QXCsAitYSOgPYor77zQnEeHuVqlcuhpH1wpKB+N6WcScA5N3AnX9uZEFOt6M |
| 15 | +cJ+MCiHECdqDlH6npQTJlpCpIVgAD4B6xzjRBRww8d3lClA/kKwsKzuX93RS0Uv3 |
| 16 | +0hAD6q9wjqK/m6vR5Y1SsvJYV0y+Yu5j9xUEsojMH7O3NlXWAYOb6oH+f/X7PX27 |
| 17 | +IhtiCwfICMmVWh/hKeXuFx6HSOcH3gZ6Tlk1llfDbE/ArpsZ6JmnLn73+64yqIoO |
| 18 | +ZOc4JJUPrdsmbNwXoxQSQhrpwjN8NpSkQaJbHGB3G+OWvP4fpqcweFHxlEq1Hhef |
| 19 | +uR9E6jc3qwxVQfwjbcq6N/4JAgMBAAGjdTBzMB0GA1UdDgQWBBTJow+TJynRWsTQ |
| 20 | +LzoS861FGb/rxDAOBgNVHQ8BAf8EBAMCBLAwDwYDVR0TAQH/BAUwAwEB/zAcBgNV |
| 21 | +HREEFTATgRFub21jb20xNUBpZXRmLm9yZzATBgNVHSUEDDAKBggrBgEFBQcDBDAN |
| 22 | +BgkqhkiG9w0BAQsFAAOCAQEAJwLapB9u5N3iK6SCTqh+PVkigZeB2YMVBW8WA3Ut |
| 23 | +iRPBj+jHWOpF5pzZHTOcNaAxDEG9lyIlcWqc93A24K/Gen11Tx0hO4FAPOG0+PP8 |
| 24 | +4lx7F6xeeyUNR44pInrB93G2q0jl+3wjZH8uhBKlGji4UTMpDPpEl6uiyQCbkMMm |
| 25 | +Vr7HZH5Dv/lsjGHHf8uJO7+mcMh+tqxLn3DzPrm61OfeWdkoVX2pTz0imRQ3Es+8 |
| 26 | +I7zNMk+fNNaEEyPnEyHfuWq0uD/qKeP27NZIoINy6E3INQ5QaE2uc1nQULg5y7uJ |
| 27 | +toX3j+FUe2UiUak3ACXdrOPSsFP0KRrFwuMnuHHXkGj/Uw== |
| 28 | +-----END CERTIFICATE----- |
| 29 | +''' |
| 30 | + |
| 31 | +key = '''-----BEGIN PRIVATE KEY----- |
| 32 | +MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQC2QXCsAitYSOgP |
| 33 | +Yor77zQnEeHuVqlcuhpH1wpKB+N6WcScA5N3AnX9uZEFOt6McJ+MCiHECdqDlH6n |
| 34 | +pQTJlpCpIVgAD4B6xzjRBRww8d3lClA/kKwsKzuX93RS0Uv30hAD6q9wjqK/m6vR |
| 35 | +5Y1SsvJYV0y+Yu5j9xUEsojMH7O3NlXWAYOb6oH+f/X7PX27IhtiCwfICMmVWh/h |
| 36 | +KeXuFx6HSOcH3gZ6Tlk1llfDbE/ArpsZ6JmnLn73+64yqIoOZOc4JJUPrdsmbNwX |
| 37 | +oxQSQhrpwjN8NpSkQaJbHGB3G+OWvP4fpqcweFHxlEq1HhefuR9E6jc3qwxVQfwj |
| 38 | +bcq6N/4JAgMBAAECggEAb5SS4YwWc193S2v+QQ2KdVz6YEuINq/tRQw/TWGVACQT |
| 39 | +PZzm3FaSXDsOsRAAjiSpWTgewgFyWVpBTGu4CZ73g8RZNvhGpWRwwW8KemCpg/8T |
| 40 | +cEcnUYdKXdhuzAE9LETb7znwHM4Gj55DzCZopjfOLQ2Ne4XgAy2THaQcIjRKd6Bw |
| 41 | +3mteJ2ityDj3iFN7cq9ntDzp+2BqLOi7AZmLntmUZxtkPCT6k5/dcKFYQW9Eb3bt |
| 42 | +MON+BIYVzqhAijkP/cAWmbgZAP9EFng5PpE1lc/shl0W8eX4yvjNoMPRq3wphS4j |
| 43 | +L16VncUeDep3vR0CECx7gnTfR0uCDEgKow50pzGQAQKBgQDaQWwK/o39zI3lCGzy |
| 44 | +oSNJRNQJ/iZBkbbwpCCaka7VnBfd0ZH54VEWL3oMTkkWRSZtjsPAqT+ndwZitm0D |
| 45 | +Kww9FUDMP7j/tMOwAUHYfjYFqFTn6ipkBuby9tbZtL7lgJO6Iu2Qk3afqADD0kcP |
| 46 | +zRLxcYSLjrmp9NyUlNnpswR4CQKBgQDVxjwG/orCmiuyA1Bu4u1hdUD0w9CKnyjp |
| 47 | +VTbkv8lxk5V3pYzms2Awb0X43W2OioYGBk5yw+9GCF//xCrfbGV7BLZnDTGShjkJ |
| 48 | +8oTpLPGBsDSfaKVXE3Hko4LVLBMQIm0tDyuPD1Naia7ZknYn906skonEG8WgHUyp |
| 49 | +c/BgkvzWAQKBgBdojuL6/FWtO8bFyZGYUMWJ+Uf9FzNPIpTatZh+aYcFj9W9pW9s |
| 50 | +iBreCrQJLXOTBRUZC8u9G1Olw2yQ7k45rr1aazG83+WlCJv29o32s2qV7E1XYyaJ |
| 51 | +SvniGZcN+K96w91h46Lu/fkPts1J309FinOU3kdtjmI5HfNdp6WWCrOpAoGBAMjc |
| 52 | +TEaeIK8cwPWwG4E1A6pQy8mvu2Ckj4I+KSfh9FsdOpGDIdMas8SOqQZet7P5AFjk |
| 53 | +0A0RgN8iu2DMZyQq62cdVG2bffqY1zs7fhrBueILOEaXwtMAWEFmSWYW1YqRbleq |
| 54 | +K1luIvms6HdSIGcI/gk0XvG+zn/VR9ToNPHo6lwBAoGBAIrYGYPf+cjZ1V/tNqnL |
| 55 | +IecEZb4Gkp1hVhOpNT4U+T2LROxrZtFxxsw2vuIRa5a5FtMbDq9Xyhkm0QppliBd |
| 56 | +KQ38jTT0EaD2+vstTqL8vxupo25RQWV1XsmLL4pLbKnm2HnnwB3vEtsiokWKW0q0 |
| 57 | +Tdb0MiLc+r/zvx8oXtgDjDUa |
| 58 | +-----END PRIVATE KEY----- |
| 59 | +''' |
| 60 | + |
| 61 | +def nomcom_kwargs_for_year(year=None, *args, **kwargs): |
| 62 | + if not year: |
| 63 | + year = random.randint(1980,2100) |
| 64 | + if 'group__state_id' not in kwargs: |
| 65 | + kwargs['group__state_id']='active' |
| 66 | + if 'group__acronym' not in kwargs: |
| 67 | + kwargs['group__acronym'] = 'nomcom%d'%year |
| 68 | + if 'group__name' not in kwargs: |
| 69 | + kwargs['group__name'] = 'TEST VERSION of IAB/IESG Nominating Committee %d/%d'%(year,year+1) |
| 70 | + return kwargs |
| 71 | + |
| 72 | + |
| 73 | +class NomComFactory(factory.DjangoModelFactory): |
| 74 | + class Meta: |
| 75 | + model = NomCom |
| 76 | + |
| 77 | + group = factory.SubFactory(GroupFactory,type_id='nomcom') |
| 78 | + |
| 79 | + public_key = factory.django.FileField(data=cert) |
| 80 | + |
| 81 | + @factory.post_generation |
| 82 | + def populate_positions(self, create, extracted, **kwargs): |
| 83 | + ''' |
| 84 | + Create a set of nominees and positions unless NomcomFactory is called |
| 85 | + with populate_positions=False |
| 86 | + ''' |
| 87 | + if extracted is None: |
| 88 | + extracted = True |
| 89 | + if create and extracted: |
| 90 | + nominees = [Nominee.objects.create(nomcom=self, email=PersonFactory().email_set.first()) for i in range(2)] |
| 91 | + positions = [PositionFactory(nomcom=self) for i in range(3)] |
| 92 | + |
| 93 | + def npc(x,y): |
| 94 | + return NomineePosition.objects.create(position=x, |
| 95 | + nominee=y, |
| 96 | + state_id='accepted') |
| 97 | + # This gives us positions with 0, 1 and 2 nominees, and |
| 98 | + # one person who's been nomminated for more than one position |
| 99 | + npc(positions[0],nominees[0]) |
| 100 | + npc(positions[1],nominees[0]) |
| 101 | + npc(positions[1],nominees[1]) |
| 102 | + |
| 103 | + @factory.post_generation |
| 104 | + def populate_personnel(self, create, extracted, **kwargs): |
| 105 | + ''' |
| 106 | + Create a default set of role holders, unless the factory is called |
| 107 | + with populate_personnel=False |
| 108 | + ''' |
| 109 | + if extracted is None: |
| 110 | + extracted = True |
| 111 | + if create and extracted: |
| 112 | + #roles= ['chair', 'advisor'] + ['member']*10 |
| 113 | + roles = ['chair', 'advisor', 'member'] |
| 114 | + for role in roles: |
| 115 | + p = PersonFactory() |
| 116 | + self.group.role_set.create(name_id=role,person=p,email=p.email_set.first()) |
| 117 | + |
| 118 | +class PositionFactory(factory.DjangoModelFactory): |
| 119 | + class Meta: |
| 120 | + model = Position |
| 121 | + |
| 122 | + name = factory.Faker('sentence',nb_words=10) |
| 123 | + description = factory.Faker('paragraph',nb_sentences=4) |
| 124 | + is_open = True |
| 125 | + |
0 commit comments