[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
r5523 - trunk/gnue-appserver/src
From: |
johannes |
Subject: |
r5523 - trunk/gnue-appserver/src |
Date: |
Fri, 26 Mar 2004 04:03:13 -0600 (CST) |
Author: johannes
Date: 2004-03-26 04:03:12 -0600 (Fri, 26 Mar 2004)
New Revision: 5523
Modified:
trunk/gnue-appserver/src/geasInstance.py
Log:
Appserver now supports procedures with parameters (using the new language
adapter stuff)
Modified: trunk/gnue-appserver/src/geasInstance.py
===================================================================
--- trunk/gnue-appserver/src/geasInstance.py 2004-03-26 10:01:42 UTC (rev
5522)
+++ trunk/gnue-appserver/src/geasInstance.py 2004-03-26 10:03:12 UTC (rev
5523)
@@ -25,8 +25,8 @@
import string
import mx.DateTime
import mx.DateTime.ISO
-from gnue.common.logic.language.Base import loadLanguageEngine,
LangIfRuntimeError
from gnue.appserver.language import Object, Session
+from gnue.common.logic.language import getLanguageAdapter
# =============================================================================
# Exceptions
@@ -47,6 +47,14 @@
"property": propertyName}
gException.__init__ (self, message)
+class ParameterValueError (gException):
+ def __init__ (self, parameterName, value):
+ message = u_("Invalid value '%(value)s' for parameter '%(parameter)s'") \
+ % {"value" : repr (value),
+ "parameter": parameterName}
+ gException.__init__ (self, message)
+
+
# =============================================================================
# Instance class
# =============================================================================
@@ -79,7 +87,10 @@
elif isinstance (value, types.StringType):
return unicode (value)
else:
- raise exception (propertydef.fullName, value)
+ try:
+ return unicode (str (value))
+ except:
+ raise exception (propertydef.fullName, value)
elif propertydef.dbType == "number":
# Number property: Must be something that can be converted to an int or
@@ -212,50 +223,53 @@
# fetch the procedure definition
proceduredef = self.__classdef.procedures [procedurename]
- language = proceduredef.gnue_language
+ # check the parameters
+ for parameter in params.keys ():
+ paramDef = proceduredef.parameters [parameter]
+ params [parameter] = self.__convert (params [parameter], paramDef,
+ ParameterValueError)
- rtlist = self.__session.sm._langRuntimes
-
- if not rtlist.has_key(language):
- self.__session.sm._langRuntimes[language] = loadLanguageEngine(language)
- rtlist = self.__session.sm._langRuntimes
-
- cx=rtlist[language].createNewContext()
+ engine = getLanguageAdapter (proceduredef.gnue_language)
+ cx = engine.createNewContext ()
+
# describe the context
- cx.setDescription('%s.%s' % (self.__classdef.fullName,procedurename),
- 'a gnue-appserver procedure')
+ cx.shortname = '%s.%s' % (self.__classdef.fullName, procedurename)
+ cx.description = proceduredef.gnue_comment
# the object itself
- cx.bindObject( 'self', obj, Object.Object)
+ cx.bindObject ('self', obj, Object.Object)
# language interface, session functions
- cx.bindFunction('find', sess.find)
- cx.bindFunction('setcontext', sess.setcontext)
- cx.bindFunction('new', sess.new)
+ cx.bindFunction ('find', sess.find)
+ cx.bindFunction ('setcontext', sess.setcontext)
+ cx.bindFunction ('new', sess.new)
# direct access to RPC API func.
- cx.bindFunction('direct_request', self.__session.request)
- cx.bindFunction('direct_fetch', self.__session.fetch)
- cx.bindFunction('direct_load', self.__session.load)
- cx.bindFunction('direct_store', self.__session.store)
- cx.bindFunction('direct_call', self.__session.call)
+ cx.bindFunction ('direct_request', self.__session.request)
+ cx.bindFunction ('direct_fetch', self.__session.fetch)
+ cx.bindFunction ('direct_load', self.__session.load)
+ cx.bindFunction ('direct_store', self.__session.store)
+ cx.bindFunction ('direct_call', self.__session.call)
# set context for the procedure
sess.setcontext (proceduredef.module.gnue_name)
try:
- method = cx.buildMethod(proceduredef.gnue_name, proceduredef.gnue_code)
- retcode = method(params)
+ method = cx.buildFunction (proceduredef.gnue_name,
proceduredef.gnue_code,
+ params)
+ result = method (**params)
+
except Exception, msg:
+
print _("Error occured during method invokation: %s") % msg
- retcode = -1
+ result = None
# Save changes made by the procedure
# obj.store ()
# return value of '1' to make XMLRPC happy
- return retcode or 1
+ return result
# ---------------------------------------------------------------------------
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- r5523 - trunk/gnue-appserver/src,
johannes <=