From 2973fc8a1b28143acd577bb495200a30c8ef3e9a Mon Sep 17 00:00:00 2001
From: Wenjie Zheng <wenjie.zheng@tiolive.com>
Date: Tue, 10 Mar 2015 14:49:02 +0000
Subject: [PATCH] Transition.py: Remove duplicated WorkflowHistoryList class
 definition, import same class from WorkflowTool.py instead.

---
 product/ERP5Workflow/Document/Transition.py | 87 +--------------------
 1 file changed, 1 insertion(+), 86 deletions(-)

diff --git a/product/ERP5Workflow/Document/Transition.py b/product/ERP5Workflow/Document/Transition.py
index 542f8c0b98..8f1b8f2b8b 100644
--- a/product/ERP5Workflow/Document/Transition.py
+++ b/product/ERP5Workflow/Document/Transition.py
@@ -37,7 +37,7 @@ from zLOG import LOG, ERROR, DEBUG, WARNING
 from Products.ERP5Type.Utils import convertToUpperCase, convertToMixedCase
 from Products.DCWorkflow.DCWorkflow import ObjectDeleted, ObjectMoved
 from copy import deepcopy
-from Persistence import Persistent
+from Products.ERP5Type.patches.WorkflowTool import WorkflowHistoryList
 
 class Transition(XMLObject):
   """
@@ -163,7 +163,6 @@ class Transition(XMLObject):
     for variable in self.contentValues(portal_type='Transition Variable'):
       status_dict[variable.getCausalityTitle()] = variable.getInitialValue(object=object)
 
-    #workflow._updateWorkflowHistory(document, status_dict)
     self.setStatusOf(workflow.getId(), document, status_dict)
     # Execute the "after" script.
     script_id = self.getAfterScriptId()
@@ -231,87 +230,3 @@ class Transition(XMLObject):
             ob.workflow_history = PersistentMapping()
         ob.workflow_history[wf_id] = wfh
     wfh.append(status)
-
-class WorkflowHistoryList(Persistent):
-  _bucket_size = 16
-
-  def __init__(self, iterable=None, prev=None):
-    self._prev = prev
-    self._slots = []
-    if iterable is not None:
-      for x in iterable:
-        self.append(x)
-
-  def __add__(self, iterable):
-    return self.__class__(tuple(self) + tuple(iterable))
-
-  def __contains__(self, item):
-    return item in tuple(self)
-
-  def __eq__(self, other):
-    return tuple(self) == tuple(other)
-
-  def __getitem__(self, index):
-    if index == -1:
-      return self._slots[-1]
-    elif isinstance(index, (int, long)):
-      if index < 0:
-        # XXX this implementation is not so good, but rarely used.
-        index += len(self)
-      iterator = self.__iter__()
-      for i in xrange(index):
-        iterator.next()
-      return iterator.next()
-    elif isinstance(index, slice):
-      return self.__class__((self[x] for x in
-                                   xrange(*index.indices(len(self)))))
-    else:
-      raise TypeError, 'tuple indices must be integers'
-
-  def __getslice__(self, start, end):
-    return self.__getitem__(slice(start, end))
-
-  def __getstate__(self):
-    return (self._prev, self._slots)
-
-  def __iter__(self):
-    bucket = self
-    stack = []
-    while bucket is not None:
-      stack.append(bucket)
-      bucket = bucket._prev
-    for i in reversed(stack):
-      for j in i._slots:
-        yield j
-
-  def __len__(self):
-    length = len(self._slots)
-    bucket = self._prev
-    while bucket is not None:
-      length += len(bucket._slots)
-      bucket = bucket._prev
-    return length
-
-  def __mul__(self, x):
-    return self.__class__(tuple(self) * x)
-
-  def __nonzero__(self):
-    return len(self._slots) != 0 or self._prev is not None
-
-  def __repr__(self):
-    #return '%s' % repr(tuple(self.__iter__()))
-    return '<%s object at 0x%x %r>' % (self.__class__.__name__, id(self), tuple(self))
-
-  def __rmul__(self, x):
-    return self.__class__(x * tuple(self))
-
-  def __setstate__(self, state):
-    self._prev, self._slots = state
-
-  def append(self, value):
-    if len(self._slots) < self._bucket_size:
-      self._slots.append(value)
-      self._p_changed = 1
-    else:
-      self._prev = self.__class__(self._slots, prev=self._prev)
-      self._slots = [value]
\ No newline at end of file
-- 
GitLab