ongoing work

This commit is contained in:
j 2010-01-17 09:42:11 +13:00
parent 207e438e69
commit 822c139624
4 changed files with 68 additions and 4 deletions

View File

@ -1,6 +1,16 @@
from carrot.connection import DjangoBrokerConnection
from carrot.messaging import Consumer
from carrot.messaging import Consumer, Publisher
from django.conf import settings
import load
import models
def send_bg_message(msg):
conn = DjangoBrokerConnection()
publisher = Publisher(connection=conn, exchange="oxdb-bg",
routing_key="oxdb-bg")
publisher.send(msg)
publisher.close()
def run():
conn = DjangoBrokerConnection()
@ -8,12 +18,15 @@ def run():
consumer = Consumer(connection=conn, queue="oxdb-bg",
exchange="oxdb-bg",
routing_key="oxdb-bg")
def handle_background_tasks_callback(message_data, message):
def handle_background_tasks_callback(data, message):
print("Got feed import message")
print message_data
if 'loadIMDb' in message_data:
print data
if 'loadIMDb' in data:
imdbId = message_data['loadIMDb']
load.loadIMDb(imdbId)
elif 'findMovie' in data:
f = models.File.objects.get(pk=data['findMovie'])
f.findMovie()
message.ack()
consumer.register_callback(handle_background_tasks_callback)
consumer.wait() # Go into the consumer loop.

View File

@ -3,6 +3,7 @@
import re
import os.path
import random
from datetime import datetime
from django.db import models
from django.db.models import Q
@ -16,6 +17,7 @@ from django.utils import simplejson as json
import utils
import managers
import fields
import load
class MovieImdb(models.Model):
created = models.DateTimeField(auto_now_add=True)
@ -74,6 +76,39 @@ class MovieOxdb(models.Model):
def __unicode__(self):
return u"%s (%s)" % (self.title, self.year)
class MovieExtra(models.Model):
created = models.DateTimeField(auto_now_add=True)
modified = models.DateTimeField(auto_now=True)
title = models.CharField(max_length=1000)
description = models.TextField(blank=True)
contributor = models.CharField(max_length=1000)
def getMovie(info):
'''
info dict with:
imdbId, title, director, episode_title, season, series
'''
if 'imdbId' in info:
try:
movie = models.Movie.byImdbId(imdbId)
except models.Movie.DoesNotExist:
movie = load.loadIMDb(movieId==info['imdbId'])
else:
q = Movie.objects.filter(title=info['title'], year=info['director'])
if q.count() > 1:
movie = q[0]
else:
movie = newMovie(info['title'], info['director'], '')
updated = False
for key in ('episode_title', 'season', 'year'):
if key in info:
setattr(movie.oxdb, key, info[key])
updated = True
if updated:
movie.save()
return movie
def newMovie(title, director, year):
movie = Movie()
oxdb = MovieOxdb()
@ -96,6 +131,7 @@ def movie_path(f, size):
class Movie(models.Model):
created = models.DateTimeField(auto_now_add=True)
modified = models.DateTimeField(auto_now=True)
published = models.DateTimeField(default=datetime.now, editable=False)
#only movies that have metadata from files are available,
#this is indicated by setting available to True
@ -106,10 +142,13 @@ class Movie(models.Model):
imdb = models.OneToOneField('MovieImdb', null=True, related_name='movie')
oxdb = models.OneToOneField('MovieOxdb', null=True, related_name='movie')
extra = models.OneToOneField('MovieOxdb', null=True, related_name='movie')
objects = managers.MovieManager()
def get(self, key, default=None):
if self.extra and getattr(self.extra, key):
return getattr(self.extra, key)
if self.oxdb and getattr(self.oxdb, key):
return getattr(self.oxdb, key)
if self.imdb:
@ -949,6 +988,8 @@ FILE_TYPES = (
class File(models.Model):
created = models.DateTimeField(auto_now_add=True)
modified = models.DateTimeField(auto_now=True)
published = models.DateTimeField(default=datetime.now, editable=False)
verified = models.BooleanField(default=False)
oshash = models.CharField(blank=True, unique=True, max_length=16)
@ -1060,6 +1101,11 @@ class File(models.Model):
self.path = self.info['path']
self.save()
def findMovie(self):
info = utils.parsePath(self.path)
self.movie = getMovie(info)
self.save()
class Still(models.Model):
created = models.DateTimeField(auto_now_add=True)
modified = models.DateTimeField(auto_now=True)

View File

@ -23,6 +23,7 @@ from oxdjango.decorators import login_required_json
import models
import utils
from daemon import send_bg_message
'''
field.length -> movie.sort.all()[0].field
@ -426,6 +427,8 @@ def update_archive(request, archive):
print "adding file", oshash, data['path']
f = models.ArchiveFile.get_or_create(archive, oshash)
f.update(data)
if not f.movie:
send_bg_message({'findMovie': f.id})
#FIXME: only add if it was not in File
else:
f = q[0]

View File

@ -68,6 +68,7 @@ def preferences(request):
key = request.GET.get('key', None)
value = request.GET.get('value', None)
user = request.user
response['preferences'] = {}
if not key: # return all preferences for current user
for p in models.Preference.objects.filter(user=user):
response['preferences'][p.key] = p.value
@ -76,6 +77,7 @@ def preferences(request):
p, created = models.Preference.objects.get_or_create(user=user, key=key)
response['preferences'][key] = p.value
else: # set preference
del response['preferences']
response['message'] = '%s saved.' % key
if key == 'password':
user.set_password(value)