Implement the item vault API
This commit is contained in:
@@ -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}
|
||||
|
@@ -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)),
|
||||
|
@@ -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 *
|
||||
|
1
urls.py
1
urls.py
@@ -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
0
vault/__init__.py
Normal file
4
vault/admin.py
Normal file
4
vault/admin.py
Normal file
@@ -0,0 +1,4 @@
|
||||
import models
|
||||
from django.contrib import admin
|
||||
|
||||
admin.site.register(models.VaultSlot)
|
83
vault/migrations/0001_initial.py
Normal file
83
vault/migrations/0001_initial.py
Normal 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']
|
0
vault/migrations/__init__.py
Normal file
0
vault/migrations/__init__.py
Normal file
9
vault/models.py
Normal file
9
vault/models.py
Normal 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
16
vault/tests.py
Normal 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
1
vault/views.py
Normal file
@@ -0,0 +1 @@
|
||||
# Create your views here.
|
Reference in New Issue
Block a user