[pirate-politics] r625 committed - forgot to add pirate_social module, as per usual

2 views
Skip to first unread message

pirate-...@googlecode.com

unread,
Feb 17, 2011, 4:31:38 AM2/17/11
to pirate-poli...@googlegroups.com
Revision: 625
Author: fragro
Date: Thu Feb 17 01:27:45 2011
Log: forgot to add pirate_social module, as per usual
http://code.google.com/p/pirate-politics/source/detail?r=625

Added:
/trunk/pirate-politics/pirate_messages/templatetags/messagetags.py
/trunk/pirate-politics/pirate_social
/trunk/pirate-politics/pirate_social/__init__.py
/trunk/pirate-politics/pirate_social/models.py
/trunk/pirate-politics/pirate_social/templatetags
/trunk/pirate-politics/pirate_social/templatetags/__init__.py
/trunk/pirate-politics/pirate_social/templatetags/feedtags.py
/trunk/pirate-politics/pirate_social/templatetags/subscriptiontags.py
/trunk/pirate-politics/pirate_social/tests.py
/trunk/pirate-politics/pirate_social/views.py

=======================================
--- /dev/null
+++ /trunk/pirate-politics/pirate_messages/templatetags/messagetags.py Thu
Feb 17 01:27:45 2011
@@ -0,0 +1,82 @@
+from django import template
+from django import forms
+from django.http import HttpResponse, HttpResponseRedirect
+from django.utils import simplejson
+from pirate_messages.models import Message
+from django.db import transaction
+from django.middleware import csrf
+from django.contrib.contenttypes.models import ContentType
+from django.utils.encoding import smart_str
+from ajaxapi.views import clean_html
+from pirate_core.views import template_for_model
+
+import datetime
+from pirate_signals.models import notification_send
+
+from django.shortcuts import get_object_or_404
+
+from pirate_core.views import HttpRedirectException, namespace_get
+
+from customtags.decorators import block_decorator
+register = template.Library()
+block = block_decorator(register)
+
+get_namespace = namespace_get('pp_messages')
+
+
+@block
+def pp_get_messages(context, nodelist, *args, **kwargs):
+
+ context.push()
+ namespace = get_namespace(context)
+
+ user = kwargs.get('user', None)
+
+ notes = Notification.objects.all()
+ notes = notes.filter(receiver=user,is_read=False)
+ count = len(list(notes))
+
+ if count == 0: has_mail = False
+ else: has_mail = True
+ namespace['has_mail'] = has_mail
+ namespace['count'] = count
+
+ output = nodelist.render(context)
+ context.pop()
+
+ return output
+
+
+@block
+def pp_message_form(context, nodelist, *args, **kwargs):
+
+ context.push()
+ namespace = get_namespace(context)
+
+ sender = kwargs.get('sender', None)
+ receiver = kwargs.get('reciever', None)
+
+ if POST and POST.get("form_id") == "pp_message_form":
+ form = MessageForm(POST)
+ if form.is_valid():
+ mes =
Message(sender=sender,receiver=receiver,created_dt=datetime.datetime.now(),read=False,text=form['clean'])
+ mes.save()
+ c_type = ContentType.objects.get_for_model(sender)
+ raise
HttpRedirectException(HttpResponseRedirect("/user_profile.html?_t=" +
str(c_type.pk) + "&_o=" + str(sender.pk)))
+ else: form = MessageForm()
+
+ namespace['form'] = form
+
+ output = nodelist.render(context)
+ context.pop()
+
+ return output
+
+class MessageForm(forms.ModelForm):
+ """This form is used to create a subscription object between two
users."""
+
+ class Meta:
+ model = Message
+ exclude = ('read','sender','reciever',)
+
+ form_id = forms.CharField(widget=forms.HiddenInput(),
initial="pp_message_form")
=======================================
--- /dev/null
+++ /trunk/pirate-politics/pirate_social/models.py Thu Feb 17 01:27:45 2011
@@ -0,0 +1,77 @@
+from django.db import models
+from django.contrib.contenttypes import generic
+from django.contrib.contenttypes.models import ContentType
+import datetime
+import django.dispatch
+from django.contrib import admin
+from django.utils.translation import ugettext as _
+from django.contrib.auth.models import User
+
+from django.core.exceptions import ValidationError
+from pirate_signals.models import relationship_event
+
+class Subscription(models.Model):
+ subscriber = models.ForeignKey(User, verbose_name=_('subscriber'),
related_name=_('subscriber'))
+ subscribee = models.ForeignKey(User, verbose_name=_('subscribee'),
related_name=_('subscribee'))
+ created_dt = models.DateTimeField(_('date/time subscription created'),
auto_now_add=True)
+
+ def __str__(self):
+ return str(self.subscriber.username) + ":" +
str(self.subscribee.username)
+
+class RelationshipEvent(models.Model):
+ initiator = models.ForeignKey(User, verbose_name=_('initiator user'),
related_name=_('initiator'))
+ target = models.ForeignKey(User, verbose_name=_('target user'),
related_name=_('target'), null=True)
+ created_on = models.DateTimeField(_('date/time occured'),
auto_now_add=True)
+ ini_content_type = models.ForeignKey(ContentType,
+ verbose_name=_('initiator content
type'),
+
related_name="ini_content_type_set_for_%(class)s")
+ ini_object_pk = models.IntegerField(_('initiator object ID'))
+ ini_content_object =
generic.GenericForeignKey(ct_field="ini_content_type",
fk_field="ini_object_pk")
+ tar_content_type = models.ForeignKey(ContentType,
+ verbose_name=_('target content
type'),
+
related_name="tar_content_type_set_for_%(class)s", null=True)
+ tar_object_pk = models.IntegerField(_('target object ID'), null=True)
+ tar_content_object =
generic.GenericForeignKey(ct_field="tar_content_type",
fk_field="tar_object_pk")
+
+
+ class Meta:
+ # Enforce unique tag association per object
+ verbose_name = _('relationship event')
+ verbose_name_plural = _('relationship events')
+ unique_together = (('initiator','ini_object_pk','tar_object_pk'),)
+
+ def __str__(self):
+ return u'[%s:%s]' % (self.initiator.username, self.created_on)
+
+ def get_ini_type(self):
+ return str(self.ini_content_type)
+
+
+def register_relationship_event(obj, parent, **kwargs):
+ ini_c_type = ContentType.objects.get_for_model(obj)
+ if parent != None: parent_c_type =
ContentType.objects.get_for_model(parent)
+ initiator = kwargs.get('initiator',None)
+ if initiator == None:
+ try: initiator = obj.user
+ except: pass
+ if parent != None: rel = RelationshipEvent(initiator=initiator,
+ ini_object_pk=obj.pk,
+ ini_content_type=ini_c_type,
+ tar_object_pk=parent.pk,
+ tar_content_type=parent_c_type,
+ target=parent.user)
+ else: rel = RelationshipEvent(initiator=initiator,
+ ini_object_pk=obj.pk,
+ ini_content_type=ini_c_type)
+ try:
+ rel.full_clean()
+ rel.save()
+ except ValidationError, e:
+ pass #This RelationshipEvent already exists
+
+
+
+relationship_event.connect(register_relationship_event)
+
+admin.site.register(RelationshipEvent)
+admin.site.register(Subscription)
=======================================
--- /dev/null
+++ /trunk/pirate-politics/pirate_social/templatetags/feedtags.py Thu Feb
17 01:27:45 2011
@@ -0,0 +1,51 @@
+from django import template
+from django import forms
+from django.http import HttpResponseRedirect
+
+from pirate_social.models import Subscription,RelationshipEvent
+
+from pirate_core.views import HttpRedirectException, namespace_get
+
+from customtags.decorators import block_decorator
+register = template.Library()
+block = block_decorator(register)
+
+get_namespace = namespace_get('pp_feed')
+
+@block
+def pp_get_feed(context, nodelist, *args, **kwargs):
+
+ """
+ This function get's recent feeds from a user's Subscriptions, with
minimal
+ unnecessary database calls. This function could be further optimized
however.
+ {% pp_get_feed user=request.user %}
+ {% for f in pp_feed.feed %}
+ {{f}}
+ {% endfor %}
+ {% endpp_get_feed %}"""
+
+ context.push()
+ namespace = get_namespace(context)
+
+ user = kwargs.pop('user', None)
+ subs = Subscription.objects.all()
+ subs = subs.filter(subscriber=user)
+ eval_str = ""
+
+ query_dict = {}
+ for s in subs:
+ u = s.subscribee
+ rels = RelationshipEvent.objects.all()
+ rels = rels.filter(initiator=u)
+ query_dict[u.id] = rels
+ eval_str += "query_dict[" + str(u.id) + "] | "
+ if eval_str != "":
+ master_query = eval(eval_str[:len(eval_str)-2])
+ master_query = master_query.order_by('-created_on')
+ else: master_query = []
+
+ namespace['feed'] = master_query
+ output = nodelist.render(context)
+ context.pop()
+
+ return output
=======================================
--- /dev/null
+++ /trunk/pirate-politics/pirate_social/templatetags/subscriptiontags.py
Thu Feb 17 01:27:45 2011
@@ -0,0 +1,128 @@
+from django import template
+from django import forms
+from django.http import HttpResponseRedirect
+import datetime
+from django.contrib.auth.models import User
+from django.contrib.contenttypes.models import ContentType
+from pirate_core import HttpRedirectException, namespace_get, FormMixin
+from pirate_social.models import Subscription
+
+from pirate_signals.models import aso_rep_event, notification_send
+
+from customtags.decorators import block_decorator
+register = template.Library()
+block = block_decorator(register)
+
+get_namespace = namespace_get('pp_subscription')
+
+@block
+def pp_get_subscribees_for_user(context, nodelist, *args, **kwargs):
+ context.push()
+ namespace = get_namespace(context)
+
+ user = kwargs.pop('user', None)
+ if user is None:
+ raise ValueError("pp_subscription_form tag requires that a User
object be passed "
+ "to it assigned to the 'user=' argument")
+
+ subs = Subscription.objects.all()
+ subs = subs.filter(subscriber=user)
+ count = subs.count()
+
+ namespace['subscribees'] = subs
+ namespace['count'] = count
+ output = nodelist.render(context)
+ context.pop()
+
+ return output
+
+@block
+def pp_subscriber_count(context, nodelist, *args, **kwargs):
+ context.push()
+ namespace = get_namespace(context)
+
+ user = kwargs.pop('user', None)
+ if user is None:
+ raise ValueError("pp_subscription_form tag requires that a User
object be passed "
+ "to it assigned to the 'user=' argument")
+
+ subs = Subscription.objects.all()
+ subs = subs.filter(subscribee=user)
+ count = subs.count()
+
+ namespace['count'] = count
+ output = nodelist.render(context)
+ context.pop()
+
+ return output
+
+@block
+def pp_has_subscription(context, nodelist, *args, **kwargs):
+
+ context.push()
+ namespace = get_namespace(context)
+
+ # this tag only works if a valid pair is assigned to the 'object='
argument
+ POST = kwargs.get('POST', None)
+ subscriber = kwargs.pop('subscriber', None)
+ subscribee = kwargs.pop('subscribee', None)
+ if subscriber is None:
+ raise ValueError("pp_subscription_form tag requires that a object
be passed "
+ "to it assigned to the 'subscriber='
argument")
+ if subscribee is None:
+ raise ValueError("pp_subscription_form tag requires that a object
be passed "
+ "to it assigned to the 'subscribee='
argument")
+
+ try:
+
Subscription.objects.get(subscriber=subscriber,subscribee=subscribee)
+ namespace['has_subscription'] = True
+ except: namespace['has_subscription'] = False
+
+ output = nodelist.render(context)
+ context.pop()
+
+ return output
+
+
+@block
+def pp_subscription_form(context, nodelist, *args, **kwargs):
+
+ context.push()
+ namespace = get_namespace(context)
+
+ # this tag only works if a valid pair is assigned to the 'object='
argument
+ POST = kwargs.get('POST', None)
+ subscriber = kwargs.pop('subscriber', None)
+ subscribee = kwargs.pop('subscribee', None)
+ if subscriber is None:
+ raise ValueError("pp_subscription_form tag requires that a object
be passed "
+ "to it assigned to the 'subscriber='
argument")
+ if subscribee is None:
+ raise ValueError("pp_subscription_form tag requires that a object
be passed "
+ "to it assigned to the 'subscribee='
argument")
+
+
+ if POST and POST.get("form_id") == "pp_subscription_form":
+ form = SubscriptionForm(POST)
+ if form.is_valid():
+ sub =
Subscription(subscriber=subscriber,subscribee=subscribee,created_dt=datetime.datetime.now())
+ sub.save()
+ c_type = ContentType.objects.get_for_model(subscribee)
+ raise
HttpRedirectException(HttpResponseRedirect("/user_profile.html?_t=" +
str(c_type.pk) + "&_o=" + str(subscribee.pk)))
+ else: form = SubscriptionForm()
+
+ if subscriber != subscribee: namespace['form'] = form
+ output = nodelist.render(context)
+ context.pop()
+
+ return output
+
+class SubscriptionForm(forms.ModelForm):
+ """This form is used to create a subscription object between two
users."""
+
+ class Meta:
+ model = Subscription
+ exclude = ('subscriber','subscribee')
+
+ form_id = forms.CharField(widget=forms.HiddenInput(),
initial="pp_subscription_form")
+
=======================================
--- /dev/null
+++ /trunk/pirate-politics/pirate_social/tests.py Thu Feb 17 01:27:45 2011
@@ -0,0 +1,23 @@
+"""
+This file demonstrates two different styles of tests (one doctest and one
+unittest). These will both pass when you run "manage.py test".
+
+Replace these 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.failUnlessEqual(1 + 1, 2)
+
+__test__ = {"doctest": """
+Another way to test that 1 + 1 is equal to 2.
+
+>>> 1 + 1 == 2
+True
+"""}
+
=======================================
--- /dev/null
+++ /trunk/pirate-politics/pirate_social/views.py Thu Feb 17 01:27:45 2011
@@ -0,0 +1,1 @@
+# Create your views here.

Reply all
Reply to author
Forward
0 new messages