Removing woven test code

This commit is contained in:
david 2003-05-18 15:03:03 +00:00
parent 5eb72be848
commit a9e2e0b892
16 changed files with 0 additions and 1147 deletions

View File

@ -1,14 +0,0 @@
build: tap
tap:
mktap lampadas
start: tap
twistd -n -f lampadas.tap
clean:
rm -f *.pyc
rm -f *.tap
rm -f *.log

View File

@ -1,3 +0,0 @@
"""
This is test code to implement Lampadas services on the Twisted framework.
"""

View File

@ -1,71 +0,0 @@
#!/usr/bin/python
from twisted.internet import app
from twisted.python import usage, components
from twisted.web.resource import Resource
from twisted.internet import reactor
from twisted.web.woven import model, view, controller, interfaces
from twisted.web.woven import widgets
from twisted.web import domhelpers, server
import twisted.web
import twisted.protocols.http
class MList(model.ListModel):
def __init__(self, orig, *args, **kwargs):
print 'Initializing...'
model.Model.__init__(self, *args, **kwargs)
model.ListModel.__init__(self, orig)
class VList(view.WView):
templateFile = 'example.xhtml'
#def setUp(self, request, document):
#print 'Initializing List View: '
def wvfactory_list(self, request, node, model):
#domhelpers.clearNode(node)
return widgets.List(model)
class CList(controller.WController):
pass
view.registerViewForModel(VList, MList)
controller.registerControllerForModel(CList, MList)
class Options(usage.Options):
optParameters = [["port", "p", 8080,
"Port to listen with Webserver"]]
class Page(twisted.web.widgets.WidgetPage):
template = '<html><head></head><body>%%%%self.widget%%%%</body></html>'
class Foo:
pass
foo = Foo()
foo.list = ['foo', 'bar']
class Gadget(twisted.web.widgets.Gadget):
def __init__(self):
print 'Initializing gadget'
twisted.web.widgets.Gadget.__init__(self)
self.pageFactory = Page
def getChild(self, path, request):
m = MList(foo.list)
v = VList(m, 'example.xhtml')
c = CList(m)
c.setView(v)
return v
def updateApplication(app, config):
port = config['port']
root = Gadget()
site = server.Site(root)
app.listenTCP(port, site)
root = Gadget()
site = server.Site(root)

View File

@ -1,13 +0,0 @@
<html>
<head>
</head>
<body>
<p class="listHeader"><b>A</b></p>
<ul view="list">
<li id="listItem" view="Text"></li>
</ul>
</body>
</html>

View File

@ -1,77 +0,0 @@
#!/usr/bin/python
from twisted.web.woven import model, view, controller
from twisted.web.woven import widgets, input
from twisted.web import domhelpers
#from TwistedQuotes import quoters
import cgi
class MQuote(model.WModel):
def __init__(self):
print 'Loading MQuote'
model.WModel.__init__(self)
#self._filename = filename
#self._quoter = quoters.FortuneQuoter([filename])
self.quote = "Hello, world!"
self.title = "Quotes Galore!"
self.newQuote = ""
def updateQuote(self):
self.quote = 'Hello, world!'
class QuoteWidget(widgets.Widget):
def setUp(self, request, node, data):
"""
Set up this Widget object before it gets rendered into HTML.
Since self is a Widget, I can use the higher level widget API to add a
Text widget to self. I then rely on Widget.generateDOM to convert
from Widgets into the Document Object Model.
"""
self.add(widgets.Text(cgi.escape(data)))
class VQuote(view.WView):
templateFile = "home.xhtml"
def setUp(self, request, document):
"""
Set things up for this request.
"""
self.model.updateQuote()
def wvfactory_quote(self, request, node, model):
"""Create a widget which knows how to render my model's quote."""
domhelpers.clearNode(node)
return QuoteWidget(model)
def wvfactory_title(self, request, node, model):
"""Create a widget which knows how to render my model's title."""
domhelpers.clearNode(node)
return widgets.Text(model)
class NewQuoteHandler(input.SingleValue):
def check(self, request, data):
if data:
return 1
def commit(self, request, node, newQuote):
print "committing new quote", `newQuote`
file = open(self.model.getQuoteFilename(), 'a')
file.write('\n%\n' + newQuote)
class CQuote(controller.WController):
def wcfactory_newQuote(self, model):
"""Create a handler which knows how to verify input in a form with the
name "newQuote"."""
return NewQuoteHandler(model)
view.registerViewForModel(VQuote, MQuote)
controller.registerControllerForModel(CQuote, MQuote)

