Switch to using a document key for PK

This commit is contained in:
2010-12-20 11:21:09 +00:00
parent 7cce96a4a5
commit a41ab81712
2 changed files with 62 additions and 11 deletions

View File

@@ -0,0 +1,55 @@
# 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):
# Delete all records
db.execute("DELETE FROM eve_proxy_cacheddocument")
# Removing unique constraint on 'CachedDocument', fields ['url_path']
db.delete_unique('eve_proxy_cacheddocument', ['url_path'])
# Deleting field 'CachedDocument.id'
db.delete_column('eve_proxy_cacheddocument', 'id')
# Adding field 'CachedDocument.doc_key'
db.add_column('eve_proxy_cacheddocument', 'doc_key', self.gf('django.db.models.fields.CharField')(default='xxx', max_length=40, primary_key=True), keep_default=False)
def backwards(self, orm):
# User chose to not deal with backwards NULL issues for 'CachedDocument.id'
raise RuntimeError("Cannot reverse this migration. 'CachedDocument.id' and its values cannot be restored.")
# Deleting field 'CachedDocument.doc_key'
db.delete_column('eve_proxy_cacheddocument', 'doc_key')
# Adding unique constraint on 'CachedDocument', fields ['url_path']
db.create_unique('eve_proxy_cacheddocument', ['url_path'])
models = {
'eve_proxy.apiaccesslog': {
'Meta': {'ordering': "['time_access']", 'object_name': 'ApiAccessLog'},
'document': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'service': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
'time_access': ('django.db.models.fields.DateTimeField', [], {}),
'userid': ('django.db.models.fields.IntegerField', [], {})
},
'eve_proxy.cacheddocument': {
'Meta': {'ordering': "['time_retrieved']", 'object_name': 'CachedDocument'},
'body': ('django.db.models.fields.TextField', [], {}),
'cached_until': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),
'doc_key': ('django.db.models.fields.CharField', [], {'max_length': '40', 'primary_key': 'True'}),
'time_retrieved': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),
'url_path': ('django.db.models.fields.CharField', [], {'max_length': '255'})
}
}
complete_apps = ['eve_proxy']

View File

@@ -54,20 +54,15 @@ class CachedDocumentManager(models.Manager):
"""
url = self.construct_url(url_path, params)
doc_key = hashlib.sha1(url).hexdigest()
try:
doc = super(CachedDocumentManager, self).get_query_set().get(url_path=url)
except self.model.MultipleObjectsReturned:
super(CachedDocumentManager, self).get_query_set().filter(url_path=url).delete()
doc = CachedDocument(url_path=url)
doc = super(CachedDocumentManager, self).get_query_set().get(pk=doc_key)
except self.model.DoesNotExist:
doc = CachedDocument(url_path=url)
doc = CachedDocument(pk=doc_key, url_path=url)
if doc.pk and no_cache:
doc.delete()
doc = CachedDocument(url_path=url)
if not doc.cached_until or datetime.utcnow() > doc.cached_until:
if not doc.cached_until or datetime.utcnow() > doc.cached_until or no_cache:
req = urllib2.Request(url)
req.add_header('CCP-Contact', 'matalok@pleaseignore.com')
@@ -113,7 +108,8 @@ class CachedDocument(models.Model):
"""
This is a cached XML document from the EVE API.
"""
url_path = models.CharField(max_length=255, unique=True)
doc_key = models.CharField(max_length=40, primary_key=True)
url_path = models.CharField(max_length=255)
body = models.TextField()
time_retrieved = models.DateTimeField(blank=True, null=True)
cached_until = models.DateTimeField(blank=True, null=True)