From 07407cc1e08c1aaf6ee65495b5ebbae5d93d5e1b Mon Sep 17 00:00:00 2001 From: Andrew Williams Date: Wed, 7 Jul 2010 10:47:49 +0100 Subject: [PATCH] Added expiry dates to Blacklist items, also optimized the blacklist lookup --- ...2_auto__add_field_blacklist_expiry_date.py | 148 ++++++++++++++++++ hr/models.py | 32 ++-- 2 files changed, 168 insertions(+), 12 deletions(-) create mode 100644 hr/migrations/0002_auto__add_field_blacklist_expiry_date.py diff --git a/hr/migrations/0002_auto__add_field_blacklist_expiry_date.py b/hr/migrations/0002_auto__add_field_blacklist_expiry_date.py new file mode 100644 index 0000000..b1b0f45 --- /dev/null +++ b/hr/migrations/0002_auto__add_field_blacklist_expiry_date.py @@ -0,0 +1,148 @@ +# encoding: utf-8 +import datetime +from south.db import db +from south.v2 import SchemaMigration +from django.db import models + +class Migration(SchemaMigration): + + def forwards(self, orm): + + # Adding field 'Blacklist.expiry_date' + db.add_column('hr_blacklist', 'expiry_date', self.gf('django.db.models.fields.DateTimeField')(null=True), keep_default=False) + + + def backwards(self, orm): + + # Deleting field 'Blacklist.expiry_date' + db.delete_column('hr_blacklist', 'expiry_date') + + + models = { + 'auth.group': { + 'Meta': {'object_name': 'Group'}, + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '80', 'unique': 'True'}), + 'permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'}) + }, + 'auth.permission': { + 'Meta': {'unique_together': "(('content_type', 'codename'),)", 'object_name': 'Permission'}, + 'codename': ('django.db.models.fields.CharField', [], {'max_length': '100'}), + 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']"}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '50'}) + }, + 'auth.user': { + 'Meta': {'object_name': 'User'}, + 'date_joined': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}), + 'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'blank': 'True'}), + 'first_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}), + 'groups': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Group']", 'symmetrical': 'False', 'blank': 'True'}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'is_active': ('django.db.models.fields.BooleanField', [], {'default': 'True', 'blank': 'True'}), + 'is_staff': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'blank': 'True'}), + 'is_superuser': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'blank': 'True'}), + 'last_login': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}), + 'last_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}), + 'password': ('django.db.models.fields.CharField', [], {'max_length': '128'}), + 'user_permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'}), + 'username': ('django.db.models.fields.CharField', [], {'max_length': '30', 'unique': 'True'}) + }, + 'contenttypes.contenttype': { + 'Meta': {'unique_together': "(('app_label', 'model'),)", 'object_name': 'ContentType', 'db_table': "'django_content_type'"}, + 'app_label': ('django.db.models.fields.CharField', [], {'max_length': '100'}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'model': ('django.db.models.fields.CharField', [], {'max_length': '100'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '100'}) + }, + 'eve_api.eveplayeralliance': { + 'Meta': {'object_name': 'EVEPlayerAlliance'}, + 'api_last_updated': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}), + 'date_founded': ('django.db.models.fields.DateField', [], {'null': 'True', 'blank': 'True'}), + 'group': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.Group']", 'null': 'True', 'blank': 'True'}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'member_count': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '255', 'blank': 'True'}), + 'ticker': ('django.db.models.fields.CharField', [], {'max_length': '15', 'blank': 'True'}) + }, + 'eve_api.eveplayercharacter': { + 'Meta': {'object_name': 'EVEPlayerCharacter'}, + 'api_last_updated': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}), + 'attrib_charisma': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}), + 'attrib_intelligence': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}), + 'attrib_memory': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}), + 'attrib_perception': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}), + 'attrib_willpower': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}), + 'balance': ('django.db.models.fields.FloatField', [], {'null': 'True', 'blank': 'True'}), + 'corporation': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['eve_api.EVEPlayerCorporation']", 'null': 'True', 'blank': 'True'}), + 'current_location_id': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}), + 'director_update': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'blank': 'True'}), + 'gender': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'last_login': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}), + 'last_logoff': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '255', 'blank': 'True'}), + 'race': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}), + 'total_sp': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}) + }, + 'eve_api.eveplayercorporation': { + 'Meta': {'object_name': 'EVEPlayerCorporation'}, + 'alliance': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['eve_api.EVEPlayerAlliance']", 'null': 'True', 'blank': 'True'}), + 'alliance_join_date': ('django.db.models.fields.DateField', [], {'null': 'True', 'blank': 'True'}), + 'api_last_updated': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}), + 'applications': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'blank': 'True'}), + 'ceo_character': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['eve_api.EVEPlayerCharacter']", 'null': 'True', 'blank': 'True'}), + 'description': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}), + 'group': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.Group']", 'null': 'True', 'blank': 'True'}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'logo_color1': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}), + 'logo_color2': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}), + 'logo_color3': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}), + 'logo_graphic_id': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}), + 'logo_shape1': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}), + 'logo_shape2': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}), + 'logo_shape3': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}), + 'member_count': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '255', 'null': 'True', 'blank': 'True'}), + 'shares': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}), + 'tax_rate': ('django.db.models.fields.FloatField', [], {'null': 'True', 'blank': 'True'}), + 'ticker': ('django.db.models.fields.CharField', [], {'max_length': '15', 'null': 'True', 'blank': 'True'}), + 'url': ('django.db.models.fields.URLField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'}) + }, + 'hr.application': { + 'Meta': {'object_name': 'Application'}, + 'character': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['eve_api.EVEPlayerCharacter']"}), + 'corporation': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['eve_api.EVEPlayerCorporation']"}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'status': ('django.db.models.fields.IntegerField', [], {'default': '0'}), + 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']"}) + }, + 'hr.audit': { + 'Meta': {'object_name': 'Audit'}, + 'application': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hr.Application']"}), + 'date': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}), + 'event': ('django.db.models.fields.IntegerField', [], {}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'text': ('django.db.models.fields.TextField', [], {}), + 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']", 'blank': 'True'}) + }, + 'hr.blacklist': { + 'Meta': {'object_name': 'Blacklist'}, + 'created_by': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']"}), + 'created_date': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}), + 'expiry_date': ('django.db.models.fields.DateTimeField', [], {'null': 'True'}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'reason': ('django.db.models.fields.TextField', [], {}), + 'type': ('django.db.models.fields.IntegerField', [], {}), + 'value': ('django.db.models.fields.CharField', [], {'max_length': '255'}) + }, + 'hr.recommendation': { + 'Meta': {'object_name': 'Recommendation'}, + 'application': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hr.Application']"}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']"}), + 'user_character': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['eve_api.EVEPlayerCharacter']"}) + } + } + + complete_apps = ['hr'] diff --git a/hr/models.py b/hr/models.py index 501e506..c041145 100644 --- a/hr/models.py +++ b/hr/models.py @@ -30,32 +30,32 @@ class Application(models.Model): blacklist = [] + bl_items = Blacklist.objects.filter( models.Q(expiry_date__gt=datetime.now()) | models.Q(expiry_date=None) ) + # Check Reddit blacklists reddit_uids = self.user.redditaccount_set.all().values_list('username') reddit = [a[0].lower() for a in reddit_uids if a and a[0]] - objs = Blacklist.objects.filter(type=BLACKLIST_TYPE_REDDIT, value__in=reddit) + objs = bl_items.filter(type=BLACKLIST_TYPE_REDDIT, value__in=reddit) blacklist.extend(objs) - # Check Character blacklists - chars_list = EVEPlayerCharacter.objects.filter(eveaccount__user=self.user).values_list('name') - chars = [a[0].lower() for a in chars_list if a and a[0]] + # Check EVE Related blacklists + evechars = EVEPlayerCharacter.objects.filter(eveaccount__user=self.user).select_related('corporation__alliance') - objs = Blacklist.objects.filter(type=BLACKLIST_TYPE_CHARACTER, value__in=chars) + # Check Character blacklists + chars = [a[0].lower() for a in evechars.values_list('name') if a and a[0]] + objs = bl_items.filter(type=BLACKLIST_TYPE_CHARACTER, value__in=chars) blacklist.extend(objs) # Check Corporation blacklists - corp_list = EVEPlayerCharacter.objects.filter(eveaccount__user=self.user).values_list('corporation__name') - corps = [a[0].lower() for a in corp_list if a and a[0]] - - objs = Blacklist.objects.filter(type=BLACKLIST_TYPE_CORPORATION, value__in=corps) + corps = [a[0].lower() for a in evechars.values_list('corporation__name') if a and a[0]] + objs = bl_items.filter(type=BLACKLIST_TYPE_CORPORATION, value__in=corps) blacklist.extend(objs) # Check Alliance blacklists - alliance_list = EVEPlayerCharacter.objects.filter(eveaccount__user=self.user).values_list('corporation__alliance__name') - alliances = [a[0].lower() for a in alliance_list if a and a[0]] + alliances = [a[0].lower() for a in evechars.values_list('corporation__alliance__name') if a and a[0]] - objs = Blacklist.objects.filter(type=BLACKLIST_TYPE_ALLIANCE, value__in=alliances) + objs = bl_items.filter(type=BLACKLIST_TYPE_ALLIANCE, value__in=alliances) blacklist.extend(objs) return blacklist @@ -117,6 +117,14 @@ class Blacklist(models.Model): reason = models.TextField(blank=False, verbose_name="Reason", help_text="Reason that the entity was blacklisted") + expiry_date = models.DateTimeField(verbose_name="Expiry Date", blank=False, null=True, + help_text="Date to expire this entry") + created_date = models.DateTimeField(auto_now_add=True, verbose_name="Created Date") created_by = models.ForeignKey(User, blank=False, verbose_name="Created By") + def __unicode__(self): + return u'%s: %s' % (self.get_type_display(), self.value) + + def __str__(self): + return self.__unicode__()