I sent this to the tracker-dev@zope.org list, but due to the lack of activity on that list, I think it might be better placed here. When looking at the diffs below, note that I always append a # to a line of code that I edit in someone elses sources. Troy -----Original Message----- From: Farrell, Troy Sent: Friday, May 11, 2001 11:06 AM To: 'tracker-dev@zope.org' Subject: Tracker errors and fixes on HP/UX 11.00 with Python 2.0 Hi Guys- I've installed Tracker before on Linux/i386 with Python 1.52 before without problems, but when I try it with HPUX 11.00/Python 2.0 and Zope 2.3.1 or 2.3.2, there are many issues. I seem to have fixed most of them and I felt that you guys could use the fixes, so here we go: 1) Inside the Tracker ZClass, I've changed /Control_Panel/Products/Tracker/Tracker/propertysheets/methods/TrackerItem/p ropertysheets/methods/index_html to include the following lines after the comment at the beginning: <dtml-unless expr="PATH_TRANSLATED == URL0[_.len(BASE0):]"> <dtml-call expr="RESPONSE.redirect(URL0)"> </dtml-unless> These lines fix the problems associated with the TrackerItem ZClass being inside the Tracker ZClass instead of the TrackerIssue ZClass. These problems show themselves inside the manage_tabs method for a TrackerItem's index_html 2) Change all the appends with too many arguments to appending tuples, and change tracker_role() so that it doesn't throw up an error when it tries to convert a tuple to a string, because we can't convert a tuple to a string. Please review the changes to tracker_role() in TrackerMisc.py especially well. I'm not very confident about them. I've attached diffs below. **************************************** DIFFS for Tracker **************************************** troy@caustic:~/Zope-2.3.2-src/lib/python/Products/TrackerBase$ ls CHANGES.txt README.txt TrackerMisc.py envsetup.py CVS Tracker.zexp TrackerMisc.py.orig forms LICENSE.txt TrackerBase.py TrackerMisc.pyc issue.gif Noodging.diff TrackerBase.py.orig __init__.py item.gif Noodging.py TrackerBase.pyc __init__.pyc tracks.gif Noodging.py.orig TrackerMethods.py addTrackerForm.dtml Noodging.pyc TrackerMethods.py.orig age.py troy@caustic:~/Zope-2.3.2-src/lib/python/Products/TrackerBase$ diff -c Noodging.py.orig Noodging.py *** Noodging.py.orig Fri May 11 09:02:19 2001 --- Noodging.py Fri May 11 09:07:04 2001 *************** *** 99,105 **** if transaction: transaction.abort() aborted = 1 ! exceptions.append(TransactionAbort, details, rule) if DEBUG >= 2: Note("TransactionAbort(%s) encountered for %s\n", details, `rule`) --- 99,105 ---- if transaction: transaction.abort() aborted = 1 ! exceptions.append((TransactionAbort, details, rule))# if DEBUG >= 2: Note("TransactionAbort(%s) encountered for %s\n", details, `rule`) troy@caustic:~/Zope-2.3.2-src/lib/python/Products/TrackerBase$ diff -c TrackerBase.py.orig TrackerBase.py *** TrackerBase.py.orig Fri May 11 09:02:29 2001 --- TrackerBase.py Fri May 11 09:04:11 2001 *************** *** 76,82 **** """Return all keys and issues which we are privileged to view.""" got = [] for k, v in self._issues.items(): ! got.append(k, v.__of__(self)) return got def values(self): """Return all issues which we are privileged to view.""" --- 76,82 ---- """Return all keys and issues which we are privileged to view.""" got = [] for k, v in self._issues.items(): ! got.append((k, v.__of__(self)))# return got def values(self): """Return all issues which we are privileged to view.""" *************** *** 306,312 **** items = self._messages got = [] for k, v in items.items(): ! got.append(k, v.__of__(self)) if reverse: got.reverse() return got --- 306,312 ---- items = self._messages got = [] for k, v in items.items(): ! got.append((k, v.__of__(self)))# if reverse: got.reverse() return got troy@caustic:~/Zope-2.3.2-src/lib/python/Products/TrackerBase$ diff -c TrackerMisc.py.orig TrackerMisc.py *** TrackerMisc.py.orig Fri May 11 09:02:41 2001 --- TrackerMisc.py Fri May 11 09:08:45 2001 *************** *** 165,171 **** and str(user.acl_users._nobody) == str(user)): return 1 if (string.lower(i) == "superuser" ! and str(user.acl_users._super) == str(user)): return 1 if not categories.has_key(i): candidates.append(i) --- 165,171 ---- and str(user.acl_users._nobody) == str(user)): return 1 if (string.lower(i) == "superuser" ! and user.acl_users._emergency_user == str(user)):# return 1 if not categories.has_key(i): candidates.append(i) troy@caustic:~/Zope-2.3.2-src/lib/python/Products/TrackerBase$ diff -c TrackerMethods.py.orig TrackerMethods.py *** TrackerMethods.py.orig Fri May 11 09:02:53 2001 --- TrackerMethods.py Fri May 11 09:06:37 2001 *************** *** 377,393 **** if REQUEST is None: val = None else: val = REQUEST.get(i + "__trait", None) if val is not None: ! traitVals.append(i, val) traitdict[i] = val elif origTraitValsDict.has_key(i): ! traitVals.append(i, origTraitValsDict[i]) traitdict[i] = origTraitValsDict[i] else: traitdict[i] = '' if extend: vals = traitsStruct[i + "_range"][1] ! if vals: traitVals.append(i, vals[0]) ! else: traitVals.append(i, '') if not hasattr(issue, 'traitVals') or issue.traitVals != traitVals: issue.traitVals = traitVals --- 377,393 ---- if REQUEST is None: val = None else: val = REQUEST.get(i + "__trait", None) if val is not None: ! traitVals.append((i, val))# traitdict[i] = val elif origTraitValsDict.has_key(i): ! traitVals.append((i, origTraitValsDict[i]))# traitdict[i] = origTraitValsDict[i] else: traitdict[i] = '' if extend: vals = traitsStruct[i + "_range"][1] ! if vals: traitVals.append((i, vals[0]))# ! else: traitVals.append((i, ''))# if not hasattr(issue, 'traitVals') or issue.traitVals != traitVals: issue.traitVals = traitVals *************** *** 2067,2077 **** else: msg = str(tbobj) msg = msg + ', ' + str((herepath, branchpoint, ps)) ! got.append(p, msg) if o is not None: if not hasattr(o, 'type') or o.type != 'tracker': ! got.append(o, "Not a tracker") else: if gotids.has_key(id(o.aq_base)): # Already have one. --- 2067,2077 ---- else: msg = str(tbobj) msg = msg + ', ' + str((herepath, branchpoint, ps)) ! got.append((p, msg))# if o is not None: if not hasattr(o, 'type') or o.type != 'tracker': ! got.append((o, "Not a tracker"))# else: if gotids.has_key(id(o.aq_base)): # Already have one. *************** *** 2079,2088 **** if o.tracker_role(o, 'staff', user=REQUEST.AUTHENTICATED_USER): # Bingo - we have staff access in this object. gotids[id(o.aq_base)] = 1 ! got.append(p, (o,)) gotobjs.append(o) else: ! got.append(p, "Not staff in this tracker") tracker.peers = peers return (gotobjs, got) --- 2079,2088 ---- if o.tracker_role(o, 'staff', user=REQUEST.AUTHENTICATED_USER): # Bingo - we have staff access in this object. gotids[id(o.aq_base)] = 1 ! got.append((p, (o,)))# gotobjs.append(o) else: ! got.append((p, "Not staff in this tracker"))# tracker.peers = peers return (gotobjs, got) troy@caustic:~/Zope-2.3.2-src/lib/python/Products/TrackerBase$ ********************************************* End DIFFS *********************************************