Add an 'item' model to minecraft app, and migrate Vault app to use it.

The Item model is meant to be used as a way for other apps to store exceedingly
common data about an item, such as the material ID, data value, and damage
value. Keeping it all in one object allows for the item schema to change later
on without needing to update dozens of other apps.
This commit is contained in:
Trever Fischer
2012-11-16 15:14:41 -05:00
parent 3706219e90
commit 452b5acbfd
6 changed files with 415 additions and 18 deletions

View File

@@ -0,0 +1,118 @@
# 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 model 'Item'
db.create_table('minecraft_item', (
('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
('material', self.gf('django.db.models.fields.IntegerField')(default=0)),
('damage', self.gf('django.db.models.fields.IntegerField')(default=0)),
('data', self.gf('django.db.models.fields.IntegerField')(default=0)),
))
db.send_create_signal('minecraft', ['Item'])
def backwards(self, orm):
# Deleting model 'Item'
db.delete_table('minecraft_item')
models = {
'auth.group': {
'Meta': {'object_name': 'Group'},
'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '80'}),
'permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'})
},
'auth.permission': {
'Meta': {'ordering': "('content_type__app_label', 'content_type__model', 'codename')", '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'}),
'is_staff': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
'is_superuser': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
'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', [], {'unique': 'True', 'max_length': '30'})
},
'contenttypes.contenttype': {
'Meta': {'ordering': "('name',)", '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'})
},
'minecraft.ban': {
'Meta': {'object_name': 'Ban'},
'banner': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']"}),
'expiration': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),
'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'player': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'bans'", 'to': "orm['minecraft.MinecraftProfile']"}),
'reason': ('django.db.models.fields.TextField', [], {}),
'start': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'})
},
'minecraft.item': {
'Meta': {'object_name': 'Item'},
'damage': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
'data': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'material': ('django.db.models.fields.IntegerField', [], {'default': '0'})
},
'minecraft.minecraftgroup': {
'Meta': {'object_name': 'MinecraftGroup'},
'authGroup': ('django.db.models.fields.related.OneToOneField', [], {'to': "orm['auth.Group']", 'unique': 'True'}),
'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'permissionList': ('django.db.models.fields.TextField', [], {'blank': 'True'})
},
'minecraft.minecraftprofile': {
'Meta': {'object_name': 'MinecraftProfile'},
'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'mc_username': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'}),
'user': ('django.db.models.fields.related.OneToOneField', [], {'to': "orm['auth.User']", 'unique': 'True'})
},
'minecraft.motd': {
'Meta': {'object_name': 'MOTD'},
'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'server': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['minecraft.Server']"}),
'text': ('django.db.models.fields.TextField', [], {})
},
'minecraft.playersession': {
'Meta': {'object_name': 'PlayerSession'},
'end': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),
'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'ip': ('django.db.models.fields.IPAddressField', [], {'max_length': '15'}),
'player': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['minecraft.MinecraftProfile']"}),
'server': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['minecraft.Server']"}),
'start': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'})
},
'minecraft.server': {
'Meta': {'object_name': 'Server'},
'hostname': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'port': ('django.db.models.fields.IntegerField', [], {'default': '25565'}),
'query_port': ('django.db.models.fields.IntegerField', [], {'default': '25565'}),
'ruleset': ('django.db.models.fields.TextField', [], {'default': "''"}),
'secret': ('django.db.models.fields.CharField', [], {'max_length': '100'})
}
}
complete_apps = ['minecraft']

View File

@@ -5,6 +5,36 @@ from django.core.cache import cache
from django.core.exceptions import ObjectDoesNotExist
import socket
import datetime
from items import ITEMS
class Item(models.Model):
"""Represents a single unique class of item"""
material = models.IntegerField(default=0)
damage = models.IntegerField(default=0)
data = models.IntegerField(default=0)
def get(self, material, damage=0, data=0):
return self.objects.get_or_create(material=material, damage=damage,
data=data)
def __unicode__(self):
return self.name()
def damagePct(self):
if self.metadata['durability'] == 0:
return 100
return round((float(self.damage)/float(self.metadata['durability']))*100)
def name(self):
name = self.metadata['name'].lower().split('_')
return ' '.join(map(lambda x:x[0].upper()+x[1:], name))
@property
def metadata(self):
for i in ITEMS:
if i['id'] == self.item:
return i;
class MinecraftProfile(models.Model):
user = models.OneToOneField(User)