row_example.py :  » Network » Twisted » Twisted-1.0.3 » Twisted-1.0.3 » doc » examples » Python Open Source

Home
Python Open Source
1.3.1.2 Python
2.Ajax
3.Aspect Oriented
4.Blog
5.Build
6.Business Application
7.Chart Report
8.Content Management Systems
9.Cryptographic
10.Database
11.Development
12.Editor
13.Email
14.ERP
15.Game 2D 3D
16.GIS
17.GUI
18.IDE
19.Installer
20.IRC
21.Issue Tracker
22.Language Interface
23.Log
24.Math
25.Media Sound Audio
26.Mobile
27.Network
28.Parser
29.PDF
30.Project Management
31.RSS
32.Search
33.Security
34.Template Engines
35.Test
36.UML
37.USB Serial
38.Web Frameworks
39.Web Server
40.Web Services
41.Web Unit
42.Wiki
43.Windows
44.XML
Python Open Source » Network » Twisted 
Twisted » Twisted 1.0.3 » Twisted 1.0.3 » doc » examples » row_example.py
import random

from twisted.internet import reactor
from twisted.internet.app import Application

from twisted.enterprise import adbapi,row,reflector,sqlreflector

from row_util import *

""" This example show using twisted.enterpise.row to load objects from
a database and manipulate them.
"""

manager = None

def gotRooms(rooms):
    print "got Rooms.", rooms
    if not rooms:
        print "no rooms found!"
        reactor.stop()

    for room in rooms:
        print "room  ", room
        for child in room.furniture:
            print "furn     ", child            
            if hasattr(child, "childRows"):
                for inner in child.childRows:
                    print "inner        ", inner

    room.moveTo( int(random.random() * 100) , int(random.random() * 100) )
    manager.updateRow(room).addCallback(onUpdate)

def gotFurniture(furniture):
    for f in furniture:
        print f
    reactor.stop()
        
def onUpdate(data):
    print "updated row."
    # create a new room
    global newRoom
    newRoom = RoomRow()
    newRoom.assignKeyAttr("roomId", kf.getNextKey())
    newRoom.town_id = 20
    newRoom.name = 'newRoom1'
    newRoom.owner = 'fred'
    newRoom.posx = 100
    newRoom.posy = 100
    newRoom.width = 15
    newRoom.height = 20
    
    #insert row into database
    manager.insertRow(newRoom).addCallback(onInsert)

def onInsert(data):
    global newRoom
    print "row inserted"
    print newRoom.roomId
    manager.deleteRow(newRoom).addCallback(onDelete)

def onDelete(data):
    print "row deleted."
    return manager.loadObjectsFrom("furniture", whereClause=[("furnId",reflector.EQUAL,53)], forceChildren=1 ).addCallback(onSelected)

def onSelected(furn):
    for f in furn:
        print "\ngot Furn:", f
        if hasattr(f, "childRows"):
            for l in f.childRows:
                print "   ", l
    reactor.stop()

def gotRooms2(rooms):
    print "got more rooms", rooms
    reactor.stop()

def tick():
    reactor.callLater(0.5, tick)

newRoom = None


# use this line for postgresql test
dbpool = adbapi.ConnectionPool("pyPgSQL.PgSQL", database="test")

# use this line for SQLite test
#dbpool = adbapi.ConnectionPool("sqlite", db="test")

# use this line for Interbase / Firebird
#dbpool = adbapi.ConnectionPool("kinterbasdb", dsn="localhost:/test.gdb",user="SYSDBA",password="masterkey")

# use this for MySQL
#dbpool = adbapi.ConnectionPool("MySQLdb", db="test", passwd="pass")

# Create Twisted application object
application = Application("testApp")

def kickOffTests(ignoredResult=0):
    global manager
    manager = sqlreflector.SQLReflector(dbpool, [RoomRow, FurnitureRow, RugRow, LampRow])
    manager.loadObjectsFrom("testrooms", forceChildren=1).addCallback(gotRooms)

kf = row.KeyFactory(100000,50000)

# make sure we can be shut down on windows.
reactor.callLater(0.5, tick)
reactor.callLater(0.4, kickOffTests)
reactor.run()
www.java2java.com | Contact Us
Copyright 2009 - 12 Demo Source and Support. All rights reserved.
All other trademarks are property of their respective owners.