diff roundup/cgi/templating.py @ 3165:d2eb7af1b55b maint-0.8

merge from HEAD
author Richard Jones <richard@users.sourceforge.net>
date Mon, 14 Feb 2005 04:58:18 +0000
parents 124638970f0a
children f412ae175b4d
line wrap: on
line diff
--- a/roundup/cgi/templating.py	Mon Feb 14 04:37:37 2005 +0000
+++ b/roundup/cgi/templating.py	Mon Feb 14 04:58:18 2005 +0000
@@ -326,6 +326,7 @@
     '''
     def __init__(self, client):
         self._client = client
+        self._ = client._
         self._db = client.db
 
         # we want config to be exposed
@@ -441,6 +442,7 @@
     '''
     def __init__(self, client, classname, anonymous=0):
         self._client = client
+        self._ = client._
         self._db = client.db
         self._anonymous = anonymous
 
@@ -657,7 +659,7 @@
 
     def history(self):
         if not self.is_view_ok():
-            return _('[hidden]')
+            return self._('[hidden]')
         return self._('New node - no history')
 
     def renderWith(self, name, **kwargs):
@@ -776,7 +778,7 @@
 
     def history(self, direction='descending', dre=re.compile('^\d+$')):
         if not self.is_view_ok():
-            return _('[hidden]')
+            return self._('[hidden]')
 
         # pre-load the history with the current state
         current = {}
@@ -1064,6 +1066,7 @@
             anonymous=0):
         self._client = client
         self._db = client.db
+        self._ = client._
         self._classname = classname
         self._nodeid = nodeid
         self._prop = prop
@@ -1149,7 +1152,7 @@
           addresses and designators
         '''
         if not self.is_view_ok():
-            return _('[hidden]')
+            return self._('[hidden]')
 
         if self._value is None:
             return ''
@@ -1170,7 +1173,7 @@
             This requires the StructureText module to be installed separately.
         '''
         if not self.is_view_ok():
-            return _('[hidden]')
+            return self._('[hidden]')
 
         s = self.plain(escape=escape)
         if not StructuredText:
@@ -1214,7 +1217,7 @@
         ''' Render the value of the property as an obscured email address
         '''
         if not self.is_view_ok():
-            return _('[hidden]')
+            return self._('[hidden]')
 
         if self._value is None:
             value = ''
@@ -1236,7 +1239,7 @@
         ''' Render a "plain" representation of the property
         '''
         if not self.is_view_ok():
-            return _('[hidden]')
+            return self._('[hidden]')
 
         if self._value is None:
             return ''
@@ -1270,7 +1273,7 @@
         ''' Render a "plain" representation of the property
         '''
         if not self.is_view_ok():
-            return _('[hidden]')
+            return self._('[hidden]')
 
         if self._value is None:
             return ''
@@ -1309,7 +1312,7 @@
         ''' Render a "plain" representation of the property
         '''
         if not self.is_view_ok():
-            return _('[hidden]')
+            return self._('[hidden]')
 
         if self._value is None:
             return ''
@@ -1360,7 +1363,7 @@
         ''' Render a "plain" representation of the property
         '''
         if not self.is_view_ok():
-            return _('[hidden]')
+            return self._('[hidden]')
 
         if self._value is None:
             return ''
@@ -1377,7 +1380,7 @@
             DateHTMLProperty.
         '''
         if not self.is_view_ok():
-            return _('[hidden]')
+            return self._('[hidden]')
 
         ret = date.Date('.', translator=self._client)
 
@@ -1421,7 +1424,7 @@
                 elif isinstance(default, DateHTMLProperty):
                     raw_value = default._value
                 else:
-                    raise ValueError, _('default value for '
+                    raise ValueError, self._('default value for '
                         'DateHTMLProperty must be either DateHTMLProperty '
                         'or string date representation.')
         elif isinstance(value, str) or isinstance(value, unicode):
@@ -1453,7 +1456,7 @@
             If the "pretty" flag is true, then make the display pretty.
         '''
         if not self.is_view_ok():
-            return _('[hidden]')
+            return self._('[hidden]')
 
         if not self._value:
             return ''
@@ -1473,7 +1476,7 @@
             for the situatin when a date only specifies a month and a year.
         '''
         if not self.is_view_ok():
-            return _('[hidden]')
+            return self._('[hidden]')
 
         if not self._value:
             return ''
@@ -1486,7 +1489,7 @@
         ''' Return the date/time as a local (timezone offset) date/time.
         '''
         if not self.is_view_ok():
-            return _('[hidden]')
+            return self._('[hidden]')
 
         return DateHTMLProperty(self._client, self._classname, self._nodeid,
             self._prop, self._formname, self._value, offset=offset)
@@ -1503,7 +1506,7 @@
         ''' Render a "plain" representation of the property
         '''
         if not self.is_view_ok():
-            return _('[hidden]')
+            return self._('[hidden]')
 
         if self._value is None:
             return ''
@@ -1513,7 +1516,7 @@
         ''' Render the interval in a pretty format (eg. "yesterday")
         '''
         if not self.is_view_ok():
-            return _('[hidden]')
+            return self._('[hidden]')
 
         return self._value.pretty()
 
@@ -1554,7 +1557,8 @@
         ''' return a new HTMLItem '''
        #print 'Link.getattr', (self, attr, self._value)
         if not self._value:
-            raise AttributeError, "Can't access missing value"
+            msg = self._('Attempt to look up %(attr)s on a missing value')
+            return MissingValue(msg%locals())
         i = HTMLItem(self._client, self._prop.classname, self._value)
         return getattr(i, attr)
 
@@ -1562,7 +1566,7 @@
         ''' Render a "plain" representation of the property
         '''
         if not self.is_view_ok():
-            return _('[hidden]')
+            return self._('[hidden]')
 
         if self._value is None:
             return ''
@@ -1729,7 +1733,7 @@
         ''' Render a "plain" representation of the property
         '''
         if not self.is_view_ok():
-            return _('[hidden]')
+            return self._('[hidden]')
 
         linkcl = self._db.classes[self._prop.classname]
         k = linkcl.labelprop(1)
@@ -2294,4 +2298,29 @@
             raise AttributeError, name
         return self.client.instance.templating_utils[name]
 
+class MissingValue:
+    def __init__(self, description, **kwargs):
+        self.__description = description
+        for key, value in kwargs.items():
+            self.__dict__[key] = value
+
+    def __call__(self, *args, **kwargs): return MissingValue(self.__description)
+    def __getattr__(self, name):
+        # This allows assignments which assume all intermediate steps are Null
+        # objects if they don't exist yet.
+        #
+        # For example (with just 'client' defined):
+        #
+        # client.db.config.TRACKER_WEB = 'BASE/'
+        self.__dict__[name] = MissingValue(self.__description)
+        return getattr(self, name)
+
+    def __getitem__(self, key): return self
+    def __nonzero__(self): return 0
+    def __str__(self): return '[%s]'%self.__description
+    def __repr__(self): return '<MissingValue 0x%x "%s">'%(id(self),
+        self.__description)
+    def gettext(self, str): return str
+    _ = gettext
+
 # vim: set et sts=4 sw=4 :

Roundup Issue Tracker: http://roundup-tracker.org/