Implement the item vault API

This commit is contained in:
Trever Fischer
2012-11-09 07:55:44 -05:00
parent a2895f400c
commit e3296b029a
11 changed files with 144 additions and 0 deletions

View File

@@ -15,6 +15,7 @@ from datetime import datetime
from models import cachePlayerList
from events import server_queue, web_queue, chat, server_broadcast, send_web_event, QuitEvent, JoinEvent, PlayerDeathEvent
from bounty.models import Bounty
from vault.models import VaultSlot
class MOTDHandler(AnonymousBaseHandler):
allowed_methods = ('GET',)
@@ -156,3 +157,27 @@ class PollHandler(BaseHandler):
pollData['events'].append(eventData['event'])
event.delete()
return pollData
class VaultHandler(BaseHandler):
allowed_methods = ('PUT','GET')
def read(self, request, playername):
player = MinecraftProfile.objects.get(mc_username__exact=playername)
items = []
for slot in player.vault_slots.all():
items.append({'item': slot.item, 'quantity':
slot.quantity, 'damage': slot.damage, 'data': slot.data})
return {'items': items}
def update(self, request, playername):
player = MinecraftProfile.objects.get(mc_username__exact=playername)
vaultContents = json.loads(request.POST['contents'])['items']
stacks = player.vault_slots.all()
for stack in stacks:
stack.delete()
for item in vaultContents:
if item['item'] > 0:
VaultSlot.objects.create(player=player, item=item['item'],
quantity=item['quantity'], damage=item['damage'],
data=item['data'])
return {'success': True}

View File

@@ -47,6 +47,7 @@ urlpatterns = patterns('api',
url(r'^motd/(?P<username>.*)$', motdHandler),
url(r'^server/whoami$', ServerResource(handlers.ServerPingHandler)),
url(r'^server/events$', ServerResource(handlers.ServerEventHandler)),
url(r'^server/vault/(?P<playername>.*)$', ServerResource(handlers.VaultHandler)),
url(r'^server/economy/(?P<playername>.*)$', ServerResource(handlers.EconomyHandler)),
url(r'^server/session/(?P<playername>.*)/new$', ServerResource(handlers.NewPlayerSessionHandler)),
url(r'^server/session/(?P<playername>.*)/close$', ServerResource(handlers.ClosePlayerSessionHandler)),

View File

@@ -126,6 +126,7 @@ INSTALLED_APPS = (
'forums',
'mptt',
'api',
'bounty',
'django.contrib.markup',
'south',
'django.contrib.flatpages',
@@ -137,6 +138,7 @@ INSTALLED_APPS = (
'piston',
'donate',
'badges',
'vault',
# Uncomment the next line to enable admin documentation:
# 'django.contrib.admindocs',
)
@@ -195,6 +197,8 @@ CAMINUS_USE_BEANSTALKD = False
CAMINUS_BEANSTALKD_HOST = 'localhost'
CAMINUS_BEANSTALKD_PORT = 11300
CAMINUS_BOUNTY_PRICE=250
# Load any site-local overrides, such as camin.us' database settings, etc
try:
from local_settings import *

View File

@@ -24,6 +24,7 @@ urlpatterns = patterns('',
url(r'^donate/', include('donate.urls')),
url(r'^f/(?P<id>.*)', 'forums.views.post'),
url(r'^badges/', include('badges.urls')),
url(r'^bounty/', include('bounty.urls')),
)
urlpatterns += staticfiles_urlpatterns()

0
vault/__init__.py Normal file
View File

4
vault/admin.py Normal file
View File

@@ -0,0 +1,4 @@
import models
from django.contrib import admin
admin.site.register(models.VaultSlot)

View File

@@ -0,0 +1,83 @@
# 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 'VaultSlot'
db.create_table('vault_vaultslot', (
('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
('player', self.gf('django.db.models.fields.related.ForeignKey')(related_name='vault_slots', to=orm['minecraft.MinecraftProfile'])),
('item', self.gf('django.db.models.fields.IntegerField')()),
('quantity', self.gf('django.db.models.fields.IntegerField')()),
('damage', self.gf('django.db.models.fields.IntegerField')()),
('data', self.gf('django.db.models.fields.IntegerField')()),
))
db.send_create_signal('vault', ['VaultSlot'])
def backwards(self, orm):
# Deleting model 'VaultSlot'
db.delete_table('vault_vaultslot')
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.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'})
},
'vault.vaultslot': {
'Meta': {'object_name': 'VaultSlot'},
'damage': ('django.db.models.fields.IntegerField', [], {}),
'data': ('django.db.models.fields.IntegerField', [], {}),
'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'item': ('django.db.models.fields.IntegerField', [], {}),
'player': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'vault_slots'", 'to': "orm['minecraft.MinecraftProfile']"}),
'quantity': ('django.db.models.fields.IntegerField', [], {})
}
}
complete_apps = ['vault']

View File

9
vault/models.py Normal file
View File

@@ -0,0 +1,9 @@
from django.db import models
from minecraft.models import MinecraftProfile
class VaultSlot(models.Model):
player = models.ForeignKey(MinecraftProfile, related_name='vault_slots')
item = models.IntegerField()
quantity = models.IntegerField()
damage = models.IntegerField()
data = models.IntegerField()

16
vault/tests.py Normal file
View File

@@ -0,0 +1,16 @@
"""
This file demonstrates writing tests using the unittest module. These will pass
when you run "manage.py test".
Replace this with more appropriate tests for your application.
"""
from django.test import TestCase
class SimpleTest(TestCase):
def test_basic_addition(self):
"""
Tests that 1 + 1 always equals 2.
"""
self.assertEqual(1 + 1, 2)

1
vault/views.py Normal file
View File

@@ -0,0 +1 @@
# Create your views here.