[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
r6249 - trunk/gnue-appserver/src/gcd
From: |
johannes |
Subject: |
r6249 - trunk/gnue-appserver/src/gcd |
Date: |
Sat, 4 Sep 2004 04:53:25 -0500 (CDT) |
Author: johannes
Date: 2004-09-04 04:53:24 -0500 (Sat, 04 Sep 2004)
New Revision: 6249
Modified:
trunk/gnue-appserver/src/gcd/GCParser.py
trunk/gnue-appserver/src/gcd/readgcd.py
Log:
Added message-support to gnue-readgcd
Modified: trunk/gnue-appserver/src/gcd/GCParser.py
===================================================================
--- trunk/gnue-appserver/src/gcd/GCParser.py 2004-09-03 18:42:10 UTC (rev
6248)
+++ trunk/gnue-appserver/src/gcd/GCParser.py 2004-09-04 09:53:24 UTC (rev
6249)
@@ -18,13 +18,14 @@
#
# Copyright 2001-2004 Free Software Foundation
#
-# $Id: $
+# $Id$
import re
from gnue.common.definitions import GParser, GObjects, GRootObj
from gnue.common.definitions.GParserHelpers import GContent
from gnue.common.formatting import GTypecast
+from gnue.common.apps import errors
from gnue.appserver.classrep import helpers, Namespace
@@ -36,7 +37,7 @@
# Exceptions
# =============================================================================
-class Error (gException):
+class Error (errors.ApplicationError):
pass
class NoModuleError (Error):
@@ -64,6 +65,14 @@
% {'class': classname, 'property': propName}
Error.__init__ (self, msg)
+class MissingLanguageError (Error):
+ def __init__ (self):
+ msg = _("No language specified for messages")
+ Error.__init__ (self, msg)
+
+class MissingNameError (Error):
+ pass
+
# =============================================================================
# load an XML object tree from a given stream and return it's root object
# =============================================================================
@@ -184,7 +193,30 @@
'Typecast': GTypecast.integer}
},
'ParentTags': ('procedure',)
- }
+ },
+
+ 'messages': {
+ 'BaseClass': GCMessages,
+ 'Attributes': {
+ 'language': {
+ 'Required': True,
+ 'Typecast': GTypecast.text}
+ }, # Attributes
+ 'ParentTags': ('module',)
+ }, # messages
+
+ 'message': {
+ 'BaseClass': GCMessage,
+ 'Attributes': {
+ 'name': {
+ 'Required': True,
+ 'Unique': True,
+ 'Typecast': GTypecast.name}
+ }, # Attributes
+ 'ParentTags' : ('messages',),
+ 'MixedContent' : True,
+ 'KeepWhitespace': True,
+ }, # message
}
return GParser.buildImportableTags ('module', xmlElements)
@@ -229,7 +261,6 @@
# ---------------------------------------------------------------------------
def _validate (self):
-
if hasattr (self, 'type'):
fieldType = self.type.lower ().strip ()
tpMatch = re.compile ('^(\w+)').match (fieldType)
@@ -281,8 +312,17 @@
def __init__ (self, parent = None):
GRootObj.GRootObj.__init__ (self, 'module', getXMLelements,
self.__module__)
GCObject.__init__ (self, parent, type = 'GCModule')
+ self._inits.extend ([None, self._validate])
+ # ---------------------------------------------------------------------------
+ # Validate a module tag
+ # ---------------------------------------------------------------------------
+ def _validate (self):
+ if not len (self.name):
+ raise MissingNameError, _("Module has no name")
+
+
# =============================================================================
# The class object
# =============================================================================
@@ -299,6 +339,9 @@
# ---------------------------------------------------------------------------
def _validate (self):
+ if not len (self.name):
+ raise MissingNameError, _("Class has no name")
+
if not isinstance (self._parent, GCModule):
raise NoModuleError, self.name
@@ -419,3 +462,39 @@
def __init__ (self, parent):
GCTypeDefinition.__init__ (self, parent, objType = 'GCParameter')
+
+# =============================================================================
+# This class implements a collection of messages
+# =============================================================================
+
+class GCMessages (GCObject):
+ def __init__ (self, parent):
+ GCObject.__init__ (self, parent, type = 'GCMessages')
+ self._inits.extend ([None, self._validate])
+
+ def _validate (self):
+ if not len (self.language):
+ raise MissingLanguageError
+
+ self.module = self._parent.name
+
+
+# =============================================================================
+# This class implements a single message
+# =============================================================================
+
+class GCMessage (GCObject):
+ def __init__ (self, parent):
+ GCObject.__init__ (self, parent, type = 'GCMessage')
+ self._inits.extend ([None, self._validate])
+
+ def _validate (self):
+ if not len (self.name):
+ raise MissingNameError, _("Message tag has an empty 'name' attribute")
+
+ if '_' in self.name:
+ self.name = self.name.split ('_') [-1]
+
+ self.language = self._parent.language
+ self.module = self._parent.module
+ self.fullName = Namespace.createName (self._parent.module, self.name)
Modified: trunk/gnue-appserver/src/gcd/readgcd.py
===================================================================
--- trunk/gnue-appserver/src/gcd/readgcd.py 2004-09-03 18:42:10 UTC (rev
6248)
+++ trunk/gnue-appserver/src/gcd/readgcd.py 2004-09-04 09:53:24 UTC (rev
6249)
@@ -25,7 +25,7 @@
import os
import whrandom
-from gnue.common.apps import i18n
+from gnue.common.apps import i18n, errors
from gnue.common.apps.GClientApp import *
from gnue.common.utils.FileUtils import openResource
from gnue.common.datasources import GDataSource, GConditions
@@ -38,9 +38,12 @@
# Exceptions
# =============================================================================
-class Error (gException):
+class Error (errors.ApplicationError):
pass
+class StartupError (errors.UserError):
+ pass
+
class ModuleNotFoundError (Error):
def __init__ (self, module):
msg = u_("Module '%s' not found in class repository") % module
@@ -106,26 +109,26 @@
self._args = [unicode (a, i18n.encoding) for a in self.ARGUMENTS]
if not len (self._args):
- self.handleStartupError (_("No input file specified."))
+ raise StartupError, _("No input file specified.")
+ if not self.OPTIONS ['connection']:
+ raise StartupError, _("No connection specified.")
+
try:
self._files = []
for filename in self._args:
self._files.append (openResource (filename))
- except IOError:
- self.handleStartupError (u_("Unable to open input file %s.") % filename)
+ except IOError, err:
+ raise StartupError, u_("Unable to open input file: %s") % err
- if not self.OPTIONS ['connection']:
- self.handleStartupError (_("No connection specified."))
-
self.outfile = self.OPTIONS ['output']
if self.OPTIONS ['file-only'] and self.outfile is None:
- self.handleStartupError (_("Output to file only requested, but no "
- "filename specified."))
+ raise StartupError, \
+ _("Output to file only requested, but no filename specified.")
# ---------------------------------------------------------------------------
@@ -141,33 +144,29 @@
self.__checkOptions ()
- try:
- self.tables = []
- self.modules = {}
- self.classes = {}
- self.properties = {}
- self.procedures = {}
- self.parameters = {}
+ self.tables = []
+ self.modules = {}
+ self.classes = {}
+ self.properties = {}
+ self.procedures = {}
+ self.parameters = {}
+ self.messages = {}
- for item in range (len (self._files)):
- print o (u_("Loading gcd file '%s' ...") % self._args [item])
+ for item in range (len (self._files)):
+ print o (u_("Loading gcd file '%s' ...") % self._args [item])
- try:
- schema = GCParser.loadFile (self._files [item])
- schema.walk (self.__iterateObjects)
+ try:
+ schema = GCParser.loadFile (self._files [item])
+ schema.walk (self.__iterateObjects)
- finally:
- self._files [item].close ()
+ finally:
+ self._files [item].close ()
- except Exception:
- print sys.exc_info () [1]
+ self.executeAndGenerateCode ()
- else:
- self.executeAndGenerateCode ()
+ self.updateRepository ()
- self.updateRepository ()
-
# ---------------------------------------------------------------------------
# Iterate over all top level elements
# ---------------------------------------------------------------------------
@@ -185,6 +184,9 @@
elif sObject._type == 'GCClass':
self.__translateClass (sObject)
+ elif sObject._type == 'GCMessage':
+ self.__translateMessage (sObject)
+
# ---------------------------------------------------------------------------
@@ -325,6 +327,17 @@
# ---------------------------------------------------------------------------
+ # Translate a message into a dictionary for later classrep update
+ # ---------------------------------------------------------------------------
+
+ def __translateMessage (self, sObject):
+ self.messages [sObject.fullName] = { \
+ 'gnue_language': sObject.language,
+ 'gnue_name' : sObject.name,
+ 'gnue_text' : sObject.getChildrenAsContent (),
+ 'gnue_module' : sObject.module}
+
+ # ---------------------------------------------------------------------------
# Get a dictionary with all keys listed in tags and values from sObject
# ---------------------------------------------------------------------------
@@ -397,6 +410,7 @@
self._updateProperties ()
self._updateProcedures ()
self._updateParameter ()
+ self._updateMessages ()
# ---------------------------------------------------------------------------
@@ -662,6 +676,59 @@
# ---------------------------------------------------------------------------
+ # Update/add messages to the class repository
+ # ---------------------------------------------------------------------------
+
+ def _updateMessages (self):
+ attributes = {'name' : "dts_gnueMessage",
+ 'database': self.OPTIONS ['connection'],
+ 'table' : 'gnue_message'}
+
+ fieldList = ['gnue_id', 'gnue_module', 'gnue_language', 'gnue_name',
+ 'gnue_text']
+
+ self._dtsMessage = GDataSource.DataSourceWrapper (
+ connections = self.connections,
+ attributes = attributes,
+ fields = fieldList,
+ unicodeMode = True)
+
+ stat = [0, 0, 0] # inserted, updated, unchanged
+
+ for message in self.messages.values ():
+
+ moduleId = self.__findModule (message ['gnue_module'])
+
+ cond = GConditions.buildConditionFromDict ( \
+ {'gnue_module' : moduleId,
+ 'gnue_language': message ['gnue_language'],
+ 'gnue_name' : message ['gnue_name']})
+ resultSet = self._dtsMessage.createResultSet (cond)
+
+ if resultSet.firstRecord () is None:
+ resultSet.insertRecord ()
+ modifier = 0
+ message ['gnue_id'] = self.__generateId ()
+ else:
+ message ['gnue_id'] = resultSet.current.getField ('gnue_id')
+ modifier = 1
+
+ message ['gnue_module'] = moduleId
+
+ if not self.doUpdate (resultSet, message):
+ modifier += 1
+
+ stat [modifier] += 1
+
+ if stat [0] + stat [1]:
+ self.connections.commitAll ()
+
+ print o (u_(" Messages : %(ins)3d inserted, %(upd)3d updated, %(kept)3d "
+ "unchanged.") \
+ % {'ins': stat [0], 'upd': stat [1], 'kept': stat [2]})
+
+
+ # ---------------------------------------------------------------------------
# Perform an update on the given resultset using a given data dictionary
# ---------------------------------------------------------------------------
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- r6249 - trunk/gnue-appserver/src/gcd,
johannes <=