[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
r6406 - in trunk: gnue-appserver/samples gnue-appserver/share gnue-appse
From: |
johannes |
Subject: |
r6406 - in trunk: gnue-appserver/samples gnue-appserver/share gnue-appserver/src gnue-appserver/src/gcd gnue-appserver/src/language gnue-common/src/datasources/drivers/appserver/appserver |
Date: |
Mon, 27 Sep 2004 14:29:31 -0500 (CDT) |
Author: johannes
Date: 2004-09-27 14:29:30 -0500 (Mon, 27 Sep 2004)
New Revision: 6406
Modified:
trunk/gnue-appserver/samples/sample-de.gld
trunk/gnue-appserver/share/gnue.gsd
trunk/gnue-appserver/share/repository.ini
trunk/gnue-appserver/src/gcd/GCParser.py
trunk/gnue-appserver/src/gcd/readgcd.py
trunk/gnue-appserver/src/geasInstance.py
trunk/gnue-appserver/src/geasSession.py
trunk/gnue-appserver/src/geasSessionManager.py
trunk/gnue-appserver/src/language/Session.py
trunk/gnue-common/src/datasources/drivers/appserver/appserver/Connection.py
Log:
*) Added automatich timestamping to appserver
*) Added filter-capability to appserver
*) Added a 'session' object to procedure-namespace, giving access to the
current session (including all it's functions and properties)
Modified: trunk/gnue-appserver/samples/sample-de.gld
===================================================================
--- trunk/gnue-appserver/samples/sample-de.gld 2004-09-27 19:22:20 UTC (rev
6405)
+++ trunk/gnue-appserver/samples/sample-de.gld 2004-09-27 19:29:30 UTC (rev
6406)
@@ -18,7 +18,7 @@
<property name="born" pos="800" label="Geburtsdatum"/>
<property name="lastmeeting" pos="900" label="Letzte Sitzung"/>
<property name="meettime" pos="1000" label="Sitzungszeit"/>
- <procedure name="getnextmeeting" pos="1100" label="Nächste Sitzung"/>
+ <property name="nextmeeting" pos="1100" label="Nächste Sitzung"/>
<property name="human" pos="1200" label="Menschlich"/>
</class>
Modified: trunk/gnue-appserver/share/gnue.gsd
===================================================================
--- trunk/gnue-appserver/share/gnue.gsd 2004-09-27 19:22:20 UTC (rev 6405)
+++ trunk/gnue-appserver/share/gnue.gsd 2004-09-27 19:29:30 UTC (rev 6406)
@@ -65,6 +65,8 @@
description="Module that defined this class" />
<field name="gnue_name" type="string" length="35" nullable="N"
description="Classname without modulename" />
+ <field name="gnue_filter" type="string" length="35"
+ description="Master-Class of the class" />
</fields>
<indexes/>
<constraints>
@@ -262,6 +264,49 @@
</primarykey>
</table>
+ <!-- ============================================================ -->
+ <!-- Company -->
+ <!-- ============================================================ -->
+ <table name="gnue_company">
+ <fields>
+ <field name="gnue_id" type="string" length="32" nullable="N"
+ description="Object ID"/>
+ <field name="gnue_code" type="string" length="8" nullable="N"
+ description="Code of the company"/>
+ <field name="gnue_name" type="string" length="35" nullable="N"
+ description="Name of the company"/>
+ </fields>
+ <indexes/>
+ <constraints/>
+ <primarykey name="pk_gnue_company">
+ <pkfield name="gnue_id"/>
+ </primarykey>
+ </table>
+
+ <!-- ============================================================ -->
+ <!-- Year -->
+ <!-- ============================================================ -->
+ <table name="gnue_year">
+ <fields>
+ <field name="gnue_id" type="string" length="32" nullable="N"
+ description="Object ID"/>
+ <field name="gnue_company" type="string" length="32" nullable="N"
+ description="Company this year is assigned to"/>
+ <field name="gnue_code" type="string" length="8" nullable="N"
+ description="Code of the year"/>
+ </fields>
+ <indexes/>
+ <constraints>
+ <constraint name="fk_gnue_year_gnue_company" type="foreignkey">
+ <constraintfield name="gnue_company"/>
+ <constraintref name="gnue_id" table="gnue_company"/>
+ </constraint>
+ </constraints>
+ <primarykey name="pk_gnue_year">
+ <pkfield name="gnue_id"/>
+ </primarykey>
+ </table>
+
</tables>
<data>
@@ -338,6 +383,19 @@
<value field="gnue_module">00000000000000000000000000000000</value>
<value field="gnue_name">message</value>
</row>
+ <row>
+ <value field="gnue_comment">GNU Enterprise Company</value>
+ <value field="gnue_id">00000000000000000000000000000090</value>
+ <value field="gnue_module">00000000000000000000000000000000</value>
+ <value field="gnue_name">company</value>
+ </row>
+ <row>
+ <value field="gnue_comment">GNU Enterprise Year</value>
+ <value field="gnue_id">000000000000000000000000000000A0</value>
+ <value field="gnue_module">00000000000000000000000000000000</value>
+ <value field="gnue_name">year</value>
+ <value field="gnue_filter">gnue_company</value>
+ </row>
</rows>
</tabledata>
@@ -433,6 +491,16 @@
<value field="gnue_nullable">TRUE</value>
<value field="gnue_type">string</value>
</row>
+ <row>
+ <value field="gnue_module">00000000000000000000000000000000</value>
+ <value field="gnue_class">00000000000000000000000000000020</value>
+ <value field="gnue_id">00000000000000000000000000000025</value>
+ <value field="gnue_comment">Master-Class of the class</value>
+ <value field="gnue_length">35</value>
+ <value field="gnue_name">filter</value>
+ <value field="gnue_nullable">TRUE</value>
+ <value field="gnue_type">string</value>
+ </row>
<!-- ============================================================ -->
<!-- Properties of gnue_property -->
@@ -846,6 +914,71 @@
<value field="gnue_type">string</value>
<value field="gnue_nullable">TRUE</value>
</row>
+
+ <!-- ============================================================ -->
+ <!-- Properties of gnue_company -->
+ <!-- ============================================================ -->
+ <row>
+ <value field="gnue_module">00000000000000000000000000000000</value>
+ <value field="gnue_class">00000000000000000000000000000090</value>
+ <value field="gnue_id">00000000000000000000000000000091</value>
+ <value field="gnue_comment">Object ID</value>
+ <value field="gnue_name">id</value>
+ <value field="gnue_nullable">FALSE</value>
+ <value field="gnue_type">id</value>
+ </row>
+ <row>
+ <value field="gnue_module">00000000000000000000000000000000</value>
+ <value field="gnue_class">00000000000000000000000000000090</value>
+ <value field="gnue_id">00000000000000000000000000000092</value>
+ <value field="gnue_comment">Code of the company</value>
+ <value field="gnue_name">code</value>
+ <value field="gnue_nullable">FALSE</value>
+ <value field="gnue_type">string</value>
+ <value field="gnue_length">8</value>
+ </row>
+ <row>
+ <value field="gnue_module">00000000000000000000000000000000</value>
+ <value field="gnue_class">00000000000000000000000000000090</value>
+ <value field="gnue_id">00000000000000000000000000000093</value>
+ <value field="gnue_comment">Name of the company</value>
+ <value field="gnue_name">name</value>
+ <value field="gnue_nullable">FALSE</value>
+ <value field="gnue_type">string</value>
+ <value field="gnue_length">35</value>
+ </row>
+
+ <!-- ============================================================ -->
+ <!-- Properties of gnue_year -->
+ <!-- ============================================================ -->
+ <row>
+ <value field="gnue_module">00000000000000000000000000000000</value>
+ <value field="gnue_class">000000000000000000000000000000A0</value>
+ <value field="gnue_id">000000000000000000000000000000A1</value>
+ <value field="gnue_comment">Object ID</value>
+ <value field="gnue_name">id</value>
+ <value field="gnue_nullable">FALSE</value>
+ <value field="gnue_type">id</value>
+ </row>
+ <row>
+ <value field="gnue_module">00000000000000000000000000000000</value>
+ <value field="gnue_class">000000000000000000000000000000A0</value>
+ <value field="gnue_id">000000000000000000000000000000A2</value>
+ <value field="gnue_comment">Code of the year</value>
+ <value field="gnue_name">code</value>
+ <value field="gnue_nullable">FALSE</value>
+ <value field="gnue_type">string</value>
+ <value field="gnue_length">8</value>
+ </row>
+ <row>
+ <value field="gnue_module">00000000000000000000000000000000</value>
+ <value field="gnue_class">000000000000000000000000000000A0</value>
+ <value field="gnue_id">000000000000000000000000000000A3</value>
+ <value field="gnue_comment">Company this year is assigned to</value>
+ <value field="gnue_name">company</value>
+ <value field="gnue_nullable">FALSE</value>
+ <value field="gnue_type">gnue_company</value>
+ </row>
</rows>
</tabledata>
@@ -870,7 +1003,7 @@
<row>
<value field="gnue_class">00000000000000000000000000000020</value>
<value field="gnue_comment">Generate GNUe Form Definition</value>
- <value field="gnue_id"
key="Y">00000000000000000000000000007001</value>
+ <value field="gnue_id">00000000000000000000000000007001</value>
<value field="gnue_language">python</value>
<value field="gnue_module">00000000000000000000000000000000</value>
<value field="gnue_name">form</value>
@@ -878,13 +1011,10 @@
<value field="gnue_type">string</value>
<value field="gnue_code">
from gnue.appserver import labels
-
labels.find = find
labels.abort = abort
-
formGen = labels.FormGenerator (self, language, connection,
formwidth, formheight)
-
return formGen.generateForm ()
</value>
</row>
@@ -908,7 +1038,7 @@
<rows>
<row>
<value
field="gnue_procedure">00000000000000000000000000007001</value>
- <value field="gnue_id"
key="Y">00000000000000000000000000770001</value>
+ <value field="gnue_id">00000000000000000000000000770001</value>
<value field="gnue_name">language</value>
<value field="gnue_comment">Langage (locale) for labels</value>
<value field="gnue_length">5</value>
@@ -916,7 +1046,7 @@
</row>
<row>
<value
field="gnue_procedure">00000000000000000000000000007001</value>
- <value field="gnue_id"
key="Y">00000000000000000000000000770002</value>
+ <value field="gnue_id">00000000000000000000000000770002</value>
<value field="gnue_name">connection</value>
<value field="gnue_comment">Name of the connection to use</value>
<value field="gnue_length">35</value>
@@ -924,7 +1054,7 @@
</row>
<row>
<value
field="gnue_procedure">00000000000000000000000000007001</value>
- <value field="gnue_id"
key="Y">00000000000000000000000000770003</value>
+ <value field="gnue_id">00000000000000000000000000770003</value>
<value field="gnue_name">formwidth</value>
<value field="gnue_comment">Maximum width of the form</value>
<value field="gnue_type">number</value>
@@ -932,7 +1062,7 @@
</row>
<row>
<value
field="gnue_procedure">00000000000000000000000000007001</value>
- <value field="gnue_id"
key="Y">00000000000000000000000000770004</value>
+ <value field="gnue_id">00000000000000000000000000770004</value>
<value field="gnue_name">formheight</value>
<value field="gnue_comment">Maximum height of the form</value>
<value field="gnue_type">number</value>
Modified: trunk/gnue-appserver/share/repository.ini
===================================================================
--- trunk/gnue-appserver/share/repository.ini 2004-09-27 19:22:20 UTC (rev
6405)
+++ trunk/gnue-appserver/share/repository.ini 2004-09-27 19:29:30 UTC (rev
6406)
@@ -40,30 +40,35 @@
gnue_module = 00000000000000000000000000000000
gnue_name = module
gnue_comment = GNU Enterprise Business Object Module
+gnue_filter =
[gnue_class]
gnue_id = 00000000000000000000000000000020
gnue_module = 00000000000000000000000000000000
gnue_name = class
gnue_comment = GNU Enterprise Business Object Class
+gnue_filter =
[gnue_property]
gnue_id = 00000000000000000000000000000030
gnue_module = 00000000000000000000000000000000
gnue_name = property
gnue_comment = GNU Enterprise Business Object Property
+gnue_filter =
[gnue_procedure]
gnue_id = 00000000000000000000000000000040
gnue_module = 00000000000000000000000000000000
gnue_name = procedure
gnue_comment = GNU Enterprise Business Object Procedure
+gnue_filter =
[gnue_parameter]
gnue_id = 00000000000000000000000000000050
gnue_module = 00000000000000000000000000000000
gnue_name = parameter
gnue_comment = GNU Enterprise Business Object Procedure Parameter
+gnue_filter =
; =============================================================================
; Property definitions
@@ -153,6 +158,17 @@
gnue_comment = Comment
gnue_nullable =
+[gnue_class.gnue_filter]
+gnue_id = 00000000000000000000000000000025
+gnue_class = 00000000000000000000000000000020
+gnue_module = 00000000000000000000000000000000
+gnue_name = filter
+gnue_type = string
+gnue_length = 35
+gnue_scale =
+gnue_comment = Master-Class of the class
+gnue_nullable =
+
; -----------------------------------------------------------------------------
; properties
; -----------------------------------------------------------------------------
Modified: trunk/gnue-appserver/src/gcd/GCParser.py
===================================================================
--- trunk/gnue-appserver/src/gcd/GCParser.py 2004-09-27 19:22:20 UTC (rev
6405)
+++ trunk/gnue-appserver/src/gcd/GCParser.py 2004-09-27 19:29:30 UTC (rev
6406)
@@ -32,7 +32,6 @@
xmlElements = None
_LENGTH_SCALE = re.compile ('^\w+\s*\(\s*(\d*)\s*[\,]{0,1}\s*(\d*)\s*\)\s*')
-
# =============================================================================
# Exceptions
# =============================================================================
@@ -110,7 +109,9 @@
'module': {
'Typecast': GTypecast.name},
'comment': {
- 'Typecast': GTypecast.text}
+ 'Typecast': GTypecast.text},
+ 'filter': {
+ 'Typecast': GTypecast.name},
},
'ParentTags': ('module',)
},
@@ -342,19 +343,21 @@
def _complete (self):
# check if there's a gnue_id in new classes
if self.action == 'create':
- items = [c.fullName for c in self.findChildrenOfType ('GCProperty')]
- if not 'gnue_id' in items:
- gnueId = GCProperty (self)
- gnueId.name = 'id'
- gnueId.type = 'string'
- gnueId.length = 32
- gnueId.comment = 'Object ID'
- gnueId.nullable = False
+ self.__addProperty ('id', 'Object ID', pType = 'string', length = 32)
+ self.__addProperty ('createdate', 'Date instance was created',
+ pType = 'datetime', nullable = True)
+ self.__addProperty ('createuser', 'User who created the instance',
+ pType = 'string', length = 8, nullable = True)
+ self.__addProperty ('modifydate', 'Date instance was last modified',
+ pType = 'datetime', nullable = True)
+ self.__addProperty ('modifyuser', 'User who last modified the instance',
+ pType = 'string', length = 8, nullable = True)
- gnueId._validate ()
- gnueId.module = 'gnue'
- gnueId.fullName= 'gnue_id'
+ if hasattr (self, 'filter'):
+ (fModule, fName) = Namespace.splitName (self.filter)
+ self.__addProperty (fName, module = fModule)
+
# transform all 'calculated properties' into procedures
for prop in self.findChildrenOfType ('GCProperty') [:]:
if True in [isinstance (c, GContent) for c in prop._children]:
@@ -380,6 +383,33 @@
self._children.remove (prop)
+ # ---------------------------------------------------------------------------
+ # Add a property to the class
+ # ---------------------------------------------------------------------------
+
+ def __addProperty (self, name, comment = None, module = "gnue", pType = None,
+ length = None, nullable = False):
+ items = [c.fullName for c in self.findChildrenOfType ('GCProperty')]
+
+ fullName = Namespace.createName (module, name)
+ if fullName in items:
+ return None
+
+ prop = GCProperty (self)
+ prop.name = name
+ prop.type = pType or fullName
+ if length is not None:
+ prop.length = length
+ if comment is not None:
+ prop.comment = comment
+ prop.nullable = nullable
+ prop._validate ()
+
+ prop.module = module
+ prop.fullName = fullName
+
+ return prop
+
Modified: trunk/gnue-appserver/src/gcd/readgcd.py
===================================================================
--- trunk/gnue-appserver/src/gcd/readgcd.py 2004-09-27 19:22:20 UTC (rev
6405)
+++ trunk/gnue-appserver/src/gcd/readgcd.py 2004-09-27 19:29:30 UTC (rev
6406)
@@ -219,10 +219,10 @@
if aClass.action == 'create':
self.tables [-1]['primarykey'] = {
- 'name' : 'gnue_id_pk_%s' % aClass.fullName,
+ 'name' : 'pk_%s' % aClass.fullName,
'fields': ['gnue_id']}
- cDef = self.fetchTags (aClass, ['name', 'module', 'comment'])
+ cDef = self.fetchTags (aClass, ['name', 'module', 'comment', 'filter'])
cDef ['gnue_id'] = None
self.classes [aClass.fullName] = cDef
@@ -455,7 +455,8 @@
attributes = {'name' : "dts_gnueClass",
'database': self.OPTIONS ['connection'],
'table' : 'gnue_class'}
- fieldList = ['gnue_id', 'gnue_name', 'gnue_module', 'gnue_comment']
+ fieldList = ['gnue_id', 'gnue_name', 'gnue_module', 'gnue_comment',
+ 'gnue_filter']
datasource = GDataSource.DataSourceWrapper (
connections = self.connections,
Modified: trunk/gnue-appserver/src/geasInstance.py
===================================================================
--- trunk/gnue-appserver/src/geasInstance.py 2004-09-27 19:22:20 UTC (rev
6405)
+++ trunk/gnue-appserver/src/geasInstance.py 2004-09-27 19:29:30 UTC (rev
6406)
@@ -229,7 +229,7 @@
# Set the value of a property
# ---------------------------------------------------------------------------
- def __putValue (self, propertyname, value):
+ def __putValue (self, propertyname, value, regular = True):
propertydef = self.__classdef.properties [propertyname]
if propertydef.isCalculated:
@@ -244,13 +244,13 @@
if record is None or record.getField (u'gnue_id') != __value:
raise PropertyValueError, (propertydef.fullName, value)
- for proc in self.__classdef.procedures.values ():
- if proc.gnue_name.upper () == 'ONCHANGE':
- self.call (proc, {}, {'oldValue': self.__getValue (propertyname),
- 'newValue': __value,
- 'propertyName': propertydef.fullName})
+ if regular:
+ for proc in self.__classdef.procedures.values ():
+ if proc.gnue_name.upper () == 'ONCHANGE':
+ self.call (proc, {}, {'oldValue': self.__getValue (propertyname),
+ 'newValue': __value,
+ 'propertyName': propertydef.fullName})
-
self.__record.putField (propertydef.column, __value)
# ---------------------------------------------------------------------------
@@ -274,7 +274,8 @@
checktype (namespace, [types.NoneType, types.DictType])
# Create a session object which with the actual session id
- sess = Session.Session (self.__session.sm, self.__session.id)
+ sess = Session.Session (self.__session.sm, self.__session.id,
+ self.__session.parameters)
# Create an object representing the current business object
obj = Object.Object (sess, self.__classdef.fullName,
@@ -297,8 +298,9 @@
cx.shortname = '%s.%s' % (self.__classdef.fullName,
proceduredef.fullName)
cx.description = proceduredef.gnue_comment
- # the object itself
+ # the object itself and the session
cx.bindObject ('self', obj)
+ cx.bindObject ('session', sess)
if namespace is not None:
for (key, value) in namespace.items ():
@@ -368,5 +370,25 @@
def __getitem__ (self, key):
return self.__getValue (key)
+
+ # ---------------------------------------------------------------------------
+ # Check wether a classdef has a property or not
+ # ---------------------------------------------------------------------------
+
def has_key (self, key):
return self.__classdef.properties.has_key (key)
+
+
+ # ---------------------------------------------------------------------------
+ # Update instance-stamps (creation- or modification-date/user )
+ # ---------------------------------------------------------------------------
+
+ def updateStamp (self, creation = False):
+ (datefield, userfield) = [('gnue_modifydate', 'gnue_modifyuser'),
+ ('gnue_createdate', 'gnue_createuser')][creation]
+ if self.has_key (datefield):
+ self.__putValue (datefield, mx.DateTime.now ())
+
+ if self.has_key (userfield) and self.__session.user is not None:
+ self.__putValue (userfield, self.__session.user)
+
Modified: trunk/gnue-appserver/src/geasSession.py
===================================================================
--- trunk/gnue-appserver/src/geasSession.py 2004-09-27 19:22:20 UTC (rev
6405)
+++ trunk/gnue-appserver/src/geasSession.py 2004-09-27 19:29:30 UTC (rev
6406)
@@ -60,7 +60,27 @@
msg = u_("Invalid condition data type '%s'") % type (condition)
errors.ApplicationError.__init__ (self, msg)
+class NoFilterParamError (errors.UserError):
+ def __init__ (self, filterName):
+ msg = u_("No parameter for the filter %s specified") % filterName
+ errors.UserError.__init__ (self, msg)
+class InvalidFilterValueError (errors.AdminError):
+ def __init__ (self, filterName, filterValue):
+ msg = u_("'%(value)s' is not a valid filter of the type '%(name)s'") \
+ % {'value': filterValue,
+ 'name': filterName}
+ errors.AdminError.__init__ (self, msg)
+
+class MultipleFilterValueError (errors.AdminError):
+ def __init__ (self, filterName, filterValue):
+ msg = u_("Multiple instances of the filter '%(name)s' matches the "
+ "value '%(value)s'") \
+ % {'name': filterName,
+ 'value': filterValue}
+ errors.AdminError.__init__ (self, msg)
+
+
# =============================================================================
# Session class
# =============================================================================
@@ -71,7 +91,7 @@
# Initalize
# ---------------------------------------------------------------------------
- def __init__ (self, connections, authAdapter, sm, id, locale):
+ def __init__ (self, connections, authAdapter, sm, id, params):
self.loggedIn = 0
self.connections = connections
@@ -80,7 +100,6 @@
except:
self.database = "gnue"
- self.__user = ""
self.__lists = {}
self.__listcount = 0
self.__authAdapter = authAdapter
@@ -90,8 +109,14 @@
self.sm = sm # The session manager
self.id = id # The session id
- self.locale = locale
+ self.parameters = params
+ self.locale = params.get ('language')
+ self.user = None
+ self.filters = {}
+ gDebug (2, "Session-Params: %s" % params)
+
+
# ---------------------------------------------------------------------------
# Get a class definition from a class name and check access
# ---------------------------------------------------------------------------
@@ -99,7 +124,7 @@
def __getClassdef (self, classname):
# check if user has access rights for this class
- if not self.__authAdapter.hasAccess (self, self.__user, classname):
+ if not self.__authAdapter.hasAccess (self, self.user, classname):
raise AccessDeniedError, (classname)
return self.sm.classes [classname]
@@ -202,6 +227,32 @@
# ---------------------------------------------------------------------------
+ # Get the value for the given filter
+ # ---------------------------------------------------------------------------
+
+ def __getFilter (self, filterName):
+ if not self.filters.has_key (filterName):
+ filterValue = self.parameters.get (filterName, None)
+ if filterValue is None:
+ raise NoFilterParamError, (filterName)
+
+ cond = ['eq', ['field', 'gnue_code'], ['const', filterValue]]
+ fList = self.request (filterName, cond, [], ['gnue_id'])
+ idList = self.fetch (fList, 0, 5)
+
+ if not len (idList):
+ raise InvalidFilterValueError, (filterName, filterValue)
+
+ elif len (idList) > 1:
+ raise MultipleFilterValueError, (filterName, filterValue)
+
+ self.filters [filterName] = idList [0][0]
+
+ return self.filters [filterName]
+
+
+
+ # ---------------------------------------------------------------------------
# Log into the application server
# ---------------------------------------------------------------------------
@@ -212,9 +263,9 @@
# This username/password is for the Application Server, not for the
# database.
- self.__user = user
- self.loggedIn = self.__authAdapter.authenticate(self, user,
- {'password':password} )
+ self.user = user
+ self.loggedIn = self.__authAdapter.authenticate (self, user,
+ {'password': password})
if self.loggedIn:
self.__connection = data.connection (self.connections, self.database)
@@ -248,6 +299,7 @@
self.__connection.commit ()
self.__dirtyInstances = {}
+
# ---------------------------------------------------------------------------
# Rollback the active transaction
# ---------------------------------------------------------------------------
@@ -347,6 +399,7 @@
list = self.__getList (list_id)
return list.fetch (start, count)
+
# ---------------------------------------------------------------------------
# Create a single geasInstance object from an existing record
# ---------------------------------------------------------------------------
@@ -376,6 +429,10 @@
table = classdef.table
record = self.__connection.insertRecord (table)
+ if classdef.gnue_filter is not None:
+ fName = classdef.gnue_filter
+ record.putField (fName, self.__getFilter (fName))
+
instance = geasInstance.geasInstance (self, self.__connection, record,
classdef)
@@ -430,14 +487,20 @@
result = []
i = 0
+
for object_id in obj_id_list:
if object_id:
instance = self.__findInstance (classdef, object_id, [])
new_object_id = object_id
+ created = False
else:
instance = self.__newInstance (classdef)
new_object_id = instance.get ([u'gnue_id']) [0]
+ created = True
+
instance.put (propertylist, data [i])
+ instance.updateStamp (created)
+
i += 1
result.append (new_object_id)
self.__dirtyInstances [new_object_id] = instance
@@ -531,8 +594,14 @@
by the datasource, and another one which has to be processed by appserver.
"""
+ if classdef.gnue_filter is not None:
+ filterCond = GConditions.buildConditionFromDict ( \
+ {classdef.gnue_filter: self.__getFilter (classdef.gnue_filter)})
+ else:
+ filterCond = None
+
if condition is None:
- return (None, None)
+ return (filterCond, None)
if isinstance (condition, ListType):
cTree = GConditions.buildTreeFromList (condition)
@@ -542,11 +611,23 @@
cTree = condition
else:
raise ConditionDataTypeError, condition
+
+ # If filterCond is already mentioned in the condition tree, keep that one
+ if filterCond is not None:
+ cList = cTree.findChildrenOfType ('GCCField', allowAllChildren = True)
+ if len (cList):
+ for item in cList:
+ if classdef.gnue_filter in item.name.split ('.'):
+ filterCond = None
+ break
dbTrees = []
asTrees = []
forest = []
+ if filterCond is not None:
+ self.__splitIntoAnd (filterCond, forest)
+
if len (cTree._children):
# NOTE: the first element of a condition tree is a GCondition object
# self.__splitIntoAnd (cTree._children [0], forest)
Modified: trunk/gnue-appserver/src/geasSessionManager.py
===================================================================
--- trunk/gnue-appserver/src/geasSessionManager.py 2004-09-27 19:22:20 UTC
(rev 6405)
+++ trunk/gnue-appserver/src/geasSessionManager.py 2004-09-27 19:29:30 UTC
(rev 6406)
@@ -75,8 +75,8 @@
def _buildInternalSession (self):
self._internalSession = geasSession.geasSession (self._connections,
- geasAuthentication.geasAuthAgent(), self, 0, None)
- self._internalSession.login (None,None) # fake login
+ geasAuthentication.geasAuthAgent(), self, 0, {})
+ self._internalSession.login (None, None) # fake login
self._sessions [0] = self._internalSession
# ---------------------------------------------------------------------------
@@ -109,7 +109,7 @@
conn = GConnections.GConnections(location, loginHandler, loginOptions)
sess = geasSession.geasSession (conn, self._authAdapter, self,
- self._sessNo, authentication ['language'])
+ self._sessNo, authentication)
sess.login (authentication ['user'], authentication ['password'])
self._sessions [self._sessNo] = sess
Modified: trunk/gnue-appserver/src/language/Session.py
===================================================================
--- trunk/gnue-appserver/src/language/Session.py 2004-09-27 19:22:20 UTC
(rev 6405)
+++ trunk/gnue-appserver/src/language/Session.py 2004-09-27 19:29:30 UTC
(rev 6406)
@@ -51,10 +51,11 @@
# -------------------------------------------------------------------------
# Constructor
# -------------------------------------------------------------------------
- def __init__ (self, sessionManager, sessionId):
+ def __init__ (self, sessionManager, sessionId, params = {}):
self.__sm = sessionManager
self.__session_id = sessionId
self.__context = None
+ self.parameters = params
# -------------------------------------------------------------------------
# Get the session's sessionManager
@@ -166,9 +167,10 @@
# -------------------------------------------------------------------------
# Constructor
# -------------------------------------------------------------------------
- def __init__ (self, sessionManager, user, password):
+ def __init__ (self, sessionManager, user, password, params = {}):
Session.__init__ (self, sessionManager,
- sessionManager.open ({'user': user, 'password': password}))
+ sessionManager.open ({'user': user, 'password': password}),
+ params)
# =============================================================================
@@ -179,6 +181,6 @@
# -------------------------------------------------------------------------
# Constructor
# -------------------------------------------------------------------------
- def __init__ (self, sessionManager):
- Session.__init__ (self, sessionManager, 0)
+ def __init__ (self, sessionManager, params = {}):
+ Session.__init__ (self, sessionManager, 0, params)
Modified:
trunk/gnue-common/src/datasources/drivers/appserver/appserver/Connection.py
===================================================================
--- trunk/gnue-common/src/datasources/drivers/appserver/appserver/Connection.py
2004-09-27 19:22:20 UTC (rev 6405)
+++ trunk/gnue-common/src/datasources/drivers/appserver/appserver/Connection.py
2004-09-27 19:29:30 UTC (rev 6406)
@@ -55,13 +55,19 @@
# ---------------------------------------------------------------------------
def getLoginFields (self):
+ result = []
+
cfg = gConfigDict (section = 'appserver')
dbauth = cfg.get ('authentication', 'False')
if dbauth.lower () in ['true', 'yes', 'y']:
- return [['_username', _('User Name'), 0], ['_password', _('Password'),
1]]
- else:
- return []
+ result.extend ([['_username', _('User Name'), 0],
+ ['_password', _('Password'), 1]])
+ result.extend ([['gnue_company', _('Company'), 0],
+ ['gnue_year', _('Fiscal Year'), 0]])
+
+ return result
+
# ---------------------------------------------------------------------------
# Open a connection
# ---------------------------------------------------------------------------
@@ -83,9 +89,15 @@
self._sm = self._server.request ('Session')
try:
- self._sess_id = self._sm.open ({'user': user, 'password': passwd,
- 'language': connectData ['_language']})
+ if connectData.has_key ('_username'):
+ del connectData ['_username']
+ if connectData.has_key ('_password'):
+ del connectData ['_password']
+ connectData ['user'] = user
+ connectData ['password'] = passwd
+ self._sess_id = self._sm.open (connectData)
+
except errors.RemoteError, e:
if e.getName () == 'AuthError':
raise Exceptions.LoginError, e.getMessage ()
@@ -96,7 +108,7 @@
raise Exceptions.ConnectError, e.getMessage ()
except:
- raise Exceptions.ConnectError, "%s" % sys.exc_info () [1]
+ raise Exceptions.ConnectError, errors.getException () [2]
# Can be removed after the call to _dataConnection.cursor() is removed from
# the Base driver
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- r6406 - in trunk: gnue-appserver/samples gnue-appserver/share gnue-appserver/src gnue-appserver/src/gcd gnue-appserver/src/language gnue-common/src/datasources/drivers/appserver/appserver,
johannes <=