View File

@ -1,22 +0,0 @@
#!/usr/bin/python
# -*- Python -*-
import home
#__file__ is defined to be the name of this file; this is to
#get the sibling file "quotes.txt" which should be in the same directory
import os
#quotefile = os.path.join(os.path.split(__file__)[0], "quotes.txt")
# Construct a model object which will contain the data for display by the
# web page
model = home.MQuote()
# ResourceScript requires us to define 'resource'. This resource is used
# to render the page.
resource = home.CQuote(model)
# The CQuote controller will look up a View (VQuote) and call render()
# on it, rendering the DOMTemplate

View File

@ -1,28 +0,0 @@
<html>
<head>
<title view="title" model="title">
Title will go here
</title>
<style>
.quote {color: red;}
</style>
</head>
<body>
<h1 view="title" model="title">
Title will go here
</h1>
<pre view="quote" model="quote" class="quote">
Quote will go here.
</pre>
<form action="">
<input type="text" model="newQuote" controller="newQuote" name="newQuote" />
<input type="submit" />
</form>
<a href="home.rpy">Refresh</a>
</body>
</html>

View File

@ -1,44 +0,0 @@
<html>
<head>
<title view="title">
<li id="listItem" view="RawText"></li>
</title>
</head>
<body>
<table width="100%">
<tr>
<td colspan="3">
<h1 view="title">
<li id="listItem" view="RawText"></li>
</h1>
<table align="right" view="section_bar"></table>
</td>
</tr>
<tr>
<td valign="top" view="menu">
<b id="emptyList">There are no sections.</b>
<p id="listItem" view="Text">
</p>
</td>
<td>
<p view="page_items">
<li id="emptyList">There are no embedded widgets.</li>
<li id="listItem" view="RawText"></li>
</p>
</td>
<td>
</td>
</tr>
<tr>
<td colspan="3">
Footer
</td>
</tr>
</table>
</body>
</html>

View File

@ -1,76 +0,0 @@
#!/usr/bin/python
# Lampadas imports
from Config import config
# Twisted imports
from twisted.internet import reactor
from twisted.enterprise import adbapi, row, reflector
from twisted.enterprise.sqlreflector import SQLReflector
from twisted.python import usage
from twisted.cred.authorizer import DefaultAuthorizer
from twisted.internet import defer
# Sibling imports
from row import ROW_CLASSES
class Block:
def __init__(self, refl):
self.refl = refl
def get_all(self, callback):
self.refl.loadObjectsFrom('block').addCallback(callback)
def get_by_code(self, code, callback):
w = [('block_code', reflector.EQUAL, code)]
self.refl.loadObjectsFrom('block', whereClause=w).addCallback(callback)
class Page:
def __init__(self, refl):
self.refl = refl
def get_all(self, callback):
self.refl.loadObjectsFrom('page').addCallback(callback)
def get_by_code(self, code, callback):
w = [('page_code', reflector.EQUAL, code)]
self.refl.loadObjectsFrom('page', whereClause=w).addCallback(callback)
class Section:
def __init__(self, refl):
self.refl = refl
def get_all(self, callback):
self.refl.loadObjectsFrom('section').addCallback(callback)
def get_by_code(self, code, callback):
w = [('section_code', reflector.EQUAL, code)]
self.refl.loadObjectsFrom('section', whereClause=w).addCallback(callback)
class String:
def __init__(self, refl):
self.refl = refl
def get_all(self, callback):
self.refl.loadObjectsFrom('string').addCallback(callback)
def get_by_code(self, code, callback):
w = [('string_code', reflector.EQUAL, code)]
self.refl.loadObjectsFrom('string', whereClause=w).addCallback(callback)
class Objects:
def connect(self, callback):
if config.db_type=='pgsql':
db_module = 'pyPgSQL.PgSQL'
else:
db_module = 'pyMySQL.MySQL'
self.dbpool = adbapi.ConnectionPool(db_module, database=config.db_name, user='www-data')
self.refl = SQLReflector(self.dbpool, ROW_CLASSES, callback)
self.block = Block(self.refl)
self.page = Page(self.refl)
self.section = Section(self.refl)
self.string = String(self.refl)
object_server = Objects()

