Martin Lantzsch
Software Entwickler
29. März 2013

Django JSON POST decorator

29. März 2013 - Geschrieben von Martin - Keine Kommentare

Für den Django API Server bei Resigame habe ich einen neuen Decorator geschrieben, welcher Daten im JSON Format, die per POST übermittelt werden automatisch in eine Liste konvertiert und nach „request.POST“ schreibt. Brauchen wir, da die Daten via Backbone.js im JSON Format an die REST API gesendet werden.

resigame-api/decorators.py

from StringIO import StringIO
import json
 
 
def post_json(function):
    def wrap(request, *args, **kwargs):
        if request.raw_post_data is not '':
            try:
                request.POST = json.load(StringIO(request.raw_post_data))
            except:
                print 'invalid json in request.raw_post_data'
        return function(request, *args, **kwargs)
 
    return wrap

Einfach den Decorator @post_json anhängen, wenn z.B. folgende Daten gesendet werden:

{"x":100,"y":100,"name":"Resiiiiiiii"}

Anschließend befindet sich eine Liste mit den Daten in request.POST. Als wenn die Parameter und Werte normal übergeben worden wären.

12. Februar 2013

Python pip – Modul im Home Verzeichnis installieren

12. Februar 2013 - Geschrieben von Martin - Keine Kommentare

Bei älteren pip Versionen wird ein Python Modul wie hier z.B. „uptime“ mit folgendem Kommando in das Home Verzeichnis des aktuellen Benutzers installiert (z.B. /home/foo/.local/lib/pythonX.X/)

pip install --install-option="--user" uptime

bei neueren Versionen gibt es auch folgendes Shortcut

pip install --user uptime

26. August 2012

Mails auf IMAP Server automatisiert verschieben

26. August 2012 - Geschrieben von Martin - 2 Kommentare

Wie schon im Beitrag „too much – Tag 0“ erwähnt, habe ich nun einen Serverseitigen Mail Filter entwickelt, der mir alle Mails von Facebook, Twitter, etc. in einen extra Ordner verschiebt. Warum? Ganz einfach – weder mein Android Handy, als auch mein iPhone können Mail Filter auf die INBOX anwenden, also wurden die Mails nur automatisch einsortiert wenn zuhause mein Thunderbird lief. Da ich den Rechner aber kaum anwerfe sondern nur am Handy bin, platzte meine Inbox also immer aus allen Nähten.
Im übrigen hat das Serverseitige verschieben den positiven Nebeneffekt, das nicht mehr so viele Mails auf dem Handy laden und so weniger Traffic verbraucht wird.

Folgendes Python Script hab ich mir geschustert:

# 
# This python script is to move mails automated by a filter inside of an imap4 mailbox
# You can use it to sort out mails by several criteria, eg moving all mails from facebook to an seperate mailbox
#
# @author	Martin Lantzsch <martin@linux-doku.de>
#
 
import imaplib
 
# connect to server
m = imaplib.IMAP4('YOURSERVER.TLD')
m.login('USERNAME', 'PASSWORD')
 
# filter function
def filterMessages(mailbox, filter, newMailbox):
	m.select(mailbox, readonly=False)
	typ, data = m.search(None, filter)
	for num in data[0].split():
		typ, data = m.fetch(num, 'RFC822')
		m.copy(num, newMailbox)
		m.store(num, '+FLAGS', '\\Deleted')
		print 'Moved and deleted Message %s from %s to %s' % (num, mailbox, newMailbox)
	m.close()
 
# fire!
filterMessages('INBOX', '(FROM "@facebookmail.com")', 'INBOX.Internet.Facebook')
filterMessages('INBOX', '(FROM "@postmaster.twitter.com")', 'INBOX.Internet.Twitter')
 
# close connection
m.logout()

Wie die IMAP4 Filter funktionieren, ist in diesem Wiki ganz gut erklärt: SEARCH command

Nun einfach einen CronJob drauf setzen, der alle 10 Minuten das Script aufruft und schon hat man Ruhe :-)