diff --git a/composer/schema/browser/common.py b/composer/schema/browser/common.py index fb1fcb8..9747f3f 100644 --- a/composer/schema/browser/common.py +++ b/composer/schema/browser/common.py @@ -23,12 +23,16 @@ $Id$ """ from zope import component +from zope.app.session.interfaces import ISession from zope.cachedescriptors.property import Lazy from cybertools.composer.interfaces import IInstance from cybertools.composer.schema.interfaces import IClientFactory +packageId = 'cybertools.composer.schema' + + class BaseView(object): clientName = None @@ -37,6 +41,22 @@ class BaseView(object): self.context = context self.request = request + def getClientName(self): + clientName = self.clientName + if clientName: + return clientName + clientName = self.request.form.get('id') + if clientName: + self.setSessionInfo('clientName', clientName) + else: + clientName = self.getSessionInfo('clientName') + self.clientName = clientName + return clientName + + def setClientName(self, clientName): + self.clientName = clientName + self.setSessionInfo('clientName', clientName) + @Lazy def manager(self): return self.context.getManager() @@ -89,3 +109,12 @@ class BaseView(object): viewName = self.buttonActions[bn](self) break return '%s/%s?id=%s' % (self.url, viewName, self.clientName) + + def setSessionInfo(self, key, value, packageId=packageId): + session = ISession(self.request)[packageId] + if session.get(key) != value: + session[key] = value + + def getSessionInfo(self, key, default=None, packageId=packageId): + session = ISession(self.request)[packageId] + return session.get(key, default) diff --git a/composer/schema/browser/schema.py b/composer/schema/browser/schema.py index d802280..fdeca3b 100644 --- a/composer/schema/browser/schema.py +++ b/composer/schema/browser/schema.py @@ -45,9 +45,7 @@ class SchemaView(BaseView): def getData(self): form = self.request.form - if not self.clientName: - self.clientName = form.get('id') - clientName = self.clientName + clientName = self.getClientName() if not clientName: return {} manager = self.context.getManager() @@ -66,9 +64,7 @@ class SchemaView(BaseView): def update(self): newClient = False form = self.request.form - if not self.clientName: - self.clientName = form.get('id') - clientName = self.clientName + clientName = self.getClientName() if not form.get('action'): return True manager = self.context.getManager() @@ -77,6 +73,7 @@ class SchemaView(BaseView): if client is None: # no valid clientName - show empty form return True + #self.setClientName(clientName) # store in view and session else: client = IClientFactory(manager)() # only add client to manager after validation, so we have @@ -89,7 +86,8 @@ class SchemaView(BaseView): # show form again; do not add client to manager return True if newClient: - clientName = self.clientName = manager.addClient(client) + clientName = manager.addClient(client) + self.setClientName(clientName) self.request.response.redirect(self.nextUrl()) return False diff --git a/composer/schema/field.py b/composer/schema/field.py index deea6fa..2eb042f 100644 --- a/composer/schema/field.py +++ b/composer/schema/field.py @@ -84,8 +84,8 @@ class FieldInstance(object): return value #return toStr(value) - def unmarshall(self, strValue): - return toUnicode(strValue) or u'' + def unmarshall(self, value): + return toUnicode(value) or u'' def validate(self, value): if not value and self.context.required: @@ -109,10 +109,10 @@ class NumberFieldInstance(FieldInstance): return '-' return str(value) - def unmarshall(self, strValue): - if not strValue: + def unmarshall(self, value): + if not value: return None - return int(strValue) + return int(value) def validate(self, value): if value in ('', None): diff --git a/organize/browser/service.py b/organize/browser/service.py index e357746..13e6235 100644 --- a/organize/browser/service.py +++ b/organize/browser/service.py @@ -134,10 +134,7 @@ class RegistrationTemplateView(SchemaBaseView): return self.context.getServices().values() def getRegistrations(self): - if not self.clientName: - form = self.request.form - self.clientName = form.get('id') - clientName = self.clientName + clientName = self.getClientName() if not clientName: return [] manager = self.context.getManager() @@ -153,9 +150,7 @@ class RegistrationTemplateView(SchemaBaseView): def update(self): form = self.request.form - if not self.clientName: - self.clientName = form.get('id') - clientName = self.clientName + clientName = self.getClientName() if not form.get('action'): return True manager = self.context.getManager() @@ -163,6 +158,7 @@ class RegistrationTemplateView(SchemaBaseView): client = manager.getClients().get(clientName) if client is None: return True + #self.setClientName(clientName) # store in view and session else: client = IClientFactory(manager)() clientName = self.clientName = manager.addClient(client)