Compare commits
49 commits
Author | SHA1 | Date | |
---|---|---|---|
0e5270f8d5 | |||
fe632fbeab | |||
860d18cae8 | |||
569e197609 | |||
12978d2389 | |||
df1229d8fd | |||
93a2acf7db | |||
25277a0b65 | |||
aef9ad8cb5 | |||
814d7c0762 | |||
8a6277fbff | |||
2cbd4c11d3 | |||
968aeab42a | |||
f1080df88b | |||
33ab512b7f | |||
17fbeb2c2c | |||
52e3fc72c6 | |||
db31a73bc9 | |||
ee82ee7b32 | |||
71f36283b9 | |||
d66aa31058 | |||
5f3bd3c04f | |||
b22dbf879c | |||
9fbd97386e | |||
b8eba239ed | |||
61c78fe3e7 | |||
3ec90f4b66 | |||
f9a3326ec7 | |||
8037ac38be | |||
52990d1df6 | |||
8d260908a5 | |||
b60d6d3b10 | |||
e98dd2ed34 | |||
c9220d834d | |||
383b77edf1 | |||
b866ac4267 | |||
ee9d062833 | |||
4b84e816b4 | |||
80766f2279 | |||
87ca77df45 | |||
c5fe028756 | |||
ad632e23ee | |||
98ebc30bd5 | |||
bd631677d6 | |||
06682d2a5c | |||
6f86e74feb | |||
1fb58a7db3 | |||
fad566b354 | |||
43ea46e401 |
2
.gitignore
vendored
|
@ -1,6 +1,6 @@
|
|||
*.pyc
|
||||
*.pyo
|
||||
ajax/dojo/*
|
||||
*/ajax/dojo/dojo*
|
||||
build/
|
||||
dist/
|
||||
*.swp
|
||||
|
|
|
@ -1,41 +0,0 @@
|
|||
#
|
||||
# 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
|
||||
#
|
||||
|
||||
"""
|
||||
Transaction management.
|
||||
|
||||
$Id$
|
||||
"""
|
||||
|
||||
from zope.interface import implements
|
||||
from cybertools.brain.interfaces import ISession
|
||||
|
||||
|
||||
class Session(object):
|
||||
|
||||
implements(ISession)
|
||||
|
||||
def __init__(self):
|
||||
self.states = {}
|
||||
|
||||
def setState(self, neuron, state):
|
||||
self.states[neuron] = state
|
||||
|
||||
def getState(self, neuron):
|
||||
return self.states.get(neuron, neuron.state)
|
||||
|
|
@ -1,55 +0,0 @@
|
|||
#
|
||||
# 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
|
||||
#
|
||||
|
||||
"""
|
||||
Base classes for state and state manipulations using a float-based state.
|
||||
|
||||
$Id$
|
||||
"""
|
||||
|
||||
from zope.interface import implements
|
||||
from cybertools.brain.interfaces import IState, ITransition
|
||||
|
||||
|
||||
class State(object):
|
||||
""" The state of a neuron.
|
||||
"""
|
||||
|
||||
implements(IState)
|
||||
|
||||
def __init__(self, value=0.0):
|
||||
self.value = value
|
||||
|
||||
def __repr__(self):
|
||||
return '<State %0.1f>' % self.value
|
||||
|
||||
|
||||
class Transition(object):
|
||||
|
||||
implements(ITransition)
|
||||
|
||||
def __init__(self, synapsis, factor=1.0):
|
||||
self.synapsis = synapsis
|
||||
self.factor = factor
|
||||
|
||||
def execute(self, session=None):
|
||||
oldState = self.synapsis.receiver.getState(session)
|
||||
senderState = self.synapsis.sender.getState(session)
|
||||
return State(oldState.value + senderState.value * self.factor)
|
||||
|
||||
|
|
@ -1,48 +0,0 @@
|
|||
#
|
||||
# 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
|
||||
#
|
||||
|
||||
"""Form Controller stuff: form processing is the part of the
|
||||
model/view/controller pattern that deals withform input.
|
||||
|
||||
$Id$
|
||||
"""
|
||||
|
||||
from zope.interface import Interface, implements
|
||||
|
||||
|
||||
class IFormController(Interface):
|
||||
""" Used as a named adapter by GenericView for processing form input.
|
||||
"""
|
||||
|
||||
def update():
|
||||
""" Processing form input...
|
||||
"""
|
||||
|
||||
|
||||
class FormController(object):
|
||||
|
||||
implements(IFormController)
|
||||
|
||||
def __init__(self, context, request):
|
||||
self.view = self.__parent__ = view = context
|
||||
self.context = view.context # the controller is adapted to a view
|
||||
self.request = request
|
||||
|
||||
def update(self):
|
||||
pass
|
||||
|
|
@ -1,38 +0,0 @@
|
|||
#
|
||||
# Copyright (c) 2017 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
|
||||
#
|
||||
|
||||
""" URL manipulation utilities
|
||||
|
||||
$Id$
|
||||
"""
|
||||
|
||||
from urlparse import urlparse
|
||||
|
||||
from zope.app.container.traversal import ItemTraverser
|
||||
from zope.interface import Interface, implements
|
||||
|
||||
|
||||
class TraversalRedirector(ItemTraverser):
|
||||
|
||||
port = 9083
|
||||
names = ('ctt', 'sona',)
|
||||
loc_pattern = 'www.%s.de'
|
||||
skip = (0, 4)
|
||||
|
||||
def publishTraverse(self, request, name):
|
||||
return super(TraversalRedirector, self).publishTraverse(request, name)
|
|
@ -1,43 +0,0 @@
|
|||
#
|
||||
# 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
|
||||
#
|
||||
|
||||
"""Keyword catalog index.
|
||||
|
||||
$Id$
|
||||
"""
|
||||
|
||||
import zope.index.keyword
|
||||
import zope.interface
|
||||
|
||||
import zope.app.container.contained
|
||||
import zope.app.catalog.attribute
|
||||
import zope.app.catalog.interfaces
|
||||
|
||||
|
||||
class IKeywordIndex(zope.app.catalog.interfaces.IAttributeIndex,
|
||||
zope.app.catalog.interfaces.ICatalogIndex):
|
||||
"""Interface-based catalog keyword index.
|
||||
"""
|
||||
|
||||
|
||||
class KeywordIndex(zope.app.catalog.attribute.AttributeIndex,
|
||||
zope.index.keyword.KeywordIndex,
|
||||
zope.app.container.contained.Contained):
|
||||
|
||||
zope.interface.implements(IKeywordIndex)
|
||||
|
|
@ -1,46 +0,0 @@
|
|||
#
|
||||
# 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
|
||||
#
|
||||
|
||||
"""
|
||||
Customer classes.
|
||||
|
||||
$Id$
|
||||
"""
|
||||
|
||||
from zope.interface import implements, Interface
|
||||
|
||||
from cybertools.commerce.common import RelationSet, BaseObject
|
||||
from cybertools.commerce.interfaces import ICustomer, IAddress
|
||||
|
||||
|
||||
class Customer(BaseObject):
|
||||
|
||||
implements(ICustomer)
|
||||
|
||||
def __init__(self, customerId, title=None, client=None):
|
||||
self.name = self.customerId = customerId
|
||||
self.title = title or u'unknown'
|
||||
self.client = client
|
||||
self.shops = self.collection(self, 'customers')
|
||||
self.orders = self.collection(self, 'customer')
|
||||
|
||||
|
||||
class Address(BaseObject):
|
||||
|
||||
implements(IAddress)
|
||||
|
|
@ -1,48 +0,0 @@
|
|||
#
|
||||
# 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
|
||||
#
|
||||
|
||||
"""
|
||||
Base classes.
|
||||
|
||||
$Id$
|
||||
"""
|
||||
|
||||
from zope.interface import implements
|
||||
|
||||
from cybertools.commerce.common import RelationSet, BaseObject
|
||||
from cybertools.commerce.interfaces import IShop
|
||||
|
||||
|
||||
class Shop(BaseObject):
|
||||
|
||||
implements(IShop)
|
||||
|
||||
collection = RelationSet
|
||||
|
||||
def __init__(self, name, title=None):
|
||||
self.name = name
|
||||
self.title = title or u'Shop'
|
||||
self.products = self.collection(self, 'shops')
|
||||
self.customers = self.collection(self, 'shops')
|
||||
self.orderNumber = 0
|
||||
|
||||
def getNewOrderId(self):
|
||||
last = self.orderNumber or 0
|
||||
num = last + 1
|
||||
self.orderNumber = num
|
||||
return '%05i' % num
|
|
@ -1,62 +0,0 @@
|
|||
#
|
||||
# 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
|
||||
#
|
||||
|
||||
"""
|
||||
Basic classes for complex template structures.
|
||||
|
||||
$Id$
|
||||
"""
|
||||
|
||||
from zope.interface import implements
|
||||
|
||||
from cybertools.composer.interfaces import IComponent, IElement, ICompound
|
||||
from cybertools.composer.interfaces import ITemplate
|
||||
from cybertools.util.jeep import Jeep
|
||||
|
||||
|
||||
class Component(object):
|
||||
|
||||
implements(IComponent)
|
||||
|
||||
|
||||
class Element(Component):
|
||||
|
||||
implements(IElement)
|
||||
|
||||
|
||||
class Compound(Component):
|
||||
|
||||
implements(ICompound)
|
||||
|
||||
componentStorage = Jeep
|
||||
|
||||
def __init__(self):
|
||||
self.parts = self.componentStorage()
|
||||
|
||||
|
||||
class Template(object):
|
||||
|
||||
implements(ITemplate)
|
||||
|
||||
componentStorage = Jeep
|
||||
components = None
|
||||
|
||||
def __init__(self):
|
||||
if self.componentStorage is not None:
|
||||
self.components = self.componentStorage()
|
||||
|
|
@ -1,55 +0,0 @@
|
|||
#
|
||||
# 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
|
||||
#
|
||||
|
||||
"""
|
||||
Base classes to be used for client adapters.
|
||||
|
||||
$Id$
|
||||
"""
|
||||
|
||||
from zope.interface import implements
|
||||
|
||||
from cybertools.composer.interfaces import IInstance
|
||||
|
||||
|
||||
class Instance(object):
|
||||
|
||||
implements(IInstance)
|
||||
|
||||
templateFactory = dict
|
||||
templateAttributeName = '__ctc_template__'
|
||||
|
||||
aspect = 'composer.default'
|
||||
|
||||
def __init__(self, context):
|
||||
self.context = context
|
||||
|
||||
def setTemplate(self, temp):
|
||||
template = getattr(self.context,
|
||||
self.templateAttributeName,
|
||||
self.templateFactory())
|
||||
template.setdefault(self.aspect, temp)
|
||||
setattr(self.context, self.templateAttributeName, template)
|
||||
def getTemplate(self):
|
||||
template = getattr(self.context, self.templateAttributeName, {})
|
||||
return template.get(self.aspect, [])
|
||||
template = property(getTemplate, setTemplate)
|
||||
|
||||
def applyTemplates(self, *args, **kw):
|
||||
raise ValueError('To be implemented by subclass')
|
||||
|
|
@ -1,43 +0,0 @@
|
|||
#
|
||||
# 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
|
||||
#
|
||||
|
||||
"""
|
||||
Default layouts for the liquid skin.
|
||||
|
||||
$Id$
|
||||
"""
|
||||
|
||||
from zope.app.pagetemplate import ViewPageTemplateFile
|
||||
from zope.cachedescriptors.property import Lazy
|
||||
from zope import component
|
||||
from zope.interface import implements
|
||||
|
||||
from cybertools.browser.liquid import Liquid
|
||||
from cybertools.browser.renderer import RendererFactory
|
||||
from cybertools.composer.layout.base import Layout
|
||||
from cybertools.composer.layout.browser.standard import standardRenderers
|
||||
|
||||
defaultRenderers = RendererFactory(ViewPageTemplateFile('default.pt'))
|
||||
|
||||
|
||||
Layout('css.liquid', 'page.css', renderer=standardRenderers['css'],
|
||||
media='all', resource='liquid.css', skin=Liquid)
|
||||
|
||||
Layout('body.liquid', 'page.body', renderer=defaultRenderers.body,
|
||||
skin=Liquid)
|
||||
|
|
@ -1,39 +0,0 @@
|
|||
#
|
||||
# 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
|
||||
#
|
||||
|
||||
"""
|
||||
Region implementation.
|
||||
|
||||
$Id$
|
||||
"""
|
||||
|
||||
from zope.interface import implements
|
||||
|
||||
from cybertools.composer.layout.interfaces import IRegion
|
||||
from cybertools.util.jeep import Jeep
|
||||
|
||||
|
||||
class Region(object):
|
||||
|
||||
implements(IRegion)
|
||||
|
||||
allowedLayoutCategories = None
|
||||
|
||||
def __init__(self, name):
|
||||
self.name = name
|
||||
self.layouts = Jeep()
|
|
@ -1,52 +0,0 @@
|
|||
#
|
||||
# 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
|
||||
#
|
||||
|
||||
"""
|
||||
Rule instance and related classes.
|
||||
|
||||
$Id$
|
||||
"""
|
||||
|
||||
from zope import component
|
||||
from zope.component import adapts
|
||||
from zope.interface import Interface, implements
|
||||
|
||||
from cybertools.composer.instance import Instance
|
||||
from cybertools.composer.rule.interfaces import IRuleInstance, IActionHandler
|
||||
|
||||
|
||||
class RuleInstance(Instance):
|
||||
|
||||
implements(IRuleInstance)
|
||||
adapts(Interface)
|
||||
|
||||
template = None
|
||||
event = None
|
||||
|
||||
def applyTemplate(self, **kw):
|
||||
for c in self.template.conditions:
|
||||
cond = component.getAdapter(self, ICondition, name=c)
|
||||
if not cond():
|
||||
continue
|
||||
data = dict(request=self.event.request)
|
||||
for action in self.template.actions:
|
||||
handler = component.getAdapter(self, IActionHandler,
|
||||
name=action.handlerName)
|
||||
data = handler(data, action.parameters)
|
||||
return data
|
||||
|
|
@ -1,55 +0,0 @@
|
|||
#
|
||||
# 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
|
||||
#
|
||||
|
||||
"""
|
||||
Ordered container implementation.
|
||||
|
||||
$Id$
|
||||
"""
|
||||
|
||||
from zope.app.pagetemplate import ViewPageTemplateFile
|
||||
from zope.app.container.browser.contents import JustContents
|
||||
from zope.app.i18n import ZopeMessageFactory as _
|
||||
from zope.cachedescriptors.property import Lazy
|
||||
from zope.interface import Interface
|
||||
|
||||
|
||||
contents_template = ViewPageTemplateFile('contents.pt')
|
||||
|
||||
|
||||
class ContainerView(JustContents):
|
||||
|
||||
def checkMoveAction(self):
|
||||
pass
|
||||
|
||||
orderable = False
|
||||
|
||||
# informations for the ajax.inner.html view (template):
|
||||
|
||||
template = contents_template
|
||||
|
||||
#@Lazy
|
||||
#def template(self):
|
||||
# basicView = zapi.getMultiAdapter((self.context, self.request),
|
||||
# Interface, name=u'contents.html')
|
||||
# return basicView.index
|
||||
|
||||
@Lazy
|
||||
def macro(self):
|
||||
return self.template.macros['contents']
|
||||
|
|
@ -1,28 +1,10 @@
|
|||
#
|
||||
# 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
|
||||
#
|
||||
"""
|
||||
Embed Dojo using the cybertools.composer.layout procedure.
|
||||
# cybertools.ajax.dojo.layout
|
||||
|
||||
$Id$
|
||||
""" Embed Dojo using the cybertools.composer.layout procedure.
|
||||
"""
|
||||
|
||||
from cStringIO import StringIO
|
||||
from zope.app.pagetemplate import ViewPageTemplateFile
|
||||
from io import StringIO
|
||||
from zope.browserpage import ViewPageTemplateFile
|
||||
from zope.cachedescriptors.property import Lazy
|
||||
|
||||
from cybertools.browser.renderer import RendererFactory
|
|
@ -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.brain.neuron
|
||||
|
||||
"""
|
||||
A simple basic implementation of Neuron and Synapsis.
|
||||
|
||||
$Id$
|
||||
""" A simple basic implementation of Neuron and Synapsis.
|
||||
"""
|
||||
|
||||
from zope.interface import implements
|
||||
from zope.interface import implementer
|
||||
from cybertools.brain.interfaces import INeuron, ISynapsis
|
||||
from cybertools.brain.state import State, Transition
|
||||
|
||||
|
||||
@implementer(ISynapsis)
|
||||
class Synapsis(object):
|
||||
""" A synapsis connects two neurons.
|
||||
"""
|
||||
|
||||
implements(ISynapsis)
|
||||
|
||||
def __init__(self, sender, receiver):
|
||||
self.sender = sender
|
||||
sender.receivers.append(self)
|
||||
|
@ -46,10 +26,9 @@ class Synapsis(object):
|
|||
receiver.notify(session)
|
||||
|
||||
|
||||
@implementer(INeuron)
|
||||
class Neuron(object):
|
||||
|
||||
implements(INeuron)
|
||||
|
||||
def __init__(self):
|
||||
self.senders = []
|
||||
self.receivers = []
|
21
cybertools/brain/session.py
Normal file
|
@ -0,0 +1,21 @@
|
|||
# cybertools.brain.session
|
||||
|
||||
""" Transaction management.
|
||||
"""
|
||||
|
||||
from zope.interface import implementer
|
||||
from cybertools.brain.interfaces import ISession
|
||||
|
||||
|
||||
implementer(ISession)
|
||||
class Session(object):
|
||||
|
||||
def __init__(self):
|
||||
self.states = {}
|
||||
|
||||
def setState(self, neuron, state):
|
||||
self.states[neuron] = state
|
||||
|
||||
def getState(self, neuron):
|
||||
return self.states.get(neuron, neuron.state)
|
||||
|
34
cybertools/brain/state.py
Normal file
|
@ -0,0 +1,34 @@
|
|||
# cybertools.brain.state
|
||||
|
||||
""" Base classes for state and state manipulations using a float-based state.
|
||||
"""
|
||||
|
||||
from zope.interface import implementer
|
||||
from cybertools.brain.interfaces import IState, ITransition
|
||||
|
||||
|
||||
@implementer(IState)
|
||||
class State(object):
|
||||
""" The state of a neuron.
|
||||
"""
|
||||
|
||||
def __init__(self, value=0.0):
|
||||
self.value = value
|
||||
|
||||
def __repr__(self):
|
||||
return '<State %0.1f>' % self.value
|
||||
|
||||
|
||||
@implementer(ITransition)
|
||||
class Transition(object):
|
||||
|
||||
def __init__(self, synapsis, factor=1.0):
|
||||
self.synapsis = synapsis
|
||||
self.factor = factor
|
||||
|
||||
def execute(self, session=None):
|
||||
oldState = self.synapsis.receiver.getState(session)
|
||||
senderState = self.synapsis.sender.getState(session)
|
||||
return State(oldState.value + senderState.value * self.factor)
|
||||
|
||||
|
|
@ -1,3 +1,4 @@
|
|||
# cybertools.brain.tests
|
||||
|
||||
import unittest, doctest
|
||||
from zope.interface.verify import verifyClass
|
||||
|
@ -18,10 +19,9 @@ class TestBrain(unittest.TestCase):
|
|||
def test_suite():
|
||||
flags = doctest.NORMALIZE_WHITESPACE | doctest.ELLIPSIS
|
||||
return unittest.TestSuite((
|
||||
unittest.makeSuite(TestBrain),
|
||||
doctest.DocFileSuite('README.txt',
|
||||
optionflags=flags,),
|
||||
))
|
||||
unittest.TestLoader().loadTestsFromTestCase(TestBrain),
|
||||
doctest.DocFileSuite('README.txt', optionflags=flags,),
|
||||
))
|
||||
|
||||
if __name__ == '__main__':
|
||||
unittest.main(defaultTest='test_suite')
|
|
@ -3,7 +3,7 @@ Browser View Tools
|
|||
==================
|
||||
|
||||
>>> from zope import component, interface
|
||||
>>> from zope.interface import Interface, implements
|
||||
>>> from zope.interface import Interface, implementer
|
||||
>>> from zope.publisher.interfaces.browser import IBrowserRequest
|
||||
|
||||
|
||||
|
@ -17,8 +17,10 @@ the common and node modules there.)
|
|||
|
||||
Let's start with a dummy content object and create a view on it:
|
||||
|
||||
>>> #@implementer(Interface)
|
||||
>>> class SomeObject(object):
|
||||
... implements(Interface)
|
||||
... pass
|
||||
>>> SomeObject = implementer(Interface)(SomeObject)
|
||||
>>> obj = SomeObject()
|
||||
|
||||
>>> from cybertools.browser.view import GenericView
|
||||
|
@ -122,7 +124,7 @@ ZPT macros:
|
|||
>>> len(cssMacros)
|
||||
4
|
||||
>>> m1 = cssMacros[0]
|
||||
>>> print m1.name, m1.media, m1.resourceName
|
||||
>>> print(m1.name, m1.media, m1.resourceName)
|
||||
css all zope3_tablelayout.css
|
||||
|
||||
Calling a macro provided by Controller.macros[] returns the real ZPT macro:
|
||||
|
@ -138,7 +140,7 @@ The pre-set collection of macros for a certain slot may be extended
|
|||
>>> len(controller.macros['css'])
|
||||
5
|
||||
>>> m5 = controller.macros['css'][4]
|
||||
>>> print m5.name, m5.media, m5.resourceName
|
||||
>>> print(m5.name, m5.media, m5.resourceName)
|
||||
css all node.css
|
||||
|
||||
If an identifier is given (the second parameter) a certain macro is only
|
||||
|
@ -221,7 +223,7 @@ controller issues a redirect.
|
|||
>>> from cybertools.browser.form import IFormController, FormController
|
||||
>>> class MyController(FormController):
|
||||
... def update(self):
|
||||
... print 'updating...'
|
||||
... print('updating...')
|
||||
... return True
|
||||
|
||||
>>> component.provideAdapter(MyController, (View, IBrowserRequest),
|
|
@ -1,31 +1,12 @@
|
|||
#
|
||||
# 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.browser.action
|
||||
|
||||
"""
|
||||
Base classes (sort of views) for action portlet items.
|
||||
|
||||
$Id$
|
||||
""" Base classes (sort of views) for action portlet items.
|
||||
"""
|
||||
|
||||
from copy import copy
|
||||
from urllib import urlencode
|
||||
from urllib.parse import urlencode
|
||||
from zope import component
|
||||
from zope.app.pagetemplate import ViewPageTemplateFile
|
||||
from zope.browserpage import ViewPageTemplateFile
|
||||
from zope.cachedescriptors.property import Lazy
|
||||
|
||||
action_macros = ViewPageTemplateFile('action_macros.pt')
|
Before Width: | Height: | Size: 655 B After Width: | Height: | Size: 655 B |
Before Width: | Height: | Size: 455 B After Width: | Height: | Size: 455 B |
Before Width: | Height: | Size: 537 B After Width: | Height: | Size: 537 B |
Before Width: | Height: | Size: 777 B After Width: | Height: | Size: 777 B |
Before Width: | Height: | Size: 641 B After Width: | Height: | Size: 641 B |
Before Width: | Height: | Size: 46 KiB After Width: | Height: | Size: 46 KiB |
Before Width: | Height: | Size: 691 B After Width: | Height: | Size: 691 B |
Before Width: | Height: | Size: 741 B After Width: | Height: | Size: 741 B |
Before Width: | Height: | Size: 591 B After Width: | Height: | Size: 591 B |
Before Width: | Height: | Size: 46 KiB After Width: | Height: | Size: 46 KiB |
Before Width: | Height: | Size: 663 B After Width: | Height: | Size: 663 B |
Before Width: | Height: | Size: 195 B After Width: | Height: | Size: 195 B |
Before Width: | Height: | Size: 103 B After Width: | Height: | Size: 103 B |
|
@ -1,32 +1,13 @@
|
|||
#
|
||||
# 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.browser.configurator
|
||||
|
||||
"""
|
||||
A view configurator provides configuration data for a view controller.
|
||||
|
||||
$Id$
|
||||
""" A view configurator provides configuration data for a view controller.
|
||||
"""
|
||||
|
||||
from zope import component
|
||||
from zope.annotation.interfaces import IAttributeAnnotatable, IAnnotations
|
||||
from zope.annotation.attribute import AttributeAnnotations
|
||||
from zope.cachedescriptors.property import Lazy
|
||||
from zope.interface import Interface, Attribute, implements
|
||||
from zope.interface import Interface, Attribute, implementer
|
||||
|
||||
|
||||
# interfaces
|
||||
|
@ -63,12 +44,11 @@ class IMacroViewProperty(IViewProperty):
|
|||
|
||||
#default implementations
|
||||
|
||||
@implementer(IViewConfigurator)
|
||||
class ViewConfigurator(object):
|
||||
""" An base class for adapters that allow the registration of view properties.
|
||||
"""
|
||||
|
||||
implements(IViewConfigurator)
|
||||
|
||||
def __init__(self, context, request):
|
||||
self.context = context
|
||||
self.request = request
|
||||
|
@ -109,10 +89,9 @@ class AnnotationViewConfigurator(ViewConfigurator):
|
|||
return vp
|
||||
|
||||
|
||||
@implementer(IViewProperty)
|
||||
class ViewProperty(object):
|
||||
|
||||
implements(IViewProperty)
|
||||
|
||||
def __init__(self, context, request):
|
||||
self.context = context
|
||||
self.request = request
|
||||
|
@ -128,10 +107,9 @@ class ViewProperty(object):
|
|||
self.params = params
|
||||
|
||||
|
||||
@implementer(IMacroViewProperty)
|
||||
class MacroViewProperty(ViewProperty):
|
||||
|
||||
implements(IMacroViewProperty)
|
||||
|
||||
template = None
|
||||
|
||||
def setParams(self, params):
|
|
@ -1,27 +1,10 @@
|
|||
#
|
||||
# Copyright (c) 2016 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.browser.controller
|
||||
|
||||
"""
|
||||
Controller for views, templates, macros.
|
||||
""" Controller for views, templates, macros.
|
||||
"""
|
||||
|
||||
from zope import component
|
||||
from zope.app.pagetemplate import ViewPageTemplateFile
|
||||
from zope.browserpage import ViewPageTemplateFile
|
||||
from zope.cachedescriptors.property import Lazy
|
||||
|
||||
from cybertools.browser.configurator import IViewConfigurator, IMacroViewProperty
|
29
cybertools/browser/form.py
Normal file
|
@ -0,0 +1,29 @@
|
|||
# cybertools.browser.form
|
||||
|
||||
"""Form Controller stuff: form processing is the part of the
|
||||
model/view/controller pattern that deals withform input.
|
||||
"""
|
||||
|
||||
from zope.interface import Interface, implementer
|
||||
|
||||
|
||||
class IFormController(Interface):
|
||||
""" Used as a named adapter by GenericView for processing form input.
|
||||
"""
|
||||
|
||||
def update():
|
||||
""" Processing form input...
|
||||
"""
|
||||
|
||||
|
||||
@implementer(IFormController)
|
||||
class FormController(object):
|
||||
|
||||
def __init__(self, context, request):
|
||||
self.view = self.__parent__ = view = context
|
||||
self.context = view.context # the controller is adapted to a view
|
||||
self.request = request
|
||||
|
||||
def update(self):
|
||||
pass
|
||||
|
Before Width: | Height: | Size: 703 B After Width: | Height: | Size: 703 B |
Before Width: | Height: | Size: 345 B After Width: | Height: | Size: 345 B |
Before Width: | Height: | Size: 349 B After Width: | Height: | Size: 349 B |
Before Width: | Height: | Size: 372 B After Width: | Height: | Size: 372 B |
Before Width: | Height: | Size: 52 B After Width: | Height: | Size: 52 B |
Before Width: | Height: | Size: 52 B After Width: | Height: | Size: 52 B |
Before Width: | Height: | Size: 702 B After Width: | Height: | Size: 702 B |
Before Width: | Height: | Size: 680 B After Width: | Height: | Size: 680 B |
Before Width: | Height: | Size: 792 B After Width: | Height: | Size: 792 B |
Before Width: | Height: | Size: 3.5 KiB After Width: | Height: | Size: 3.5 KiB |
Before Width: | Height: | Size: 8.9 KiB After Width: | Height: | Size: 8.9 KiB |
Before Width: | Height: | Size: 4.7 KiB After Width: | Height: | Size: 4.7 KiB |
Before Width: | Height: | Size: 641 B After Width: | Height: | Size: 641 B |
Before Width: | Height: | Size: 756 B After Width: | Height: | Size: 756 B |
Before Width: | Height: | Size: 3.2 KiB After Width: | Height: | Size: 3.2 KiB |
Before Width: | Height: | Size: 817 B After Width: | Height: | Size: 817 B |