-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Eric Wohnlich
committed
Aug 20, 2014
1 parent
e35e226
commit 4adbd80
Showing
13 changed files
with
335 additions
and
79 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,3 +1,4 @@ | ||
*.pyc | ||
################# | ||
## Eclipse | ||
################# | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,7 +1,57 @@ | ||
from django.conf.urls import patterns, url | ||
from django.contrib import admin | ||
from django.core.exceptions import ObjectDoesNotExist | ||
from django.shortcuts import render | ||
|
||
import fetcher | ||
|
||
# Register your models here. | ||
from gearitem.models import GearItem,Comment | ||
from gearitem.models import GearItem | ||
|
||
class GearItemAdmin(admin.ModelAdmin): | ||
def get_urls(self): | ||
urls = super(GearItemAdmin, self).get_urls() | ||
my_urls = patterns('', | ||
(r'^populate_gear/$', self.populate_view), | ||
(r'^update_gear/$', self.update_view), | ||
) | ||
return my_urls + urls | ||
|
||
def update_view(self,request): | ||
ids = [] | ||
for obj in GearItem.objects.all(): | ||
ids.append(obj.id) | ||
for data in fetcher.fetch_items(ids): | ||
self.update_gear(data) | ||
return render(request, 'gearitem/done.html') | ||
|
||
def populate_view(self, request): | ||
for data in fetcher.fetch_items(): | ||
try: | ||
GearItem.objects.get(id=data['id']) | ||
except ObjectDoesNotExist: | ||
GearItem.objects.create(id=data['id']) | ||
self.update_gear(data) | ||
return render(request, 'gearitem/done.html') | ||
|
||
def update_gear(self, gear): | ||
obj = GearItem.objects.get(id=gear['id']) | ||
obj.name = gear['name'] | ||
obj.nameDescription = gear['desc'] | ||
obj.agility = gear['stats'].get('agility',0) | ||
obj.crit = gear['stats'].get('crit',0) | ||
obj.haste = gear['stats'].get('haste',0) | ||
obj.mastery = gear['stats'].get('mastery',0) | ||
obj.versatility = gear['stats'].get('versatility',0) | ||
obj.multistrike = gear['stats'].get('multistrike',0) | ||
if gear.get('sockets'): | ||
obj.socket1 = gear['sockets']['sockets'][0]['type'] | ||
obj.socket2 = len(gear['sockets']['sockets']) > 1 and gear['sockets']['sockets'][1]['type'] | ||
obj.socket3 = len(gear['sockets']['sockets']) > 2 and gear['sockets']['sockets'][2]['type'] | ||
obj.socket_bonus = gear['sockets']['socketBonus'].replace('+','') | ||
obj.icon = gear['icon'] | ||
obj.slot = gear['slot'] | ||
obj.quality = gear['quality'] | ||
obj.save() | ||
|
||
admin.site.register(GearItem) | ||
admin.site.register(Comment) | ||
admin.site.register(GearItem, GearItemAdmin) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,39 @@ | ||
import urllib, json | ||
from tools import * | ||
|
||
def stats(bonus): | ||
_stats = {} | ||
for bs in bonus: | ||
if bs['stat'] in stats_used: | ||
_stats[stats_used[bs['stat']]] = bs['amount'] | ||
return _stats | ||
|
||
def do_item(data): | ||
return {'id':data['id'], | ||
'name':data['name'], | ||
'desc':data['nameDescription'], | ||
'stats':data['bstats'], | ||
'slot':data['inventoryType'], | ||
'sockets':data['hasSockets'] and data['socketInfo'], | ||
'icon':data['icon'], | ||
'quality':data['quality']} | ||
|
||
def fetch_items(ids=[]): | ||
gear = [] | ||
if not ids: | ||
ids = range(100000,111000) | ||
for i in ids: | ||
print i | ||
data = json.load(urllib.urlopen('http://us.battle.net/api/wow/item/%d' % i)) | ||
if 'status' in data: | ||
continue | ||
if data['inventoryType'] in good_inventory_slots and data['itemLevel'] >= 553: | ||
bstats = stats(data['bonusStats']) | ||
data['bstats'] = bstats | ||
if data['itemClass'] == 4 and data['itemSubClass'] == 3 and 'agility' in bstats: # mail agi | ||
gear.append(do_item(data)) | ||
elif data['inventoryType'] in (11,2,16,15) and 'agility' in bstats: # ring, necklace, cloak, ranged | ||
gear.append(do_item(data)) | ||
elif data['inventoryType'] == 12: # trinket | ||
gear.append(do_item(data)) | ||
return gear |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,64 @@ | ||
# -*- coding: utf-8 -*- | ||
from south.utils import datetime_utils as 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 'GearItem' | ||
db.create_table(u'gearitem_gearitem', ( | ||
(u'id', self.gf('django.db.models.fields.AutoField')(primary_key=True)), | ||
('name', self.gf('django.db.models.fields.CharField')(max_length=80)), | ||
('nameDescription', self.gf('django.db.models.fields.CharField')(max_length=80)), | ||
('zone', self.gf('django.db.models.fields.CharField')(max_length=80)), | ||
('source', self.gf('django.db.models.fields.CharField')(max_length=80)), | ||
('agility', self.gf('django.db.models.fields.IntegerField')(default=0)), | ||
('crit', self.gf('django.db.models.fields.IntegerField')(default=0)), | ||
('haste', self.gf('django.db.models.fields.IntegerField')(default=0)), | ||
('mastery', self.gf('django.db.models.fields.IntegerField')(default=0)), | ||
('multistrike', self.gf('django.db.models.fields.IntegerField')(default=0)), | ||
('versatility', self.gf('django.db.models.fields.IntegerField')(default=0)), | ||
('ilvl', self.gf('django.db.models.fields.IntegerField')(default=0)), | ||
('icon', self.gf('django.db.models.fields.CharField')(max_length=80)), | ||
('slot', self.gf('django.db.models.fields.IntegerField')(default=0)), | ||
('socket1', self.gf('django.db.models.fields.CharField')(max_length=20)), | ||
('socket2', self.gf('django.db.models.fields.CharField')(max_length=20)), | ||
('socket3', self.gf('django.db.models.fields.CharField')(max_length=20)), | ||
('socket_bonus', self.gf('django.db.models.fields.CharField')(max_length=80)), | ||
)) | ||
db.send_create_signal(u'gearitem', ['GearItem']) | ||
|
||
|
||
def backwards(self, orm): | ||
# Deleting model 'GearItem' | ||
db.delete_table(u'gearitem_gearitem') | ||
|
||
|
||
models = { | ||
u'gearitem.gearitem': { | ||
'Meta': {'object_name': 'GearItem'}, | ||
'agility': ('django.db.models.fields.IntegerField', [], {'default': '0'}), | ||
'crit': ('django.db.models.fields.IntegerField', [], {'default': '0'}), | ||
'haste': ('django.db.models.fields.IntegerField', [], {'default': '0'}), | ||
'icon': ('django.db.models.fields.CharField', [], {'max_length': '80'}), | ||
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), | ||
'ilvl': ('django.db.models.fields.IntegerField', [], {'default': '0'}), | ||
'mastery': ('django.db.models.fields.IntegerField', [], {'default': '0'}), | ||
'multistrike': ('django.db.models.fields.IntegerField', [], {'default': '0'}), | ||
'name': ('django.db.models.fields.CharField', [], {'max_length': '80'}), | ||
'nameDescription': ('django.db.models.fields.CharField', [], {'max_length': '80'}), | ||
'slot': ('django.db.models.fields.IntegerField', [], {'default': '0'}), | ||
'socket1': ('django.db.models.fields.CharField', [], {'max_length': '20'}), | ||
'socket2': ('django.db.models.fields.CharField', [], {'max_length': '20'}), | ||
'socket3': ('django.db.models.fields.CharField', [], {'max_length': '20'}), | ||
'socket_bonus': ('django.db.models.fields.CharField', [], {'max_length': '80'}), | ||
'source': ('django.db.models.fields.CharField', [], {'max_length': '80'}), | ||
'versatility': ('django.db.models.fields.IntegerField', [], {'default': '0'}), | ||
'zone': ('django.db.models.fields.CharField', [], {'max_length': '80'}) | ||
} | ||
} | ||
|
||
complete_apps = ['gearitem'] |
Empty file.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,25 +1,40 @@ | ||
from django.db import models | ||
from tools import slots | ||
|
||
class Comment(models.Model): | ||
gearid = models.CharField(max_length=80) | ||
user = models.CharField(max_length=80) | ||
note = models.TextField() | ||
|
||
def __unicode__(self): | ||
return self.user + ': ' + self.note[:20] | ||
socket_choices=[('red','Red'), | ||
('yellow','Yellow'), | ||
('blue','Blue'), | ||
('meta','Meta'), | ||
('chromatic','Chromatic'), | ||
('none','(No socket)'), | ||
] | ||
|
||
# Create your models here. | ||
class GearItem(models.Model): | ||
name = models.CharField(max_length=80) | ||
nameDescription = models.CharField(max_length=80) | ||
zone = models.CharField(max_length=80) | ||
source = models.CharField(max_length=80) | ||
primary = models.IntegerField(default=0) | ||
agility = models.IntegerField(default=0) | ||
crit = models.IntegerField(default=0) | ||
haste = models.IntegerField(default=0) | ||
mastery = models.IntegerField(default=0) | ||
multistrike = models.IntegerField(default=0) | ||
versatility = models.IntegerField(default=0) | ||
ilvl = models.IntegerField(default=0) | ||
icon = models.CharField(max_length=80) | ||
slot = models.IntegerField(default=0) | ||
quality = models.IntegerField(default=0) | ||
socket1 = models.CharField(max_length=20, | ||
choices=socket_choices,) | ||
socket2 = models.CharField(max_length=20, | ||
choices=socket_choices,) | ||
socket3 = models.CharField(max_length=20, | ||
choices=socket_choices,) | ||
socket_bonus = models.CharField(max_length=80) | ||
|
||
def comments(self): | ||
return Comment.objects.filter(gearid=self.id) | ||
def slotName(self): | ||
return slots[self.slot] | ||
|
||
def __unicode__(self): | ||
return self.name | ||
return self.name + ' (' + (self.nameDescription or 'normal') + ')' |
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,38 +1,62 @@ | ||
<h1>{{ gearitem.name }}</h1> | ||
<table class="listing"> | ||
<tr> | ||
<th>Zone</th> | ||
<td{{ gearitem.zone }}</th> | ||
</tr> | ||
<tr> | ||
<th>Boss/Source</th> | ||
<td>{{ gearitem.source }}</th> | ||
</tr> | ||
<tr> | ||
<th>Stats</th> | ||
<td> | ||
<ul> | ||
<li>Primary: {{ gearitem.primary }}</li> | ||
<li>Crit: {{ gearitem.crit }}</li> | ||
<li>Haste: {{ gearitem.haste }}</li> | ||
<li>Mastery: {{ gearitem.mastery }}</li> | ||
</ul> | ||
</td> | ||
</tr> | ||
</table> | ||
{% extends "base.html" %} | ||
{% load staticfiles %} | ||
|
||
{% if error_message %}<p><strong>{{ error_message }}</strong></p>{% endif %} | ||
|
||
<form action="{% url 'gearitem:comment' gearitem.id %}" method="post"> | ||
{% csrf_token %} | ||
<label for="note">Comment</label><br/> | ||
<textarea name="note" id="comment" value=""></textarea><br/> | ||
<input type="submit" value="Submit" /> | ||
</form> | ||
|
||
<dl> | ||
{% for comment in gearitem.comments %} | ||
<dt>{{ comment.user }} posts:</dt> | ||
<dd>{{ comment.note }}</dd> | ||
{% endfor %} | ||
</dl> | ||
{% block content %} | ||
<div class="container"> | ||
<h1 id="item-banner"> | ||
<img src="http://us.media.blizzard.com/wow/icons/36/{{ gearitem.icon }}.jpg" /> | ||
<span class="item-quality{{ gearitem.quality }}">{{ gearitem.name }}</span> | ||
{% if gearitem.nameDescription %} - | ||
<span class="nameDescription">{{ gearitem.nameDescription }}</span> | ||
{% endif %} | ||
</h1> | ||
<a href="{% url 'gearitem:listing' %}">← Back to all items</a> | ||
|
||
<a class="navbar-right" href="http://www.wowhead.com/item={{ gearitem.id }}"> | ||
<img src="{% static "wowhead.png" %}" /> | ||
View on wowhead.com | ||
</a> | ||
|
||
<h4>Zone</h4> | ||
{{ gearitem.zone }} | ||
|
||
<h4>Boss/Source</h4> | ||
{{ gearitem.source }} | ||
|
||
<h4>Slot</h4> | ||
{{ gearitem.slotName }} | ||
|
||
<h4>Stats</h4> | ||
<table class="table table-striped"> | ||
<tr> | ||
<th>Agility</th> | ||
<td>{{ gearitem.agility }}</th> | ||
</tr> | ||
<tr> | ||
<th>Crit</th> | ||
<td>{{ gearitem.crit }}</td> | ||
</tr> | ||
<tr> | ||
<th>Haste</th> | ||
<td>{{ gearitem.haste }}</th> | ||
</tr> | ||
<tr> | ||
<th>Mastery</th> | ||
<td>{{ gearitem.mastery }}</td> | ||
</tr> | ||
<tr> | ||
<th>Multistrike</th> | ||
<td>{{ gearitem.multistrike }}</td> | ||
</tr> | ||
<tr> | ||
<th>Versatility</th> | ||
<td>{{ gearitem.versatility }}</td> | ||
</tr> | ||
</table> | ||
|
||
<h4>Sockets</h4> | ||
nyi | ||
|
||
{% if error_message %}<p><strong>{{ error_message }}</strong></p>{% endif %} | ||
</div> | ||
{% endblock %} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,10 @@ | ||
{% extends "base.html" %} | ||
{% load staticfiles %} | ||
{% load i18n admin_urls %} | ||
|
||
{% block content %} | ||
<div class="container"> | ||
Done.<br/><br/> | ||
<a href="{% url 'admin:gearitem_gearitem_changelist' %}">← Go to gearitems</a> | ||
</div> | ||
{% endblock %} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,13 +1,40 @@ | ||
{% extends "base.html" %} | ||
{% load staticfiles %} | ||
|
||
<link rel="stylesheet" type="text/css" href="{% static 'huntertools/bootstrap/css/bootstrap.min.css' %}" /> | ||
|
||
{% if name_gear_list %} | ||
<ul> | ||
{% for gearitem in name_gear_list %} | ||
<li><a href="{% url 'gearitem:details' gearitem.id %}">{{ gearitem.name }}</a></li> | ||
{% endfor %} | ||
</ul> | ||
{% else %} | ||
<p>No gear items are available.</p> | ||
{% endif %} | ||
{% block content %} | ||
<div class="container"> | ||
{% if name_gear_list %} | ||
<table class="table" id="items-table"> | ||
<thead> | ||
<tr> | ||
<th colspan="2">Name</th> | ||
<th>Zone</th> | ||
<th>Boss/Source</th> | ||
<th>Slot</th> | ||
</tr> | ||
</thead> | ||
<tbody> | ||
{% for gearitem in name_gear_list %} | ||
<tr> | ||
<td> | ||
<a href="{% url 'gearitem:details' gearitem.id %}"> | ||
<img src="http://us.media.blizzard.com/wow/icons/18/{{ gearitem.icon }}.jpg" /> | ||
<span class="item-quality{{ gearitem.quality }}">{{ gearitem.name }}</span> | ||
{% if gearitem.nameDescription %} - | ||
<span class="nameDescription">{{ gearitem.nameDescription }}</span> | ||
{% endif %} | ||
</a> | ||
</td> | ||
<td><a href="http://wod.wowhead.com/item={{ gearitem.id }}"><img src="{% static "wowhead.png" %}"/></a></td> | ||
<td>{{ gearitem.zone }}</td> | ||
<td>{{ gearitem.source }}</td> | ||
<td>{{ gearitem.slotName }}</td> | ||
</tr> | ||
{% endfor %} | ||
</tbody> | ||
</table> | ||
{% else %} | ||
<p>No gear items are available.</p> | ||
{% endif %} | ||
</div> | ||
{% endblock %} |
Oops, something went wrong.