create cybertools.commerce package

git-svn-id: svn://svn.cy55.de/Zope3/src/cybertools/trunk@2757 fd906abe-77d9-0310-91a1-e0d9ade77398
This commit is contained in:
helmutm 2008-07-12 14:00:12 +00:00
parent 80ff9b8403
commit ad42014dc7
11 changed files with 208 additions and 2 deletions

14
commerce/README.txt Normal file
View file

@ -0,0 +1,14 @@
==========================================
Commerce: Products, Customers, Orders, ...
==========================================
($Id$)
Products
========
Let's start with a Product:
>>> from cybertools.commerce.product import Product
>>> p1 = Product()

4
commerce/__init__.py Normal file
View file

@ -0,0 +1,4 @@
"""
$Id$
"""

View file

@ -0,0 +1,4 @@
"""
$Id$
"""

View file

@ -0,0 +1,15 @@
<!-- $Id$ -->
<configure
xmlns="http://namespaces.zope.org/browser"
xmlns:zope="http://namespaces.zope.org/zope"
i18n_domain="cybertools.commerce">
<page
for="cybertools.commerce.interfaces.IProduct"
name="index.html"
class="cybertools.commerce.browser.product.ProductView"
permission="zope.View"
/>
</configure>

View file

@ -0,0 +1,34 @@
#
# 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
#
"""
Basic browser view classes for products.
$Id$
"""
from zope import component
from zope.cachedescriptors.property import Lazy
class ProcuctView(object):
def __init__(self, context, request):
self.context = context
self.request = request

40
commerce/interfaces.py Normal file
View file

@ -0,0 +1,40 @@
#
# 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
#
"""
Interfaces for the commerce domain like products, customers, orders, ...
$Id$
"""
from zope import schema
from zope.schema.vocabulary import SimpleVocabulary, SimpleTerm
from zope.interface import Interface, Attribute
from zope.i18nmessageid import MessageFactory
from cybertools.util.jeep import Jeep, Term
_ = MessageFactory('cybertools.commerce')
# products
class IProduct(Interface):
""" A certain class of similar objects that may be put in a shopping cart.
"""

33
commerce/product.py Normal file
View file

@ -0,0 +1,33 @@
#
# 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
#
"""
Product classes.
$Id$
"""
from zope.interface import implements, Interface
from cybertools.commerce.interfaces import IProduct
class Product(object):
implements(IProduct)

28
commerce/tests.py Executable file
View file

@ -0,0 +1,28 @@
#! /usr/bin/python
"""
Tests for the 'cybertools.commerce' package.
$Id$
"""
import unittest, doctest
from zope.testing.doctestunit import DocFileSuite
from cybertools.commerce.product import Product
class Test(unittest.TestCase):
"Basic tests."
def testBasicStuff(self):
p = Product()
def test_suite():
flags = doctest.NORMALIZE_WHITESPACE | doctest.ELLIPSIS
return unittest.TestSuite((
unittest.makeSuite(Test),
DocFileSuite('README.txt', optionflags=flags),
))
if __name__ == '__main__':
unittest.main(defaultTest='test_suite')

View file

@ -23,6 +23,7 @@ $Id$
"""
from BTrees.OOBTree import OOBTree
from zope.cachedescriptors.property import Lazy
from zope.component import adapts
from zope.interface import implements, Interface
@ -30,6 +31,7 @@ from cybertools.composer.instance import Instance as BaseInstance
from cybertools.composer.interfaces import IInstance
from cybertools.composer.schema.interfaces import IClient
from cybertools.composer.schema.schema import FormState
from cybertools.util.jeep import Jeep
class Instance(BaseInstance):
@ -42,7 +44,6 @@ class Instance(BaseInstance):
view = None
def applyTemplate(self, *args, **kw):
#result = dict(__name__=self.context.__name__)
result = {}
mode = kw.get('mode', 'view')
template = self.template
@ -59,6 +60,18 @@ class Instance(BaseInstance):
result[name] = value
return result
def getFieldInstances(self):
fieldInstances = Jeep()
template = self.template
if template is not None:
for f in template.components:
fieldInstances[f.name] = f.getFieldInstance(self)
return fieldInstances
@Lazy
def fieldInstances(self):
return self.getFieldInstances()
class Editor(BaseInstance):

View file

@ -28,6 +28,7 @@ from zope.i18nmessageid import MessageFactory
from zope.schema.vocabulary import SimpleVocabulary, SimpleTerm
from cybertools.composer.interfaces import ITemplate, IComponent
from cybertools.composer.interfaces import IInstance as IBaseInstance
_ = MessageFactory('zope')
@ -257,6 +258,26 @@ class IFormState(Interface):
"severities.")
class IInstance(IBaseInstance):
""" An instance adapter for arbitrary client objects, using a schema.
"""
fieldInstances = Attribute('A mapping ``{fieldName: fieldInstance, ...}``.')
class IEditor(IInstance):
""" An instance adapter for a client object that represents the state
of all fields when editing.
"""
# TODO: make IFormState + implementations obsolete
fieldInstances = Attribute('A mapping ``{fieldName: fieldInstance, ...}``.')
changed = Attribute('True if one of the fields has been changed')
severity = Attribute("An integer giving an overall state or error "
"code, typically the maximum of the field instances' "
"severities.")
# clients
class IClient(Interface):

View file

@ -1,5 +1,5 @@
#
# Copyright (c) 2006 Helmut Merz helmutm@cy55.de
# 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