View File

@ -1,80 +0,0 @@
#!/usr/bin/python
# Lampadas imports
from Config import config
# Twisted imports
from twisted.spread import pb
from twisted.internet import reactor
from twisted.enterprise import adbapi, row, reflector
from twisted.enterprise.sqlreflector import SQLReflector
from twisted.python import usage
from twisted.cred.authorizer import DefaultAuthorizer
from twisted.internet import defer
# Sibling imports
from row import BlockRow, PageRow, PageI18nRow
ROW_CLASSES = [BlockRow, PageRow, PageI18nRow]
def loaded(object):
print 'ObjectService loaded: ', object
return object
class Page(pb.Copyable):
def __init__(self, refl):
print 'Initializing Page'
refl.loadObjectsFrom('page').addCallback(self.loaded)
def loaded(self, pages):
print 'Page.loaded()'
self.pages = pages
def get_all(self, refl):
refl.loadObjectsFrom('page').addCallback(loaded)
def get_by_code(self, refl, code):
print 'ObjectService serving block: ', code
w = [('block_code', reflector.EQUAL, code)]
refl.loadObjectsFrom('block', whereClause=w).addCallback(loaded)
def connected(result):
print 'Object Server Ready.'
class Objects(pb.Perspective):
def __init__(self, perspectiveName, identityName='Nobody'):
pb.Perspective.__init__(self, perspectiveName, identityName)
if config.db_type=='pgsql':
self.db_module = 'pyPgSQL.PgSQL'
else:
self.db_module = 'pyMySQL.MySQL'
self.dbpool = adbapi.ConnectionPool(self.db_module, database=config.db_name, user='www-data')
self.refl = SQLReflector(self.dbpool, ROW_CLASSES, connected)
reactor.callLater(0.5, self.load)
def load(self):
print 'Objects.load()'
self.page = Page(self.refl)
def perspective_page(self):
print 'Client requested pages'
return self.page.pages
class ObjectService(pb.Service):
perspectiveClass = Objects
class Options(usage.Options):
optParameters = [['port', 'p', 8790, 'Port to listed on.']]
def updateApplication(app, config):
port = config['port']
if port:
auth = DefaultAuthorizer(app)
serv = ObjectService('lampadas.objects', app, auth)
serv.createPerspective("guest").makeIdentity("guest")
fact = pb.BrokerFactory(pb.AuthRoot(auth))
app.listenTCP(int(port), fact)
reactor.run()

View File

@ -1,29 +0,0 @@
#!/usr/bin/python
import object_server
from twisted.python import usage
from twisted.spread import pb
from twisted.cred.authorizer import DefaultAuthorizer
class Options(usage.Options):
optParameters = [["port", "p", 8790,
"Port to listen with ObjectService"]]
def updateApplication(app, config):
# port = int(config["port"])
# fact = pb.BrokerFactory(object_server.Block())
# app.listenTCP(port, factory)
# Test code, moving to use perspectives!
port = config['port']
if port:
auth = DefaultAuthorizer(app)
serv = object_server.ObjectService('lampadas.objects', app, auth)
serv.createPerspective("guest").makeIdentity("guest")
fact = pb.BrokerFactory(pb.AuthRoot(auth))
app.listenTCP(int(port), fact)
# appl = app.Application('pbsimple')
# appl.listenTCP(8789, pb.BrokerFactory(Block()))
# appl.run()

View File

@ -1,30 +0,0 @@
register("Lampadas Object Broker",
"lampadas.pbtap",
description="Lampadas Documentation Management object server.",
type="tap",
tapname="lampadas")
register("Lampadas Data Objects",
"lampadas.pbobjects",
description="Lampadas Data Object Server.",
type="tap",
tapname="objects")
register("Lampadas Website",
"lampadas.web",
description="Lampadas Website.",
type="tap",
tapname="lampadasweb")
register("Lampadas Woven Website",
"lampadas.woven",
description="Lampadas Woven Website.",
type="tap",
tapname="lampadaswoven")
register("Woven Example",
"lampadas.example",
description="Woven Example.",
type="tap",
tapname="example")

View File

@ -1,168 +0,0 @@
#!/usr/bin/python
from twisted.enterprise import row
from types import *
from Globals import trim
from BaseClasses import LampadasCollection
def rowFactory(Klass, userData, kw):
newObject = Klass()
for key in kw.keys():
value = kw[key]
if type(value) is StringType:
value = trim(value)
kw[key] = value
newObject.__dict__.update(kw)
return newObject
class Block(row.RowObject):
rowFactoryMethod = [rowFactory]
rowTableName = 'block'
rowKeyColumns = [('block_code', 'varchar')]
rowColumns = [('block_code', 'varchar'),
('block', 'varchar'),
('created', 'timestamp'),
('updated', 'timestamp')]
class Document(row.RowObject):
rowFactoryMethod = [rowFactory]
rowTableName = 'document'
rowKeyColumns = [('doc_id', 'int')]
rowColumns = [('doc_id', 'int'),
('lang', 'varchar'),
('title', 'varchar'),
('short_title', 'varchar'),
('type_code', 'varchar'),
('format_code', 'varchar'),
('dtd_code', 'varchar'),
('dtd_version', 'varchar'),
('version', 'varchar'),
('last_update', 'timestamp'),
('isbn', 'varchar'),
('pub_status_code', 'varchar'),
('review_status_code', 'varchar'),
('tickle_date', 'timestamp'),
('pub_date', 'timestamp'),
('tech_review_status_code', 'varchar'),
('maintained', 'bool'),
('maintainer_wanted', 'bool'),
('license_code', 'varchar'),
('license_version', 'varchar'),
('copyright_holder', 'varchar'),
('abstract', 'varchar'),
('short_desc', 'varchar'),
('rating', 'int'),
('sk_seriesid', 'int'),
('replaced_by_id', 'int'),
('lint_time', 'timestamp'),
('pub_time', 'timestamp'),
('mirror_time', 'timestamp'),
('first_pub_date', 'timestamp'),
('encoding', 'varchar'),
('created', 'timestamp'),
('updated', 'timestamp')]
class Page(row.RowObject):
rowFactoryMethod = [rowFactory]
rowTableName = 'page'
rowKeyColumns = [('page_code', 'varchar')]
rowColumns = [('page_code', 'varchar'),
('section_code', 'varchar'),
('sort_order', 'int'),
('template_code', 'varchar'),
('data', 'varchar'),
('only_dynamic', 'bool'),
('only_registered', 'bool'),
('only_admin', 'bool'),
('only_sysadmin', 'bool')]
def __init__(self):
self.title = LampadasCollection()
self.menu_name = LampadasCollection()
self.page = LampadasCollection()
self.version = LampadasCollection()
def addI18n(self, i18n):
lang = i18n.lang
self.title[lang] = i18n.title
self.menu_name[lang] = i18n.menu_name
self.page[lang] = i18n.page
self.version[lang] = i18n.version
class PageI18n(row.RowObject):
rowFactoryMethod = [rowFactory]
rowTableName = 'page_i18n'
rowKeyColumns = [('page_code', 'varchar'),
('lang', 'varchar')]
rowColumns = [('page_code', 'varchar'),
('lang', 'varchar'),
('title', 'text'),
('menu_name', 'text'),
('page', 'text'),
('version', 'varchar'),
('created', 'timestamp'),
('updated', 'timestamp')]
rowForeignKeys = [('page', [('page_code', 'varchar')], [('page_code', 'varchar')], 'addI18n', 1)]
class Section(row.RowObject):
rowFactoryMethod = [rowFactory]
rowTableName = 'section'
rowKeyColumns = [('section_code', 'varchar')]
rowColumns = [('section_code', 'varchar'),
('sort_order', 'int'),
('only_dynamic', 'bool'),
('created', 'timestamp'),
('updated', 'timestamp')]
def __init__(self):
self.section_name = LampadasCollection()
def addI18n(self, i18n):
lang = i18n.lang
self.section_name[lang] = i18n.section_name
class SectionI18n(row.RowObject):
rowFactoryMethod = [rowFactory]
rowTableName = 'section_i18n'
rowKeyColumns = [('section_code', 'varchar'),
('lang', 'varchar')]
rowColumns = [('section_code', 'varchar'),
('lang', 'varchar'),
('section_name', 'varchar'),
('created', 'timestamp'),
('updated', 'timestamp')]
rowForeignKeys = [('section', [('section_code', 'varchar')], [('section_code', 'varchar')], 'addI18n', 1)]
class String(row.RowObject):
rowFactoryMethod = [rowFactory]
rowTableName = 'string'
rowKeyColumns = [('string_code', 'varchar')]
rowColumns = [('string_code', 'varchar'),
('created', 'timestamp'),
('updated', 'timestamp')]
def __init__(self):
self.string = LampadasCollection()
self.version = LampadasCollection()
def addI18n(self, i18n):
lang = i18n.lang
self.string[lang] = i18n.string
self.version[lang] = i18n.version
class StringI18n(row.RowObject):
rowFactoryMethod = [rowFactory]
rowTableName = 'string_i18n'
rowKeyColumns = [('string_code', 'varchar'),
('lang', 'varchar')]
rowColumns = [('string_code', 'varchar'),
('lang', 'varchar'),
('string', 'varchar'),
('version', 'varchar'),
('created', 'timestamp'),
('updated', 'timestamp')]
rowForeignKeys = [('string', [('string_code', 'varchar')], [('string_code', 'varchar')], 'addI18n', 1)]
ROW_CLASSES = [Block, Document, Page, PageI18n, Section, SectionI18n, String, StringI18n]

View File

@ -1,48 +0,0 @@
#!/usr/bin/python
"""
This is a test client, that requests a Perspective
into the Lampadas Object Service.
"""
from twisted.python import log
log.discardLogs()
from twisted.internet import reactor
from twisted.spread import pb
def connected(perspective):
print 'Connected.'
perspective.callRemote('load').addCallbacks(success, failure)
perspective.callRemote('page').addCallbacks(success, failure)
def connect_failure(error):
print "Error connecting to ObjectService.."
reactor.stop()
def success(block):
print 'ObjectService gave me block: ' + block.code
reactor.stop()
def failure(error):
print "Failed to obtain a block from the ObjectService."
reactor.stop()
def gotRoot(root):
print 'Got root: ', root
print dir(root)
def gotNoRoot(error):
print 'Failed to obtain root: ', error
pb.connect("localhost", # host name
8790, # port number
"guest", # identity name
"guest", # password
"lampadas.objects", # service name
"guest", # perspective name (usually same as identity)
30 # timeout of 30 seconds before connection gives up
).addCallbacks(connected, # what to do when we get connected
connect_failure) # and what to do when we can't
pb.getObjectAt('localhost', 8790, 30).addCallbacks(gotRoot, gotNoRoot)
reactor.run() # start the main loop

View File

@ -1,53 +0,0 @@
#!/usr/bin/python
from twisted.internet import app
from twisted.web import server, widgets
from twisted.python import usage
from twisted.web.resource import Resource
from twisted.internet import reactor
from objects import object_server
class Options(usage.Options):
optParameters = [["port", "p", 8080,
"Port to listen with Webserver"]]
class Page(widgets.WidgetPage):
template = '<html><head></head><body>%%%%self.widget%%%%</body></html>'
class Gadget(widgets.Gadget):
def __init__(self):
print 'Initializing gadget'
widgets.Gadget.__init__(self)
self.pageFactory = Page
self.putWidget('hello', HelloWorld())
self.putWidget('', HelloWorld())
print 'connecting object_server...'
object_server.connect(self.connected)
def connected(self, message):
print 'object server is connected, loading pages...'
object_server.page.get_all(self.loaded)
def loaded(self, pages):
print 'Pages loaded:'
for row in pages:
page = WebPage()
page.row = row
self.putWidget(page.row.page_code, page)
class WebPage(widgets.Widget):
def display(self, request):
return [self.row.page_code]
class HelloWorld(widgets.Widget):
def display(self, request):
return ['Hello, world!']
def updateApplication(app, config):
port = config['port']
root = Gadget()
site = server.Site(root)
app.listenTCP(port, site)
root = Gadget()
site = server.Site(root)

View File

