Roundup Tracker - Issues

Issue 2141835

classification
ZRoundup Patch for Zope 2.11+
Type: Severity: normal
Components: Web interface Versions:
process
Status: open
:
: richard : fresh, richard, rouilj
Priority: normal : patch

Created on 2008-10-02 06:16 by anonymous, last changed 2016-06-26 22:41 by rouilj.

Messages
msg2588 Author: [hidden] (anonymous) Date: 2008-10-02 06:16
It's a little one but it does the trick...

Index: __init__.py
===================================================================
--- __init__.py (revision 3505)
+++ __init__.py (working copy)
@@ -48,7 +48,7 @@
     )

 # set up the icon
-from ImageFile import ImageFile
+from App.ImageFile import ImageFile
 misc_ = {
     'icon': ImageFile('icons/tick_symbol.gif', path),
 }

cheers,

Chris
msg2589 Author: [hidden] (fresh) Date: 2008-10-02 08:38
Here's a more extensive one that's needed for things like @@file to work in Zope 2.10+:

Index: ZRoundup.py
===================================================================
--- ZRoundup.py (revision 3505)
+++ ZRoundup.py (working copy)
@@ -99,6 +99,9 @@
     def keys(self):
         return self.form.keys()

+import logging
+logger = logging.getLogger('zroundup')
+
 class ZRoundup(Item, PropertyManager, Implicit, Persistent):
     '''An instance of this class provides an interface between Zope and
        roundup for one roundup instance
@@ -150,61 +153,37 @@
         form = FormWrapper(self.REQUEST.form)
         return instance.Client(instance, request, env, form)

-    security.declareProtected('View', 'index_html')
-    def index_html(self):
-        '''Alias index_html to roundup's index
-        '''
-        # Redirect misdirected requests -- bugs 558867 , 565992
-        # PATH_INFO, as defined by the CGI spec, has the *real* request path
-        orig_path = self.REQUEST.environ['PATH_INFO']
-        if orig_path[-1] != '/' :
-            url = urlparse.urlparse( self.absolute_url() )
-            url = list( url ) # make mutable
-            url[2] = url[2]+'/' # patch
-            url = urlparse.urlunparse( url ) # reassemble
-            RESPONSE = self.REQUEST.RESPONSE
-            RESPONSE.setStatus( "MovedPermanently" ) # 301
-            RESPONSE.setHeader( "Location" , url )
-            return RESPONSE
+    def __before_publishing_traverse__(self, self2, request):
+        # have we already been called?
+        if 'roundup_path' in request.other:
+            return
+        # suck up the whole path into one variable
+        path = request['TraversalRequestNameStack']
+        # but leave vhm stuff alone
+        maybe_vhm = getattr(self,path[-1],None)
+        if maybe_vhm is not None and maybe_vhm.meta_type=='Virtual Host Monster':
+            roundup_path = path[:-2]
+        else:
+            roundup_path = path
+        roundup_path = '/'.join(reversed(roundup_path))
+        path[:-2] = []
+        request.set('roundup_path', roundup_path)

+    security.declareProtected('View', 'index_html')
+    def index_html(self):
+        "Handle calls to roundup"
         client = self.roundup_opendb()
         # fake the path that roundup should use
-        client.split_path = ['index']
-        return client.main()
-
-    def __getitem__(self, item):
-        '''All other URL accesses are passed throuh to roundup
-        '''
-        return PathElement(self, item).__of__(self)
-
-class PathElement(Item, Implicit):
-    def __init__(self, zr, path):
-        self.zr = zr
-        self.path = path
-
-    def __getitem__(self, item):
-        ''' Get a subitem.
-        '''
-        return PathElement(self.zr, self.path + '/' + item).__of__(self)
-
-    def index_html(self, REQUEST=None):
-        ''' Actually call through to roundup to handle the request.
-        '''
+        roundup_path = self.REQUEST.get('roundup_path')
+        if roundup_path:
+            client.path = roundup_path
+        else:
+            client.split_path = ['index']
         try:
-            client = self.zr.roundup_opendb()
-            # fake the path that roundup should use
-            client.path = self.path
-            # and call roundup to do something
-            client.main()
-            return ''
+            return client.main()
         except NotFound:
-            raise 'NotFound', REQUEST.URL
-            pass
-        except:
-            import traceback
-            traceback.print_exc()
-            # all other exceptions in roundup are valid
-            raise
+            # maybe it should be s file acquired from Zope?
+            return self.restrictedTraverse(roundup_path).index_html(self.REQUEST,self.REQUEST.RESPONSE)
msg5639 Author: [hidden] (rouilj) Date: 2016-06-26 22:41
I asked on the roundup user mailing list if anybody
is using zope and can test this.
History
Date User Action Args
2016-06-26 22:41:36rouiljsetkeywords: + patch
nosy: + rouilj
messages: + msg5639
2008-10-02 06:16:57anonymouscreate