work in progress: organize: Python3 fixes
This commit is contained in:
parent
8d260908a5
commit
52990d1df6
19 changed files with 112 additions and 394 deletions
|
@ -1,28 +1,9 @@
|
|||
#
|
||||
# Copyright (c) 2007 Helmut Merz helmutm@cy55.de
|
||||
#
|
||||
# This program is free software; you can redistribute it and/or modify
|
||||
# it under the terms of the GNU General Public License as published by
|
||||
# the Free Software Foundation; either version 2 of the License, or
|
||||
# (at your option) any later version.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU General Public License
|
||||
# along with this program; if not, write to the Free Software
|
||||
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
#
|
||||
# cybertools.composer.message.base
|
||||
|
||||
"""
|
||||
Basic classes for message management.
|
||||
|
||||
$Id$
|
||||
""" Basic classes for message management.
|
||||
"""
|
||||
|
||||
from zope.interface import implements
|
||||
from zope.interface import implementer
|
||||
|
||||
from cybertools.composer.base import Component, Element, Compound
|
||||
from cybertools.composer.base import Template
|
||||
|
@ -30,10 +11,9 @@ from cybertools.composer.message.interfaces import IMessageManager, IMessage
|
|||
from cybertools.util.jeep import Jeep
|
||||
|
||||
|
||||
@implementer(IMessageManager)
|
||||
class MessageManager(object):
|
||||
|
||||
implements(IMessageManager)
|
||||
|
||||
messagesFactory = Jeep
|
||||
|
||||
messages = None
|
||||
|
@ -50,10 +30,9 @@ class MessageManager(object):
|
|||
self.messages.append(message)
|
||||
|
||||
|
||||
@implementer(IMessage)
|
||||
class Message(Template):
|
||||
|
||||
implements(IMessage)
|
||||
|
||||
name = u''
|
||||
manager = None
|
||||
|
||||
|
|
|
@ -1,30 +1,11 @@
|
|||
#
|
||||
# Copyright (c) 2007 Helmut Merz helmutm@cy55.de
|
||||
#
|
||||
# This program is free software; you can redistribute it and/or modify
|
||||
# it under the terms of the GNU General Public License as published by
|
||||
# the Free Software Foundation; either version 2 of the License, or
|
||||
# (at your option) any later version.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU General Public License
|
||||
# along with this program; if not, write to the Free Software
|
||||
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
#
|
||||
# cybertools.composer.rule.base
|
||||
|
||||
"""
|
||||
Basic classes for rules and actions.
|
||||
|
||||
$Id$
|
||||
""" Basic classes for rules and actions.
|
||||
"""
|
||||
|
||||
from zope import component
|
||||
from zope.component import adapts
|
||||
from zope.interface import implements
|
||||
from zope.interface import implementer
|
||||
|
||||
from cybertools.composer.base import Component, Element, Compound
|
||||
from cybertools.composer.base import Template
|
||||
|
@ -38,10 +19,9 @@ from cybertools.util.jeep import Jeep
|
|||
|
||||
# rules
|
||||
|
||||
@implementer(IRuleManager)
|
||||
class RuleManager(object):
|
||||
|
||||
implements(IRuleManager)
|
||||
|
||||
rulesFactory = Jeep
|
||||
rules = None
|
||||
|
||||
|
@ -67,10 +47,9 @@ class RuleManager(object):
|
|||
return result
|
||||
|
||||
|
||||
@implementer(IRule)
|
||||
class Rule(Template):
|
||||
|
||||
implements(IRule)
|
||||
|
||||
name = title = description = u''
|
||||
manager = None
|
||||
actions = None
|
||||
|
@ -95,10 +74,9 @@ class EventType(object):
|
|||
self.title = title or name
|
||||
|
||||
|
||||
@implementer(IEvent)
|
||||
class Event(object):
|
||||
|
||||
implements(IEvent)
|
||||
|
||||
def __init__(self, eventType, context=None, request=None):
|
||||
self.eventType = eventType
|
||||
self.name = eventType.name
|
||||
|
@ -109,9 +87,9 @@ class Event(object):
|
|||
|
||||
# conditions
|
||||
|
||||
@implementer(ICondition)
|
||||
class Condition(object):
|
||||
|
||||
implements(ICondition)
|
||||
adapts(IRuleInstance)
|
||||
|
||||
def __init__(self, context):
|
||||
|
@ -123,10 +101,9 @@ class Condition(object):
|
|||
|
||||
# actions
|
||||
|
||||
@implementer(IAction)
|
||||
class Action(Component):
|
||||
|
||||
implements(IAction)
|
||||
|
||||
name = u''
|
||||
handlerName = u''
|
||||
parameters = None
|
||||
|
@ -142,9 +119,9 @@ class Action(Component):
|
|||
self.handlerName = name
|
||||
|
||||
|
||||
@implementer(IActionHandler)
|
||||
class ActionHandler(object):
|
||||
|
||||
implements(IActionHandler)
|
||||
adapts(IRuleInstance)
|
||||
|
||||
def __init__(self, context):
|
||||
|
|
|
@ -1,38 +1,19 @@
|
|||
#
|
||||
# Copyright (c) 2007 Helmut Merz helmutm@cy55.de
|
||||
#
|
||||
# This program is free software; you can redistribute it and/or modify
|
||||
# it under the terms of the GNU General Public License as published by
|
||||
# the Free Software Foundation; either version 2 of the License, or
|
||||
# (at your option) any later version.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU General Public License
|
||||
# along with this program; if not, write to the Free Software
|
||||
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
#
|
||||
# cybertools.rule.instance
|
||||
|
||||
"""
|
||||
Rule instance and related classes.
|
||||
|
||||
$Id$
|
||||
""" Rule instance and related classes.
|
||||
"""
|
||||
|
||||
from zope import component
|
||||
from zope.component import adapts
|
||||
from zope.interface import Interface, implements
|
||||
from zope.interface import Interface, implementer
|
||||
|
||||
from cybertools.composer.instance import Instance
|
||||
from cybertools.composer.rule.interfaces import IRuleInstance, IActionHandler
|
||||
|
||||
|
||||
@implementer(IRuleInstance)
|
||||
class RuleInstance(Instance):
|
||||
|
||||
implements(IRuleInstance)
|
||||
adapts(Interface)
|
||||
|
||||
template = None
|
||||
|
|
|
@ -1,21 +1,20 @@
|
|||
|
||||
import unittest, doctest
|
||||
from email import message_from_string
|
||||
from zope.interface import implements
|
||||
from zope.interface import implementer
|
||||
from zope.sendmail.interfaces import IMailDelivery
|
||||
|
||||
|
||||
@implementer(IMailDelivery)
|
||||
class TestMailer(object):
|
||||
|
||||
implements(IMailDelivery)
|
||||
|
||||
def send(self, sender, recipients, message):
|
||||
print 'sender:', sender
|
||||
print 'recipients:', recipients
|
||||
print('sender:', sender)
|
||||
print('recipients:', recipients)
|
||||
msg = message_from_string(message)
|
||||
print 'subject:', msg['Subject']
|
||||
print 'message:'
|
||||
print msg.get_payload(decode=True)
|
||||
print('subject:', msg['Subject'])
|
||||
print('message:')
|
||||
print(msg.get_payload(decode=True))
|
||||
|
||||
|
||||
class Test(unittest.TestCase):
|
||||
|
|
|
@ -1,29 +1,9 @@
|
|||
#
|
||||
# Copyright (c) 2009 Helmut Merz helmutm@cy55.de
|
||||
#
|
||||
# This program is free software; you can redistribute it and/or modify
|
||||
# it under the terms of the GNU General Public License as published by
|
||||
# the Free Software Foundation; either version 2 of the License, or
|
||||
# (at your option) any later version.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU General Public License
|
||||
# along with this program; if not, write to the Free Software
|
||||
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
#
|
||||
# cybertools.composer.rule.web
|
||||
|
||||
"""
|
||||
Action handler for sending emails.
|
||||
|
||||
$Id$
|
||||
""" Action handler for sending emails.
|
||||
"""
|
||||
|
||||
from zope import component
|
||||
from zope.interface import implements
|
||||
|
||||
from cybertools.composer.rule.interfaces import IRuleManager, IRuleInstance
|
||||
from cybertools.composer.rule.interfaces import IActionHandler
|
||||
|
|
|
@ -1,32 +1,13 @@
|
|||
#
|
||||
# Copyright (c) 2010 Helmut Merz helmutm@cy55.de
|
||||
#
|
||||
# This program is free software; you can redistribute it and/or modify
|
||||
# it under the terms of the GNU General Public License as published by
|
||||
# the Free Software Foundation; either version 2 of the License, or
|
||||
# (at your option) any later version.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU General Public License
|
||||
# along with this program; if not, write to the Free Software
|
||||
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
#
|
||||
# cybertools.composer.schema.browser.common
|
||||
|
||||
"""
|
||||
Common base class(es) for schema and other template views.
|
||||
|
||||
$Id$
|
||||
""" Common base class(es) for schema and other template views.
|
||||
"""
|
||||
|
||||
from datetime import datetime
|
||||
import time
|
||||
from zope import component
|
||||
from zope.app.pagetemplate import ViewPageTemplateFile
|
||||
from zope.app.session.interfaces import ISession
|
||||
from zope.browserpage import ViewPageTemplateFile
|
||||
from zope.session.interfaces import ISession
|
||||
from zope.cachedescriptors.property import Lazy
|
||||
from zope.traversing.browser.absoluteurl import absoluteURL
|
||||
|
||||
|
|
|
@ -1,25 +1,6 @@
|
|||
#
|
||||
# Copyright (c) 2010 Helmut Merz helmutm@cy55.de
|
||||
#
|
||||
# This program is free software; you can redistribute it and/or modify
|
||||
# it under the terms of the GNU General Public License as published by
|
||||
# the Free Software Foundation; either version 2 of the License, or
|
||||
# (at your option) any later version.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU General Public License
|
||||
# along with this program; if not, write to the Free Software
|
||||
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
#
|
||||
# cybertools.composer.schema.client
|
||||
|
||||
"""
|
||||
Client implementations.
|
||||
|
||||
$Id$
|
||||
""" Client implementations.
|
||||
"""
|
||||
|
||||
from BTrees.OOBTree import OOBTree
|
||||
|
@ -27,7 +8,7 @@ from persistent import Persistent
|
|||
from time import time
|
||||
from zope.cachedescriptors.property import Lazy
|
||||
from zope.component import adapts
|
||||
from zope.interface import implements
|
||||
from zope.interface import implementer
|
||||
|
||||
from cybertools.composer.message.base import MessageManager
|
||||
from cybertools.composer.rule.base import RuleManager, EventType
|
||||
|
@ -42,10 +23,9 @@ from cybertools.util.jeep import Jeep
|
|||
from cybertools.util.randomname import generateName
|
||||
|
||||
|
||||
@implementer(IClientManager)
|
||||
class ClientManager(object):
|
||||
|
||||
implements(IClientManager)
|
||||
|
||||
clientSchemasFactory = Jeep
|
||||
clientsFactory = OOBTree
|
||||
|
||||
|
@ -85,10 +65,9 @@ class ClientManager(object):
|
|||
return name not in self.getClients()
|
||||
|
||||
|
||||
@implementer(IClient)
|
||||
class Client(Persistent):
|
||||
|
||||
implements(IClient)
|
||||
|
||||
timeStamp = None
|
||||
|
||||
def __init__(self, manager=None):
|
||||
|
@ -96,9 +75,9 @@ class Client(Persistent):
|
|||
self.timeStamp = int(time())
|
||||
|
||||
|
||||
@implementer(IClientFactory)
|
||||
class ClientFactory(object):
|
||||
|
||||
implements(IClientFactory)
|
||||
adapts(IClientManager)
|
||||
|
||||
def __init__(self, context):
|
||||
|
|
|
@ -127,7 +127,7 @@ class Field(Component):
|
|||
if instance is not None:
|
||||
context = instance.context
|
||||
voc = (self.vocabulary or '')
|
||||
if isinstance(voc, basestring):
|
||||
if isinstance(voc, str):
|
||||
terms = self.getVocabularyTerms(voc, context, request)
|
||||
if terms is not None:
|
||||
return terms
|
||||
|
@ -268,7 +268,7 @@ class DecimalFieldInstance(NumberFieldInstance):
|
|||
def display(self, value, pattern=u'#,##0.00;-#,##0.00'):
|
||||
if value is None:
|
||||
return ''
|
||||
if isinstance(value, basestring):
|
||||
if isinstance(value, str):
|
||||
if not value.isdigit():
|
||||
return value
|
||||
value = float(value)
|
||||
|
@ -293,7 +293,7 @@ class DateFieldInstance(NumberFieldInstance):
|
|||
def marshall(self, value):
|
||||
if not value:
|
||||
return ''
|
||||
if isinstance(value, basestring):
|
||||
if isinstance(value, str):
|
||||
return value
|
||||
try:
|
||||
return strftime('%Y-%m-%dT%H:%M', value.timetuple())
|
||||
|
@ -402,7 +402,7 @@ class ListFieldInstance(FieldInstance):
|
|||
return component.getAdapter(self.valueType, IFieldInstance, name=instanceName)
|
||||
|
||||
def marshall(self, value):
|
||||
if isinstance(value, basestring):
|
||||
if isinstance(value, str):
|
||||
return value
|
||||
if value is None:
|
||||
return u''
|
||||
|
@ -412,12 +412,12 @@ class ListFieldInstance(FieldInstance):
|
|||
def display(self, value):
|
||||
if not value:
|
||||
return u''
|
||||
if isinstance(value, basestring):
|
||||
if isinstance(value, str):
|
||||
return value
|
||||
return u' | '.join(unicode(self.valueFieldInstance.display(v)) for v in value)
|
||||
|
||||
def unmarshall(self, value):
|
||||
if isinstance(value, basestring):
|
||||
if isinstance(value, str):
|
||||
value = value.split('\n')
|
||||
return [self.valueFieldInstance.unmarshall(v.strip())
|
||||
for v in value if v.strip()]
|
||||
|
|
|
@ -1,29 +1,12 @@
|
|||
#
|
||||
# Copyright (c) 2013 Helmut Merz helmutm@cy55.de
|
||||
#
|
||||
# This program is free software; you can redistribute it and/or modify
|
||||
# it under the terms of the GNU General Public License as published by
|
||||
# the Free Software Foundation; either version 2 of the License, or
|
||||
# (at your option) any later version.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU General Public License
|
||||
# along with this program; if not, write to the Free Software
|
||||
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
#
|
||||
# cybertools.composer.schema.instance
|
||||
|
||||
"""
|
||||
Instance adapter classes for schemas.
|
||||
""" Instance adapter classes for schemas.
|
||||
"""
|
||||
|
||||
from BTrees.OOBTree import OOBTree
|
||||
from zope.cachedescriptors.property import Lazy
|
||||
from zope.component import adapts
|
||||
from zope.interface import implements, Interface
|
||||
from zope.interface import implementer, Interface
|
||||
|
||||
from cybertools.composer.instance import Instance as BaseInstance
|
||||
from cybertools.composer.interfaces import IInstance
|
||||
|
@ -32,9 +15,9 @@ from cybertools.composer.schema.schema import FormState
|
|||
from cybertools.util.jeep import Jeep
|
||||
|
||||
|
||||
@implementer(IInstance)
|
||||
class Instance(BaseInstance):
|
||||
|
||||
implements(IInstance)
|
||||
adapts(Interface)
|
||||
|
||||
aspect = 'schema.editor.default'
|
||||
|
@ -77,9 +60,9 @@ class Instance(BaseInstance):
|
|||
return self.getFieldInstances()
|
||||
|
||||
|
||||
@implementer(IInstance)
|
||||
class Editor(BaseInstance):
|
||||
|
||||
implements(IInstance)
|
||||
adapts(Interface)
|
||||
|
||||
aspect = 'schema.editor.default'
|
||||
|
@ -134,9 +117,9 @@ class Editor(BaseInstance):
|
|||
return formState
|
||||
|
||||
|
||||
@implementer(IInstance)
|
||||
class ClientInstance(object):
|
||||
|
||||
implements(IInstance)
|
||||
adapts(IClient)
|
||||
|
||||
attrsName = '__schema_attributes__'
|
||||
|
|
|
@ -1,29 +1,10 @@
|
|||
#
|
||||
# Copyright (c) 2010 Helmut Merz helmutm@cy55.de
|
||||
#
|
||||
# This program is free software; you can redistribute it and/or modify
|
||||
# it under the terms of the GNU General Public License as published by
|
||||
# the Free Software Foundation; either version 2 of the License, or
|
||||
# (at your option) any later version.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU General Public License
|
||||
# along with this program; if not, write to the Free Software
|
||||
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
#
|
||||
# cybertools.organize.browser.report
|
||||
|
||||
"""
|
||||
View classes for CSV export.
|
||||
|
||||
$Id$
|
||||
""" View classes for CSV export.
|
||||
"""
|
||||
|
||||
import csv
|
||||
from cStringIO import StringIO
|
||||
from io import StringIO
|
||||
import itertools
|
||||
from zope import component
|
||||
from zope.cachedescriptors.property import Lazy
|
||||
|
@ -172,7 +153,7 @@ class RegistrationsExportCsv(BaseView):
|
|||
return result
|
||||
|
||||
def encode(self, text):
|
||||
if type(text) is unicode:
|
||||
if isinstance(text, str):
|
||||
result = []
|
||||
for c in text:
|
||||
try:
|
||||
|
@ -180,5 +161,5 @@ class RegistrationsExportCsv(BaseView):
|
|||
except UnicodeEncodeError:
|
||||
c = '?'
|
||||
result.append(c)
|
||||
text = ''.join(result)
|
||||
text = b''.join(result)
|
||||
return text
|
||||
|
|
|
@ -1,38 +1,18 @@
|
|||
#
|
||||
# Copyright (c) 2006 Helmut Merz helmutm@cy55.de
|
||||
#
|
||||
# This program is free software; you can redistribute it and/or modify
|
||||
# it under the terms of the GNU General Public License as published by
|
||||
# the Free Software Foundation; either version 2 of the License, or
|
||||
# (at your option) any later version.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU General Public License
|
||||
# along with this program; if not, write to the Free Software
|
||||
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
#
|
||||
# cybertools.organize.party
|
||||
|
||||
"""
|
||||
A set of simple application classes for contact management; this may be used
|
||||
""" A set of simple application classes for contact management; this may be used
|
||||
as an example for some of the cybertools packages, but may also be the base
|
||||
for some real life stuff.
|
||||
|
||||
$Id$
|
||||
"""
|
||||
|
||||
from zope.interface import implements
|
||||
from zope.interface import implementer
|
||||
from datetime import date
|
||||
from cybertools.organize.interfaces import IPerson, IAddress
|
||||
|
||||
|
||||
@implementer(IPerson)
|
||||
class Person(object):
|
||||
|
||||
implements(IPerson)
|
||||
|
||||
def __init__(self, lastName, firstName=u'', birthDate=None):
|
||||
self.lastName = lastName
|
||||
self.firstName = firstName
|
||||
|
@ -55,10 +35,9 @@ class Person(object):
|
|||
return int((dt - date(bd.year, bd.month, bd.day)).days/365.25)
|
||||
|
||||
|
||||
@implementer(IAddress)
|
||||
class Address(object):
|
||||
|
||||
implements(IAddress)
|
||||
|
||||
def __init__(self, city, street=u'', lines=[],
|
||||
zipcode=None, country=None):
|
||||
self.lines = lines # a sequence of additional address lines
|
||||
|
|
|
@ -1,25 +1,6 @@
|
|||
#
|
||||
# Copyright (c) 2011 Helmut Merz helmutm@cy55.de
|
||||
#
|
||||
# This program is free software; you can redistribute it and/or modify
|
||||
# it under the terms of the GNU General Public License as published by
|
||||
# the Free Software Foundation; either version 2 of the License, or
|
||||
# (at your option) any later version.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU General Public License
|
||||
# along with this program; if not, write to the Free Software
|
||||
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
#
|
||||
# cybertools.organize.service
|
||||
|
||||
"""
|
||||
Service management classes.
|
||||
|
||||
$Id$
|
||||
""" Service management classes.
|
||||
"""
|
||||
|
||||
from time import time
|
||||
|
@ -28,7 +9,7 @@ from BTrees.OOBTree import OOBTree
|
|||
from zope.cachedescriptors.property import Lazy
|
||||
from zope.component import adapts
|
||||
from zope import component
|
||||
from zope.interface import implements, Interface
|
||||
from zope.interface import implementer, Interface
|
||||
|
||||
from cybertools.composer.interfaces import IInstance
|
||||
from cybertools.composer.message.base import MessageManager
|
||||
|
@ -50,10 +31,9 @@ from cybertools.organize.interfaces import IRegistration, IRegistrationTemplate
|
|||
from cybertools.organize.interfaces import IClientRegistrations
|
||||
|
||||
|
||||
@implementer(IServiceManager)
|
||||
class ServiceManager(ClientManager):
|
||||
|
||||
implements(IServiceManager)
|
||||
|
||||
servicesFactory = Jeep
|
||||
services = None
|
||||
|
||||
|
@ -69,10 +49,9 @@ class ServiceManager(ClientManager):
|
|||
return self.services
|
||||
|
||||
|
||||
@implementer(IRegistration)
|
||||
class Registration(object):
|
||||
|
||||
implements(IRegistration)
|
||||
|
||||
number = 1
|
||||
numberWaiting = 0
|
||||
|
||||
|
@ -89,10 +68,9 @@ class PersistentRegistration(Registration, Persistent):
|
|||
pass
|
||||
|
||||
|
||||
@implementer(IService)
|
||||
class Service(object):
|
||||
|
||||
implements(IService)
|
||||
|
||||
registrationsFactory = OOBTree
|
||||
registrationFactory = PersistentRegistration
|
||||
subservicesFactory = Jeep
|
||||
|
@ -234,10 +212,9 @@ class Service(object):
|
|||
return getattr(self.getManager(), 'allowDirectRegistration', None)
|
||||
|
||||
|
||||
@implementer(IScheduledService)
|
||||
class ScheduledService(Service):
|
||||
|
||||
implements(IScheduledService)
|
||||
|
||||
start = end = None
|
||||
|
||||
# default methods
|
||||
|
@ -247,10 +224,9 @@ class ScheduledService(Service):
|
|||
return getattr(self.getManager(), 'end', None)
|
||||
|
||||
|
||||
@implementer(IServiceCollection)
|
||||
class ServiceCollection(ScheduledService):
|
||||
|
||||
implements(IServiceCollection)
|
||||
|
||||
assignmentsFactory = set
|
||||
|
||||
assignments = None
|
||||
|
@ -273,10 +249,9 @@ class ServiceCollection(ScheduledService):
|
|||
|
||||
# registration stuff
|
||||
|
||||
@implementer(IRegistrationTemplate)
|
||||
class RegistrationTemplate(object):
|
||||
|
||||
implements(IRegistrationTemplate)
|
||||
|
||||
def __init__(self, name=None, manager=None):
|
||||
self.name = self.__name__ = name
|
||||
self.manager = self.__parent__ = manager
|
||||
|
@ -298,9 +273,9 @@ class RegistrationTemplate(object):
|
|||
return self.manager
|
||||
|
||||
|
||||
@implementer(IClientRegistrations)
|
||||
class ClientRegistrations(object):
|
||||
|
||||
implements(IClientRegistrations)
|
||||
adapts(IClient)
|
||||
|
||||
template = None
|
||||
|
|
|
@ -2,8 +2,6 @@
|
|||
Service Manager
|
||||
================
|
||||
|
||||
($Id$)
|
||||
|
||||
This package does not provide functionality on its own but shows only
|
||||
how to integrate other packages into an application package.
|
||||
|
||||
|
@ -111,15 +109,16 @@ Using schema views for displaying and editing data
|
|||
We need some additional setup for working with schema views - so we have to
|
||||
supply some session handling stuff in order to work with client names.
|
||||
|
||||
>>> from zope.interface import implements
|
||||
>>> from zope.app.session.interfaces import IClientIdManager, ISessionDataContainer
|
||||
>>> from zope.app.session import session
|
||||
>>> from zope.interface import implementer
|
||||
>>> from zope.session.interfaces import IClientIdManager, ISessionDataContainer
|
||||
>>> from zope.session import session
|
||||
>>> component.provideAdapter(session.ClientId)
|
||||
>>> component.provideAdapter(session.Session)
|
||||
>>> component.provideUtility(session.RAMSessionDataContainer(), ISessionDataContainer)
|
||||
>>> class ClientIdManager(object):
|
||||
... implements(IClientIdManager)
|
||||
... def getClientId(self, request): return 'dummy'
|
||||
>>> ClientIdManager = implementer(IClientIdManager)(ClientIdManager)
|
||||
>>> component.provideUtility(ClientIdManager())
|
||||
|
||||
>>> from zope.publisher.browser import TestRequest
|
||||
|
@ -329,7 +328,7 @@ registered for them.
|
|||
|
||||
>>> for svc in workshop.getServices():
|
||||
... for cn, reg in sorted(svc.registrations.items()):
|
||||
... print 'client-%i: ' % (clientNames.index(cn)+1), reg.service.name
|
||||
... print('client-%i: ' % (clientNames.index(cn)+1), reg.service.name)
|
||||
client-1: event1
|
||||
client-3: event2
|
||||
|
||||
|
@ -492,7 +491,7 @@ allows a hierarchical presentation.
|
|||
|
||||
>>> overview = wsView.overview()
|
||||
>>> for line in overview:
|
||||
... print line['title'], line['isHeadline'], line['level']
|
||||
... print(line['title'], line['isHeadline'], line['level'])
|
||||
Event True 0
|
||||
Event 1 False 1
|
||||
Event 2 False 1
|
||||
|
@ -516,9 +515,9 @@ and registration data.
|
|||
|
||||
>>> regInfo = srvView.getRegistrationInfo(reg)
|
||||
>>> clientInfo = srvView.getDataForClient(reg)
|
||||
>>> print srvView.formatClientInfo(clientInfo)
|
||||
>>> print(srvView.formatClientInfo(clientInfo))
|
||||
Skywalker
|
||||
>>> print regInfo['number'], regInfo['stateTitle']
|
||||
>>> print(regInfo['number'], regInfo['stateTitle'])
|
||||
1 temporary
|
||||
|
||||
The service view also provides fields that sum up the numbers of all
|
||||
|
@ -636,7 +635,7 @@ possible.
|
|||
False
|
||||
|
||||
>>> for reg in sorted(event1.registrations.values(), key=lambda x: x.number):
|
||||
... print reg.number, reg.numberWaiting
|
||||
... print(reg.number, reg.numberWaiting)
|
||||
0 3
|
||||
1 0
|
||||
|
||||
|
@ -659,7 +658,7 @@ What happens if one of the participants cancels her registration?
|
|||
>>> regView.update()
|
||||
False
|
||||
>>> for reg in sorted(event1.registrations.values(), key=lambda x: x.number):
|
||||
... print reg.number, reg.numberWaiting
|
||||
... print(reg.number, reg.numberWaiting)
|
||||
0 3
|
||||
|
||||
As the participants on the waiting list get priority over newly registering
|
||||
|
@ -674,7 +673,7 @@ people on the waiting list.
|
|||
>>> regView.update()
|
||||
False
|
||||
>>> for reg in sorted(event1.registrations.values(), key=lambda x: x.numberWaiting):
|
||||
... print reg.number, reg.numberWaiting
|
||||
... print(reg.number, reg.numberWaiting)
|
||||
0 2
|
||||
0 3
|
||||
|
||||
|
@ -686,7 +685,7 @@ free place.
|
|||
>>> regView.update()
|
||||
False
|
||||
>>> for reg in sorted(event1.registrations.values(), key=lambda x: x.number):
|
||||
... print reg.number, reg.numberWaiting
|
||||
... print(reg.number, reg.numberWaiting)
|
||||
0 2
|
||||
1 2
|
||||
|
||||
|
@ -705,18 +704,18 @@ Excel Export
|
|||
>>> from cybertools.organize.browser.report import RegistrationsExportCsv
|
||||
>>> input = dict(get_data_method='getData')
|
||||
>>> csv = RegistrationsExportCsv(workshop, TestRequest(form=input))
|
||||
>>> print csv.render()
|
||||
>>> print(csv.render())
|
||||
"Service","Client ID","Organization","First Name","Last Name","E-Mail","Number","State"
|
||||
"Event 1","...","","Walker","","john@walker.tv",1,"submitted"
|
||||
|
||||
>>> input = dict(get_data_method='getAllDataInColumns')
|
||||
>>> csv = RegistrationsExportCsv(workshop, TestRequest(form=input))
|
||||
>>> result = csv.render().splitlines()
|
||||
>>> print result[0]
|
||||
>>> print(result[0])
|
||||
"Client ID","Time Stamp","Last Name","First Name","Email Address","Age","Personal Address","Academic Titles","Street","City","Country","Event 1","WL Event 1","Event 2","WL Event 2"
|
||||
>>> len(result)
|
||||
2
|
||||
>>> print [f.strip('"') for f in result[1].split(',')[1:]]
|
||||
>>> print([f.strip('"') for f in result[1].split(',')[1:]])
|
||||
['...', 'Walker', 'John', 'john@walker.tv', '', 'Mr', '', '', '', '', '1', '2', '0', '0']
|
||||
|
||||
|
||||
|
|
|
@ -1,34 +1,16 @@
|
|||
#
|
||||
# Copyright (c) 2008 Helmut Merz helmutm@cy55.de
|
||||
#
|
||||
# This program is free software; you can redistribute it and/or modify
|
||||
# it under the terms of the GNU General Public License as published by
|
||||
# the Free Software Foundation; either version 2 of the License, or
|
||||
# (at your option) any later version.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU General Public License
|
||||
# along with this program; if not, write to the Free Software
|
||||
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
#
|
||||
# cybertools.organize.task
|
||||
|
||||
"""
|
||||
Task management classes.
|
||||
|
||||
$Id$
|
||||
""" Task management classes.
|
||||
"""
|
||||
|
||||
from zope.component import adapts
|
||||
from zope.interface import implements
|
||||
from zope.interface import implementer
|
||||
|
||||
from cybertools.organize.interfaces import ITask
|
||||
|
||||
|
||||
@implementer(ITask)
|
||||
class Task(object):
|
||||
|
||||
implements(ITask)
|
||||
pass
|
||||
|
||||
|
|
|
@ -1,28 +1,11 @@
|
|||
#
|
||||
# Copyright (c) 2018 Helmut Merz helmutm@cy55.de
|
||||
#
|
||||
# This program is free software; you can redistribute it and/or modify
|
||||
# it under the terms of the GNU General Public License as published by
|
||||
# the Free Software Foundation; either version 2 of the License, or
|
||||
# (at your option) any later version.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU General Public License
|
||||
# along with this program; if not, write to the Free Software
|
||||
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
#
|
||||
# cybertools.organize.work
|
||||
|
||||
"""
|
||||
Planning and recording activities (work items).
|
||||
""" Planning and recording activities (work items).
|
||||
"""
|
||||
|
||||
from zope import component
|
||||
from zope.component import adapts
|
||||
from zope.interface import implementer, implements
|
||||
from zope.interface import implementer
|
||||
from zope.traversing.api import getName, getParent
|
||||
|
||||
from cybertools.organize.interfaces import IWorkItem, IWorkItems
|
||||
|
@ -171,12 +154,11 @@ workItemTypes = Jeep((
|
|||
))
|
||||
|
||||
|
||||
@implementer(IWorkItem)
|
||||
class WorkItem(Stateful, Track):
|
||||
""" A work item that may be stored as a track in a tracking storage.
|
||||
"""
|
||||
|
||||
implements(IWorkItem)
|
||||
|
||||
metadata_attributes = Track.metadata_attributes + ('state',)
|
||||
index_attributes = metadata_attributes
|
||||
typeName = 'WorkItem'
|
||||
|
@ -423,11 +405,11 @@ class WorkItem(Stateful, Track):
|
|||
getParent(self).indexTrack(None, self, idx)
|
||||
|
||||
|
||||
@implementer(IWorkItems)
|
||||
class WorkItems(object):
|
||||
""" A tracking storage adapter managing work items.
|
||||
"""
|
||||
|
||||
implements(IWorkItems)
|
||||
adapts(ITrackingStorage)
|
||||
|
||||
def __init__(self, context):
|
||||
|
|
|
@ -1,23 +1,6 @@
|
|||
#
|
||||
# Copyright (c) 2020 Helmut Merz helmutm@cy55.de
|
||||
#
|
||||
# This program is free software; you can redistribute it and/or modify
|
||||
# it under the terms of the GNU General Public License as published by
|
||||
# the Free Software Foundation; either version 2 of the License, or
|
||||
# (at your option) any later version.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU General Public License
|
||||
# along with this program; if not, write to the Free Software
|
||||
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
#
|
||||
# cybertools.stateful.base
|
||||
|
||||
"""
|
||||
Basic implementations for stateful objects and adapters.
|
||||
""" Basic implementations for stateful objects and adapters.
|
||||
"""
|
||||
|
||||
from persistent.interfaces import IPersistent
|
||||
|
@ -26,17 +9,16 @@ from zope import component
|
|||
from zope.component import adapts
|
||||
from zope.interface.interfaces import ObjectEvent
|
||||
from zope.event import notify
|
||||
from zope.interface import implements
|
||||
from zope.interface import implementer
|
||||
|
||||
from cybertools.stateful.definition import statesDefinitions
|
||||
from cybertools.stateful.interfaces import IStateful, IStatefulIndexInfo
|
||||
from cybertools.stateful.interfaces import ITransitionEvent
|
||||
|
||||
|
||||
@implementer(IStateful)
|
||||
class Stateful(object):
|
||||
|
||||
implements(IStateful)
|
||||
|
||||
statesDefinition = 'default'
|
||||
state = None
|
||||
|
||||
|
@ -54,7 +36,7 @@ class Stateful(object):
|
|||
def doTransition(self, transition, historyInfo=None):
|
||||
sd = self.getStatesDefinition()
|
||||
previousState = self.getState()
|
||||
if isinstance(transition, basestring):
|
||||
if isinstance(transition, str):
|
||||
sd.doTransitionFor(self, transition)
|
||||
self.notify(transition, previousState)
|
||||
return
|
||||
|
@ -127,10 +109,9 @@ class StatefulAdapter(Stateful):
|
|||
notify(TransitionEvent(self.context, transObject, previousState, self.request))
|
||||
|
||||
|
||||
@implementer(IStatefulIndexInfo)
|
||||
class IndexInfo(object):
|
||||
|
||||
implements(IStatefulIndexInfo)
|
||||
|
||||
availableStatesDefinitions = [] # to be overwritten by subclass!
|
||||
|
||||
def __init__(self, context):
|
||||
|
@ -145,10 +126,9 @@ class IndexInfo(object):
|
|||
|
||||
# event
|
||||
|
||||
@implementer(ITransitionEvent)
|
||||
class TransitionEvent(ObjectEvent):
|
||||
|
||||
implements(ITransitionEvent)
|
||||
|
||||
def __init__(self, obj, transition, previousState, request=None):
|
||||
super(TransitionEvent, self).__init__(obj)
|
||||
self.transition = transition
|
||||
|
|
|
@ -1,36 +1,18 @@
|
|||
#
|
||||
# Copyright (c) 2013 Helmut Merz helmutm@cy55.de
|
||||
#
|
||||
# This program is free software; you can redistribute it and/or modify
|
||||
# it under the terms of the GNU General Public License as published by
|
||||
# the Free Software Foundation; either version 2 of the License, or
|
||||
# (at your option) any later version.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU General Public License
|
||||
# along with this program; if not, write to the Free Software
|
||||
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
#
|
||||
# cybertools.stateful.definition
|
||||
|
||||
"""
|
||||
State definition implementation.
|
||||
""" State definition implementation.
|
||||
"""
|
||||
|
||||
from zope.interface import implements
|
||||
from zope.interface import implementer
|
||||
from cybertools.util.jeep import Jeep
|
||||
|
||||
from cybertools.stateful.interfaces import IState, IAction, ITransition
|
||||
from cybertools.stateful.interfaces import IStatesDefinition
|
||||
|
||||
|
||||
@implementer(IState)
|
||||
class State(object):
|
||||
|
||||
implements(IState)
|
||||
|
||||
setSecurity = lambda self, context: None
|
||||
icon = None
|
||||
color = 'blue'
|
||||
|
@ -48,10 +30,9 @@ class State(object):
|
|||
return 'cybertools.icons/' + (self.icon or 'led%s.png' % self.color)
|
||||
|
||||
|
||||
@implementer(IAction)
|
||||
class Action(object):
|
||||
|
||||
implements(IAction)
|
||||
|
||||
allowed = True
|
||||
permission = None
|
||||
roles = []
|
||||
|
@ -67,19 +48,17 @@ class Action(object):
|
|||
setattr(self, k, v)
|
||||
|
||||
|
||||
@implementer(ITransition)
|
||||
class Transition(Action):
|
||||
|
||||
implements(ITransition)
|
||||
|
||||
def __init__(self, name, title, targetState, **kw):
|
||||
super(Transition, self).__init__(name, title, **kw)
|
||||
self.targetState = targetState
|
||||
|
||||
|
||||
@implementer(IStatesDefinition)
|
||||
class StatesDefinition(object):
|
||||
|
||||
implements(IStatesDefinition)
|
||||
|
||||
initialState = 'started'
|
||||
msgFactory = None
|
||||
|
||||
|
|
|
@ -60,9 +60,9 @@ def formatNumber(num, type='decimal', lang='de',
|
|||
|
||||
|
||||
def toStr(value, encoding='UTF-8'):
|
||||
if isinstance(value, unicode):
|
||||
if isinstance(value, str):
|
||||
return value.encode(encoding)
|
||||
return str(value)
|
||||
return bytes(value)
|
||||
|
||||
def toUnicode(value, encoding='UTF-8', fallback='ISO8859-15'):
|
||||
# or: fallback='CP852'
|
||||
|
|
|
@ -32,6 +32,8 @@ dependencies = [
|
|||
"zope.index",
|
||||
"zope.interface",
|
||||
"zope.lifecycleevent",
|
||||
"zope.sendmail",
|
||||
"zope.session",
|
||||
"zope.testing",
|
||||
]
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue