diff --git a/composer/schema/browser/base.py b/composer/schema/browser/base.py index ad4c95e..06d68db 100644 --- a/composer/schema/browser/base.py +++ b/composer/schema/browser/base.py @@ -24,7 +24,6 @@ $Id$ from zope import component from zope.cachedescriptors.property import Lazy -from zope.traversing.browser import absoluteURL from cybertools.composer.interfaces import IInstance from cybertools.composer.schema.interfaces import IClientFactory @@ -32,10 +31,11 @@ from cybertools.composer.schema.interfaces import IClientFactory class SchemaView(object): + clientName = None + def __init__(self, context, request): self.context = context self.request = request - self.clientName = None @Lazy def fields(self): @@ -43,12 +43,17 @@ class SchemaView(object): @Lazy def data(self): - form = self.request.form - clientName = self.clientName = form.get('id') + return self.getData() + + def getData(self): + if not self.clientName: + form = self.request.form + self.clientName = form.get('id') + clientName = self.clientName if not clientName: return {} - manager = self.context.manager - client = manager.clients.get(clientName) + manager = self.context.getManager() + client = manager.getClients().get(clientName) if client is None: return {} instance = IInstance(client) @@ -57,14 +62,15 @@ class SchemaView(object): def update(self): form = self.request.form + if not self.clientName: + self.clientName = form.get('id') + clientName = self.clientName if not form.get('action'): return True - manager = self.context.manager - clientName = form.get('id') + manager = self.context.getManager() if clientName: - client = manager.clients.get(clientName) + client = manager.getClients().get(clientName) if client is None: - # TODO: provide error message (?) return True else: client = IClientFactory(manager)() @@ -72,10 +78,12 @@ class SchemaView(object): instance = component.getAdapter(client, IInstance, name='editor') instance.template = self.context instance.applyTemplate(form) - self.request.response.redirect(self.nextUrl) - return False + return True + #self.request.response.redirect(self.nextUrl) + #return False @Lazy def nextUrl(self): + from zope.traversing.browser import absoluteURL url = absoluteURL(self.context, self.request) - return '%s/thank_you?id=%s' % (url, self.clientName) + return '%s/thankyou.html?id=%s' % (url, self.clientName) diff --git a/composer/schema/browser/configure.zcml b/composer/schema/browser/configure.zcml index b76d087..ee1c325 100644 --- a/composer/schema/browser/configure.zcml +++ b/composer/schema/browser/configure.zcml @@ -16,4 +16,11 @@ name="index.html" for="cybertools.composer.schema.interfaces.ISchema" /> + + diff --git a/composer/schema/schema.py b/composer/schema/schema.py index cd58c39..8fb28d9 100644 --- a/composer/schema/schema.py +++ b/composer/schema/schema.py @@ -37,8 +37,12 @@ class Schema(Template): manager = None def __init__(self, *fields, **kw): - self.name = kw.get('name', u'') - self.manager = self.__parent__ = kw.get('manager', None) + name = kw.get('name', None) + if name is not None: + self.name = name + manager = kw.get('manager', None) + if manager is not None: + self.manager = self.__parent__ = manager super(Schema, self).__init__() for f in fields: self.components.append(f) @@ -50,3 +54,6 @@ class Schema(Template): @property def __name__(self): return self.name + + def getManager(self): + return self.manager diff --git a/organize/service.py b/organize/service.py index 7365f86..ba56a3c 100644 --- a/organize/service.py +++ b/organize/service.py @@ -54,6 +54,9 @@ class ServiceManager(object): def clients(self): return self.clientsFactory() + def getClients(self): + return self.clients + def addClient(self, client): name = self.generateClientName(client) self.clients[name] = client @@ -97,3 +100,8 @@ class Registration(object): def __init__(self, client): self.client = client + +class RegistrationTemplate(object): + + pass +