From: Kevin C. <ke...@us...> - 2005-11-17 15:08:25
|
Update of /cvsroot/mailmanager/MailManager/ruleset In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv24389/MailManager_HEAD/ruleset Modified Files: __init__.py actions.py common.py engine.py events.py processticket.py visualisation.py zope.py Log Message: Removed the overdue attribute and replaced with a state More methods into SQL Index: processticket.py =================================================================== RCS file: /cvsroot/mailmanager/MailManager/ruleset/processticket.py,v retrieving revision 1.3 retrieving revision 1.4 diff -u -d -r1.3 -r1.4 --- processticket.py 16 Nov 2005 15:07:04 -0000 1.3 +++ processticket.py 17 Nov 2005 15:08:10 -0000 1.4 @@ -1,13 +1,11 @@ -# (c) Copyright Logicalware Ltd 2002-2005 -# Logicalware MailManager comes with ABSOLUTELY NO WARRANTY. Further details -# including conditions of redistribution are contained in LICENSE.txt -# http://www.logicalware.org/ -# $Id$ - # Ruleset code -from common import historyItem, ticketState, NoTransitionError -from engine import rulesetEngine, InMemoryRulesetEngine +try: + from common import historyItem, ticketState, NoTransitionError + from engine import rulesetEngine, InMemoryRulesetEngine +except ImportError: + from Products.MailManager.ruleset.common import historyItem, ticketState, NoTransitionError + from Products.MailManager.ruleset.engine import rulesetEngine, InMemoryRulesetEngine def processtest(engine): """ Tests processing a number of mock tickets through the ruleset engine @@ -153,7 +151,7 @@ print "" for event in engine.getQueuedEvents(): - (name, tid) = event + (tid, name, ts) = event for t in ticketpool: if t.id == tid: ticket = t @@ -161,7 +159,7 @@ engine.houroffset = 1 for event in engine.getQueuedEvents(): - (name, tid) = event + (tid, name, ts) = event for t in ticketpool: if t.id == tid: ticket = t Index: zope.py =================================================================== RCS file: /cvsroot/mailmanager/MailManager/ruleset/zope.py,v retrieving revision 1.2 retrieving revision 1.3 diff -u -d -r1.2 -r1.3 --- zope.py 16 Nov 2005 15:07:04 -0000 1.2 +++ zope.py 17 Nov 2005 15:08:10 -0000 1.3 @@ -1,9 +1,4 @@ #!/usr/bin/env python -# (c) Copyright Logicalware Ltd 2002-2005 -# Logicalware MailManager comes with ABSOLUTELY NO WARRANTY. Further details -# including conditions of redistribution are contained in LICENSE.txt -# http://www.logicalware.org/ -# $Id$ """ Ruleset integration with zope @@ -44,6 +39,7 @@ from engine import rulesetEngine from actions import getNamedAction from events import Transition +from visualisation import rulesetVisualisationMixin import os @@ -51,6 +47,8 @@ from pprint import pprint +import mx.DateTime + class BadRequest(Exception): pass @@ -79,6 +77,7 @@ OFS.PropertyManager.PropertyManager, Acquisition.Implicit, AccessControl.Role.RoleManager, + rulesetVisualisationMixin, rulesetEngine): meta_type = 'RulesetEngine' @@ -111,6 +110,8 @@ datfile = os.path.join(Globals.package_home(globals()), '..', 'ruleset/data/%s.py' % rsname) execfile(datfile, globals(), data) self.states = data['ruleset']['states'] + self.events = data['ruleset']['events'] + self.actions = data['ruleset']['actions'] self.transitions = data['ruleset']['states'] self.attributes = data['ruleset']['attributes'] self.categories = data['ruleset']['categories'] @@ -120,6 +121,10 @@ self.sql.addRulesetAttribute(sqv_attribute = attribute) for event in events: + self.sql.addRulesetEvent( + sqv_name = event.eventname + ) + for transition in event.transitions: transition_id = self.sql.getNextRulesetTransitionId()[0].id @@ -150,6 +155,12 @@ sqv_params = action.pickle() ) + def getStates(self): + return self.states + + def getEvents(self): + return self.events + def getTransitions(self, state, event): transitions = [] for e in self.events: @@ -179,12 +190,9 @@ pass - def getTransitions(self, state, event): #self.sql.getRulesetTransitions(ruleset = self.rulesetname, state = state, name = event) res = self.sql.getRulesetTransitions(sqv_state = state, sqv_name = event) - print res - print "Iterating" tobjs = [] for r in res: actions = [] @@ -204,18 +212,42 @@ tobjs.append(tobj) return tobjs - -# def queueTimeEvent(self, eventname, tid, time): -# self.sql.addRulesetTimeEvent(ticket_id = tid, eventname = eventname, time = time) -# -# def clearTimeEvents(self, tid): -# self.sql.clearRulesetTimeEvents(ticket_id = tid) -# -# def getQueuedEvents(self): -# self.sql.getRulesetTimeEvents(ticket_id = tid) + def queueTimeEvent(self, eventname, ticket, time): + return self.sql.addRulesetTimeEvent(sqv_tid = ticket.id, sqv_eventname = eventname, sqv_time = time) + + def clearTimeEvents(self, ticket): + return self.sql.deleteRulesetTimeEvents(sqv_tid = ticket.id) + + def getQueuedEvents(self): + return self.sql.getRulesetTimeEvents(sqv_time = mx.DateTime.now()) + +class sqlTicketState(ticketState): + + elip_width = 100 + elip_height = 60 + elip_font = 'fonts/cour.ttf' + + attr_width = 100 + attr_height = 30 + attr_spacing = 10 + attr_font = 'fonts/cour.ttf' + + fontsize = 10.0 + + def getGroup(self): + return "Sales" + + def __init__(self, id, state=None, assigned=None, attributes=[], siblings=[], parent=None, ticketpool=None): + self.id = id + self.state = state + self.attributes = attributes + self.assigned = assigned + self.parent = parent + self._ticketpool = ticketpool + Index: visualisation.py =================================================================== RCS file: /cvsroot/mailmanager/MailManager/ruleset/visualisation.py,v retrieving revision 1.2 retrieving revision 1.3 diff -u -d -r1.2 -r1.3 --- visualisation.py 16 Nov 2005 15:07:04 -0000 1.2 +++ visualisation.py 17 Nov 2005 15:08:10 -0000 1.3 @@ -1,9 +1,4 @@ #!/usr/bin/env python -# (c) Copyright Logicalware Ltd 2002-2005 -# Logicalware MailManager comes with ABSOLUTELY NO WARRANTY. Further details -# including conditions of redistribution are contained in LICENSE.txt -# http://www.logicalware.org/ -# $Id$ """ MailManager ruleset engine visualisation Index: common.py =================================================================== RCS file: /cvsroot/mailmanager/MailManager/ruleset/common.py,v retrieving revision 1.2 retrieving revision 1.3 diff -u -d -r1.2 -r1.3 --- common.py 16 Nov 2005 15:07:04 -0000 1.2 +++ common.py 17 Nov 2005 15:08:10 -0000 1.3 @@ -1,9 +1,4 @@ #!/usr/bin/env python -# (c) Copyright Logicalware Ltd 2002-2005 -# Logicalware MailManager comes with ABSOLUTELY NO WARRANTY. Further details -# including conditions of redistribution are contained in LICENSE.txt -# http://www.logicalware.org/ -# $Id$ """ MailManager ruleset engine 2.1 @@ -108,9 +103,22 @@ if ticket.id == id: return ticket + def onRulesetAlterState(self, oldstate, newstate): + """ Hook point for the ruleset engine modifying the ticket's state + + This hook point should not be used to modify the ticket's state + at all, nor alter attributes, call actions, nor modify other + tickets. Doing so will likely break the properties of the state + machine. Instead, this is primarily meant for hooks to be able + to record the time that a ticket is held open for accounting + purposes and calculating overdue status. + """ + def calculateOverdue(self): - if 'Responded' not in self.attributes and 'Overdue' not in self.attributes: + if 'Responded' not in self.attributes and not self.state == 'Overdue': return mx.DateTime.strptime('2001-01-01', '%Y-%m-%d') + mx.DateTime.DateTimeDelta(0,1) + else: + return None def updateSiblingAttribute(self): """ Update our own attribute 'openSiblings' Index: __init__.py =================================================================== RCS file: /cvsroot/mailmanager/MailManager/ruleset/__init__.py,v retrieving revision 1.2 retrieving revision 1.3 diff -u -d -r1.2 -r1.3 --- __init__.py 16 Nov 2005 15:07:04 -0000 1.2 +++ __init__.py 17 Nov 2005 15:08:10 -0000 1.3 @@ -1,6 +1 @@ -# (c) Copyright Logicalware Ltd 2002-2005 -# Logicalware MailManager comes with ABSOLUTELY NO WARRANTY. Further details -# including conditions of redistribution are contained in LICENSE.txt -# http://www.logicalware.org/ -# $Id$ Index: events.py =================================================================== RCS file: /cvsroot/mailmanager/MailManager/ruleset/events.py,v retrieving revision 1.2 retrieving revision 1.3 diff -u -d -r1.2 -r1.3 --- events.py 16 Nov 2005 15:07:04 -0000 1.2 +++ events.py 17 Nov 2005 15:08:10 -0000 1.3 @@ -1,9 +1,3 @@ -# (c) Copyright Logicalware Ltd 2002-2005 -# Logicalware MailManager comes with ABSOLUTELY NO WARRANTY. Further details -# including conditions of redistribution are contained in LICENSE.txt -# http://www.logicalware.org/ -# $Id$ - class Transition: def __init__(self, state=None, attrs=[], perms='Other', newstate=None, actions=[]): @@ -35,7 +29,7 @@ class GetMailEvent(Event): pass -class OverdueEvent(Event): +class TimeEvent(Event): pass class EpsilonEvent(Event): Index: engine.py =================================================================== RCS file: /cvsroot/mailmanager/MailManager/ruleset/engine.py,v retrieving revision 1.2 retrieving revision 1.3 diff -u -d -r1.2 -r1.3 --- engine.py 16 Nov 2005 15:07:04 -0000 1.2 +++ engine.py 17 Nov 2005 15:08:10 -0000 1.3 @@ -1,11 +1,5 @@ #!/usr/bin/env python -# (c) Copyright Logicalware Ltd 2002-2005 -# Logicalware MailManager comes with ABSOLUTELY NO WARRANTY. Further details -# including conditions of redistribution are contained in LICENSE.txt -# http://www.logicalware.org/ -# $Id$ - """ MailManager ruleset engine @@ -41,6 +35,11 @@ class actionHandlersMixin: + """ Call python code to do an action based on a ticket/action pair + + Works with both mock tickets and SQL tickets within zope + + """ def AlertOwner(self, ticket, action): if action.alertmsg == 'Opened': @@ -194,6 +193,9 @@ print "Transition from state %s to state %s" % (ticket.state, transition.newstate) ticket.state = transition.newstate + # Hook for noting update to ticket state + ticket.onRulesetAlterState(origstate, ticket.state) + # Run through all actions for action in transition.actions: self.actionHandlers[action.name](ticket, action) Index: actions.py =================================================================== RCS file: /cvsroot/mailmanager/MailManager/ruleset/actions.py,v retrieving revision 1.2 retrieving revision 1.3 diff -u -d -r1.2 -r1.3 --- actions.py 16 Nov 2005 15:07:04 -0000 1.2 +++ actions.py 17 Nov 2005 15:08:10 -0000 1.3 @@ -1,8 +1,3 @@ -# (c) Copyright Logicalware Ltd 2002-2005 -# Logicalware MailManager comes with ABSOLUTELY NO WARRANTY. Further details -# including conditions of redistribution are contained in LICENSE.txt -# http://www.logicalware.org/ -# $Id$ class AlertOwner: |