@ -1,391 +0,0 @@
#!/usr/bin/python
from twisted.internet import app
from twisted.web import server
from twisted.python import usage, components
from twisted.web.resource import Resource
from twisted.internet import reactor
from objects import object_server
from twisted.web.woven import model, view, controller, interfaces
from twisted.web.woven import widgets
from twisted.web import domhelpers
import cgi
import twisted.web
from Globals import state, VERSION
from URLParse import URI
from BaseClasses import LampadasCollection
# Custom Widgets
class I18nTextWidget(widgets.Text):
def __init__(self, text, raw=1, lang='EN'):
widgets.Text.__init__(self, text, raw=raw)
self.lang = lang
def getData(self):
return widgets.Text.getData(self)[self.lang]
class I18nListWidget(widgets.List):
def __init__(self, model=None, submodel=None, setup=None, lang='EN'):
widgets.List.__init__(self, model, submodel, setup)
self.lang = lang
def getData(self):
return widgets.List.getData(self)[self.lang]
class SectionBarWidget(widgets.Widget):
def generateDOM(self, request, node):
document = widgets.document
self.cleanNode(node)
tr_node = document.createElement('tr')
node.appendChild(tr_node)
for key in sections.sort_by('sort_order'):
td_node = document.createElement('td')
tr_node.appendChild(td_node)
a_node = document.createElement('a')
td_node.appendChild(a_node)
section = sections[key].object
href = '%ssection/%s%s' % (state.uri.base, section.section_code, state.uri.lang_ext)
name = section.section_name[state.uri.lang]
a_node.setAttribute('href', href)
text_node = document.createTextNode(name)
a_node.appendChild(text_node)
return self.node
# Holds an MVC triad as well as the original row object in a neat package.
class MVC:
def __init__(self, rowobject, business_object, object_model, object_view, object_controller):
self.row = rowobject
self.object = business_object
self.model = object_model
self.view = object_view
self.controller = object_controller
self.__dict__.update(rowobject.__dict__)
self.object.__dict__.update(rowobject.__dict__)
# Parse strings, replacing tokens and text with appropriate widgets.
def replace_token(token):
if token=='uri.base':
return state.uri.base
elif token=='uri.lang_ext':
return state.uri.lang_ext
elif token=='version':
return VERSION
elif token=='':
return ''
print 'Cannot replace token: ', token
return '<font color="red">%s</font>' % token
def build_items(object, text):
object.items = []
counter = 0
temp = text.replace('\|', 'DCM_PIPE')
for piece in temp.split('|'):
counter += 1
is_text = counter % 2
if is_text:
piece = piece.replace('DCM_PIPE', '\|')
if piece > '':
object.items.append(piece)
else:
if strings.has_key(piece):
object.items.append(strings[piece].string[lang])
elif blocks.has_key(piece):
object.items.append(blocks[piece].block[lang])
else:
newstring = replace_token(piece)
object.items.append(newstring)
return object.items
def build_lang_items(object, text):
object.items = LampadasCollection()
for lang in text.keys():
counter = 0
items = []
temp = text[lang].replace('\|', 'DCM_PIPE')
for piece in temp.split('|'):
counter += 1
is_text = counter % 2
if is_text:
piece = piece.replace('DCM_PIPE', '\|')
if piece > '':
items.append(piece)
else:
if strings.has_key(piece):
items.append(strings[piece].string[lang])
elif blocks.has_key(piece):
items.append(blocks[piece].block[lang])
else:
newstring = replace_token(piece)
items.append(newstring)
object.items[lang] = items
return object.items
# Collections of MVC triads.
# Each collection has its own MVC, and each object in the collection does as well.
class Blocks(LampadasCollection, model.WModel):
pass
class Block:
pass
class Pages(LampadasCollection, model.WModel):
pass
class Page:
pass
class Sections(LampadasCollection, model.WModel):
pass
class Section:
pass
class Strings(LampadasCollection, model.WModel):
pass
class String:
pass
blocks = Blocks()
pages = Pages()
sections = Sections()
strings = Strings()
class MBlock(model.WModel):
def __init__(self, rowobject):
model.WModel.__init__(self)
self.rowobject = rowobject
self.block_code = rowobject.block_code
self.block = rowobject.block
class VBlock(view.WView):
def wvfactory_block_code(self, request, node, model):
domhelpers.clearNode(node)
return widgets.Text(model)
def wvfactory_block(self, request, node, model):
domhelpers.clearNode(node)
return widgets.Text(model)
def wvfactory_block_items(self, request, node, model):
block_object = blocks[self.model.block_code].object
build_items(block_object, block_object.block)
return widgets.List(block_object.items)
class CBlock(controller.WController):
pass
view.registerViewForModel(VBlock, MBlock)
controller.registerControllerForModel(CBlock, MBlock)
class MPage(model.WModel):
def __init__(self, rowobject):
model.WModel.__init__(self)
self.__dict__.update(rowobject.__dict__)
class VPage(widgets.Widget):
templateFile = 'index.xhtml'
def setUp(self, request, document):
pass
def wvfactory_title(self, request, node, model):
page_object = pages[self.model.page_code]
build_lang_items(page_object.title, page_object.title)
return widgets.List(page_object.title.items[self.lang])
return I18nTextWidget(model, lang=self.lang)
def wvfactory_page_code(self, request, node, model):
return widgets.Text(model)
def wvfactory_page(self, request, node, model):
return I18nTextWidget(model, lang=self.lang)
def wvfactory_page_items(self, request, node, model):
page_object = pages[self.model.page_code].object
build_lang_items(page_object, page_object.page)
return widgets.List(page_object.items[self.lang])
def wvfactory_menu(self, request, node, model):
return widgets.List(sections.keys())
def wvfactory_section_bar(self, request, node, model):
return SectionBarWidget()
class CPage(controller.WController):
pass
view.registerViewForModel(VPage, MPage)
controller.registerControllerForModel(CPage, MPage)
class MString(model.WModel):
def __init__(self, rowobject):
model.WModel.__init__(self)
self.__dict__.update(rowobject.__dict__)
class VString(widgets.Widget):
templateFile = 'index.xhtml'
def setUp(self, request, document):
pass
def wvfactory_string_code(self, request, node, model):
return widgets.Text(model)
def wvfactory_string(self, request, node, model):
return I18nTextWidget(model, lang=self.lang)
def wvfactory_string_items(self, request, node, model):
string_object = strings[self.model.string_code].object
build_lang_items(string_object, string_object.string)
return widgets.List(string_object.items[self.lang])
def wvfactory_version(self, request, node, model):
return I18nTextWidget(model, lang=self.lang)
class CString(controller.WController):
pass
view.registerViewForModel(VString, MString)
controller.registerControllerForModel(CString, MString)
class MSection(model.DictionaryModel):
def __init__(self, orig, *args, **kwargs):
model.Model.__init__(self, *args, **kwargs)
model.DictionaryModel.__init__(self, orig)
class VSection(widgets.Widget):
def wvfactory_title(self, request, node, model):
return widgets.List(model)
class CSection(controller.WController):
pass
view.registerViewForModel(VSection, MSection)
controller.registerControllerForModel(CSection, MSection)
class MList(model.ListModel):
def __init__(self, orig, *args, **kwargs):
model.Model.__init__(self, *args, **kwargs)
model.ListModel.__init__(self, orig)
class VList(widgets.Widget):
def wvfactory_list(self, request, node, model):
#domhelpers.clearNode(node)
return widgets.List(model)
class CList(controller.WController):
pass
view.registerViewForModel(VList, MList)
controller.registerControllerForModel(CList, MList)
class Options(usage.Options):
optParameters = [["port", "p", 8080,
"Port to listen with Webserver"]]
class WidgetPage(twisted.web.widgets.WidgetPage):
template = '<html><head></head><body>%%%%self.widget%%%%</body></html>'
class Gadget(twisted.web.widgets.Gadget):
def __init__(self):
twisted.web.widgets.Gadget.__init__(self)
self.tables_loaded = 0
self.pageFactory = WidgetPage
object_server.connect(self.connected)
def connected(self, message):
object_server.section.get_all(self.loaded_sections)
object_server.string.get_all(self.loaded_strings)
object_server.block.get_all(self.loaded_blocks)
def loaded_blocks(self, blockrows):
for blockrow in blockrows:
block_object = Block()
block_model = MBlock(blockrow)
block_view = VBlock(block_model)
block_controller = CBlock(block_model)
block_controller.setView(block_view)
block_mvc = MVC(blockrow, block_object, block_model, block_view, block_controller)
blocks[blockrow.block_code] = block_mvc
print 'Blocks loaded.'
self.tables_loaded += 1
if self.tables_loaded==3:
self.load_pages()
def load_pages(self):
object_server.page.get_all(self.loaded_pages)
def loaded_pages(self, pagerows):
for pagerow in pagerows:
page_object = Page()
page_model = MPage(pagerow)
page_view = VPage(page_model)
page_controller = CPage(page_model)
page_controller.setView(page_view)
page_mvc = MVC(pagerow, page_object, page_model, page_view, page_controller)
pages[pagerow.page_code] = page_mvc
print 'Pages loaded.'
def loaded_sections(self, sectionrows):
for sectionrow in sectionrows:
section_object = Section()
section_model = MSection(sectionrow)
section_view = VSection(section_model)
section_controller = CSection(section_model)
section_controller.setView(section_view)
section_mvc = MVC(sectionrow, section_object, section_model, section_view, section_controller)
sections[sectionrow.section_code] = section_mvc
print 'Sections loaded.'
self.tables_loaded += 1
if self.tables_loaded==3:
self.load_pages()
def loaded_strings(self, stringrows):
for stringrow in stringrows:
string_object = String()
string_model = MString(stringrow)
string_view = VString(string_model)
string_controller = CString(string_model)
string_controller.setView(string_view)
string_mvc = MVC(stringrow, string_object, string_model, string_view, string_controller)
strings[stringrow.string_code] = string_mvc
print 'Strings loaded.'
self.tables_loaded += 1
if self.tables_loaded==3:
self.load_pages()
def getChild(self, path, request):
state.uri = URI(request.path)
if pages.has_key(state.uri.page_code):
resource = pages[state.uri.page_code].view
else:
resource = pages['404'].view
resource.lang = state.uri.lang
return resource
def updateApplication(app, config):
port = config['port']
root = Gadget()
site = server.Site(root)
app.listenTCP(port, site)
root = Gadget()
site = server.Site(root)