UFF this changes its very very hard .......learning by myself how the django signals works an how change adding some stuff....
The idea from integrate pownce and django comes from, i dontlike twitter, and pownce give some stuff can i contrib to others users.
Well i hard to explain my code but this is...
First i create a model what populate from pownce, add a signal on post_save with that signal save a content type what is show, some like timeline of models .... with the pub_date with it i can show on the index of
from django.db import models
from django.contrib import databrowse
from zodyblog.tumble.models import Item
from django.db.models import signals
from django.contrib.contenttypes.models import ContentType
import django.dispatch
class PownceNote(models.Model):
pownce_id = models.PositiveIntegerField()
body = models.TextField()
permalink = models.URLField()
date= models.DateTimeField()
def get_type(self):
pownce_type="Message"
if self.powncelink_set.all().count() > 0:
pownce_type= "Link"
if self.pownceevent_set.all().count() > 0:
pownce_type="Event"
if self.powncefile_set.all().count() > 0:
pownce_type= "File"
return pownce_type
def __unicode__(self):
return "[%s] %s" %(self.get_type(),self.body)
class PownceLink(models.Model):
url = models.URLField()
pownce_note = models.ForeignKey(PownceNote,unique=True)
def __unicode__(self):
return self.url
class PownceFile(models.Model):
name = models.CharField(max_length=200)
type = models.CharField(max_length=100)
pownce_note = models.ForeignKey(PownceNote,unique=True)
def __unicode__(self):
return self.name
class PownceEvent(models.Model):
name = models.CharField(max_length=200)
ical = models.URLField()
location = models.CharField(max_length=200)
date = models.DateTimeField()
pownce_note = models.ForeignKey(PownceNote,unique=True)
def __unicode__(self):
return self.name
def create_item(sender,instance, **kwargs):
ctype = ContentType.objects.get_for_model(instance)
if ctype.name == "entrada":
pub_date = instance.fecha
else:
pub_date = instance.date
if "created" in kwargs:
if kwargs["created"]:
si,created = Item.objects.get_or_create(content_type=ctype, object_id=instance.id, pub_date=pub_date)
else:
si = Item.objects.get(content_type=ctype,object_id=instance.pk)
si.pub_date=pub_date
si.save()
signals.post_save.connect(create_item, sender=PownceNote)Create a client for download my pownce notelist and updates, thats a simple script with urllib for get content and populate to model
import logging as log
log.basicConfig(level=log.DEBUG)
import urllib
import simplejson
import datetime
import sys
mypath="/home/zodman/lab/dev/zodyblog/"
sys.path.append(mypath)
from django.core.management import setup_environ
from django.utils.dateformat import DateFormat
import settings
setup_environ(settings)
from zodyblog.zodynetwork.models import PownceLink, PownceNote, PownceEvent, PownceFile
def link( entry, note ):
link = PownceLink(url=entry["link"]["url"])
link.pownce_note = note
link.save()
def event( entry, note ):
event = PownceEvent(
name=entry["event"]["name"],
ical=entry["event"]["ical"],
location=entry["event"]["location"],
date=entry["event"]["date"],
pownce_note= note
)
event.save()
def file( entry, note ):
file = PownceFile(name=entry["file"]["name"],type=entry["file"]["content_type"],pownce_note=note)
file.save()
def message():
pass
URL = "http://api.pownce.com/2.0/"
user ="zodman"
class TZ(datetime.tzinfo):
def utcoffset(self,dt):
return datetime.timedelta(hours=-5)
def dst(self,dt):
return self.utcoffset(dt)
# load the pownce posts
p = urllib.urlopen(URL+"note_lists/zodman.json")
json_response = p.read()
notes = simplejson.loads(json_response)
for i in notes['notes']:
if 'sender' in i:
del i['sender']
if 'app' in i:
del i['app']
functions = {
"link": lambda i,note: link(i,note),
"message": lambda i,note: message(),
"event": lambda i,note: event(i,note),
"file": lambda i,note: file(i,note)
}
dt = datetime.datetime.fromtimestamp(i['timestamp'],TZ())
df = DateFormat(dt)
defaults = {"body":i["body"], "permalink":i["permalink"]}
note, created = PownceNote.objects.get_or_create(pownce_id=i['id'],date=df.format("Y-m-d H:i"),defaults=defaults)
if created:
functions[i["type"]](i,note)Well and show it on the template...
{% extends "index.html" %}
{% load markup %}
{% load zodytag %}
{% block contenido %}
{% for j in latest %}
{% ifequal j.content_type.name "entrada"%}
{%with j.content_object as e %}
<div class="entrada-all">
<span class="round-up-left"></span>
<span class="round-up-right"></span>
<div class="entrada">
<div class="x-small float-right" style="width:100px;height:20px">{{e.fecha|date}} </div>
<h2> {{e.titulo}} </h2>
{{e.contenido|markdown:"codehilite" }}
<div class="left x-small categorias">
{%for i in e.categoria.all %}
<a href="{{i.permalink}}"> {{i.nombre}}</a>
{% endfor %}
</div>
<div class="entrada-links">
<a href="{{e.permalink}}">Direct Link </a> |
<span class="a" onclick="addComment('{{e.pk}}')"> Comment ({% count_comment e.pk %}) </span>
</div>
</div>
</div>
{% endwith %}
{%endifequal%}
{% ifequal j.content_type.name "pownce note"%}
{% with j.content_object as e %}
<div class="pownce">
<span class="type"> {{e.get_type}}</span>
<span class="permalink"> <a href="{{e.permalink}}">permalink</a></span>
<div class="content">
{{e.body|truncatewords_html:20|urlize}}
</div>
<div class="content-type">
{% ifequal e.get_type "Link" %}
{% for i in e.powncelink_set.all %}
<div class="link">
<img src="/static/images/link.gif"><a href="{{i.url}}">{{ i.url|urlizetrunc:32 }}</a>
</div>
{% endfor %}
{% endifequal %}
{% ifequal e.get_type "Event" %}
{% for i in e.pownceevent_set.all %}
<div class="event">
<img src="/static/images/event.gif">
<a href="{{i.ical}}">
{{i.name}} /
{{i.location}} /
{{i.date|date:"Y F d"}}
</a>
</div>
{% endfor %}
{% endifequal %}
{% ifequal e.get_type "File" %}
{% for i in e.powncefile_set.all %}
<div class="file">
<img src="/static/images/file.gif">
<a href="{{e.permalink}}">
{{i.name}}
</a>
</div>
{% endfor %}
{% endifequal %}
</div>
</div>
{% endwith %}
{% endifequal %}
<div style="height:20px;"></div>
{% endfor %}
{% endblock %}I think this not the best way for show it but works for me
well if you have questions search me on irc.freenode.org or get my code on http://zodyblog.googlecode.com
the next to do, make a reusable app with this.