now nominee has a nomcom field, it's necessary to separate nominees for distinct nomcom when two nomcom are active

when a nomcom is deleted, templates and files of nomcom are deleted too
change publick key file path in settings
See #976
 - Legacy-Id: 5580
This commit is contained in:
Emilio Jiménez 2013-03-21 12:16:23 +00:00
parent 3a03cb0505
commit bd335e3a7b
7 changed files with 33 additions and 6 deletions

View file

@ -345,7 +345,7 @@ class NominateForm(BaseNomcomForm, forms.ModelForm):
email.save()
# Add the nomination for a particular position
nominee, created = Nominee.objects.get_or_create(email=email)
nominee, created = Nominee.objects.get_or_create(email=email, nomcom=self.nomcom)
nominee_position, nominee_position_created = NomineePosition.objects.get_or_create(position=position, nominee=nominee)
# Complete nomination data

View file

@ -38,7 +38,7 @@ class NomineePositionManager(models.Manager, MixinManager):
class NomineeManager(models.Manager):
def get_by_nomcom(self, nomcom):
return self.filter(nominee_position__nomcom=nomcom)
return self.filter(nomcom=nomcom)
class PositionQuerySet(QuerySet):

View file

@ -37,9 +37,13 @@ class Migration(SchemaMigration):
('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
('email', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['person.Email'])),
('duplicated', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['nomcom.Nominee'], null=True, blank=True)),
('nomcom', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['nomcom.NomCom'])),
))
db.send_create_signal('nomcom', ['Nominee'])
# Adding unique constraint on 'Nominee', fields ['email', 'nomcom']
db.create_unique('nomcom_nominee', ['email_id', 'nomcom_id'])
# Adding model 'NomineePosition'
db.create_table('nomcom_nomineeposition', (
('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
@ -94,6 +98,9 @@ class Migration(SchemaMigration):
# Removing unique constraint on 'NomineePosition', fields ['position', 'nominee']
db.delete_unique('nomcom_nomineeposition', ['position_id', 'nominee_id'])
# Removing unique constraint on 'Nominee', fields ['email', 'nomcom']
db.delete_unique('nomcom_nominee', ['email_id', 'nomcom_id'])
# Deleting model 'NomCom'
db.delete_table('nomcom_nomcom')
@ -364,10 +371,11 @@ class Migration(SchemaMigration):
'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']"})
},
'nomcom.nominee': {
'Meta': {'object_name': 'Nominee'},
'Meta': {'unique_together': "(('email', 'nomcom'),)", 'object_name': 'Nominee'},
'duplicated': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['nomcom.Nominee']", 'null': 'True', 'blank': 'True'}),
'email': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['person.Email']"}),
'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'nomcom': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['nomcom.NomCom']"}),
'nominee_position': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['nomcom.Position']", 'through': "orm['nomcom.NomineePosition']", 'symmetrical': 'False'})
},
'nomcom.nomineeposition': {

View file

@ -1,6 +1,8 @@
# -*- coding: utf-8 -*-
import os
from django.db import models
from django.db.models.signals import post_delete
from django.conf import settings
from django.core.files.storage import FileSystemStorage
from django.contrib.auth.models import User
@ -17,7 +19,8 @@ from ietf.nomcom.managers import NomineePositionManager, NomineeManager, \
PositionManager, FeedbackManager
from ietf.nomcom.utils import (initialize_templates_for_group,
initialize_questionnaire_for_position,
initialize_requirements_for_position)
initialize_requirements_for_position,
delete_nomcom_templates)
def upload_path_handler(instance, filename):
@ -46,6 +49,14 @@ class NomCom(models.Model):
initialize_templates_for_group(self)
def delete_nomcom(sender, **kwargs):
nomcom = kwargs.get('instance', None)
delete_nomcom_templates(nomcom)
storage, path = nomcom.public_key.storage, nomcom.public_key.path
storage.delete(path)
post_delete.connect(delete_nomcom, sender=NomCom)
class Nomination(models.Model):
position = models.ForeignKey('Position')
candidate_name = models.CharField(verbose_name='Candidate name', max_length=255)
@ -69,11 +80,13 @@ class Nominee(models.Model):
email = models.ForeignKey(Email)
nominee_position = models.ManyToManyField('Position', through='NomineePosition')
duplicated = models.ForeignKey('Nominee', blank=True, null=True)
nomcom = models.ForeignKey('NomCom')
objects = NomineeManager()
class Meta:
verbose_name_plural = 'Nominees'
unique_together = ('email', 'nomcom')
def __unicode__(self):
return u'%s' % self.email

View file

@ -150,7 +150,7 @@ def nomcom_test_data():
email=email)
# nominee
email = Email.objects.get(person__name=COMMUNITY_USER)
nominee, created = Nominee.objects.get_or_create(email=email)
nominee, created = Nominee.objects.get_or_create(email=email, nomcom=nomcom)
# positions
for name, description in POSITIONS.iteritems():

View file

@ -112,6 +112,11 @@ def initialize_requirements_for_position(position):
content=template.content)
def delete_nomcom_templates(nomcom):
nomcom_template_path = '/nomcom/' + nomcom.group.acronym
DBTemplate.objects.filter(path__contains=nomcom_template_path).delete()
def retrieve_nomcom_private_key(request, year):
private_key = request.session.get('NOMCOM_PRIVATE_KEY_%s' % year, None)

View file

@ -261,10 +261,11 @@ IDSUBMIT_ANNOUNCE_LIST_EMAIL = 'i-d-announce@ietf.org'
# NomCom Tool settings
ROLODEX_URL = ""
PUBLIC_KEYS_URL = BASE_DIR + '/public_keys/'
PUBLIC_KEYS_URL = BASE_DIR + '/nomcom/public_keys/'
NOMCOM_FROM_EMAIL = DEFAULT_FROM_EMAIL
NOMCOM_ADMIN_EMAIL = DEFAULT_FROM_EMAIL
OPENSSL_COMMAND = '/usr/bin/openssl'
DAYS_TO_EXPIRE_NOMINATION_LINK = ''
# Days from meeting to cut off dates on submit
FIRST_CUTOFF_DAYS = 19