reimplement relation-based collection attributes
git-svn-id: svn://svn.cy55.de/Zope3/src/cybertools/trunk@2844 fd906abe-77d9-0310-91a1-e0d9ade77398
This commit is contained in:
parent
a93665a072
commit
cb7c2927a1
5 changed files with 51 additions and 36 deletions
|
@ -8,35 +8,59 @@ Commerce: Shope, Products, Customers, Orders, ...
|
||||||
Shops and Products
|
Shops and Products
|
||||||
==================
|
==================
|
||||||
|
|
||||||
Let's start with a Shop:
|
Let's start with two shops:
|
||||||
|
|
||||||
>>> from cybertools.commerce.base import Shop
|
>>> from cybertools.commerce.shop import Shop
|
||||||
>>> shop1 = Shop(u'shop1', u'PC up Ltd')
|
>>> shop1 = Shop(u'shop1', u'PC up Ltd')
|
||||||
|
>>> shop2 = Shop(u'shop2', u'Video up Ltd')
|
||||||
|
|
||||||
Now we add products to the shop.
|
Now we add products to the shops.
|
||||||
|
|
||||||
>>> from cybertools.commerce.product import Product
|
>>> from cybertools.commerce.product import Product
|
||||||
>>> p001 = Product(u'p001', u'Silent Case')
|
>>> p001 = Product(u'p001', u'Silent Case')
|
||||||
|
>>> p002 = Product(u'p002', u'Portable Projector')
|
||||||
|
>>> p003 = Product(u'p003', u'HD Flatscreen Monitor')
|
||||||
|
>>> p004 = Product(u'p004', u'Giga Mainboard')
|
||||||
|
|
||||||
>>> shop1.products.add(p001)
|
>>> shop1.products.add(p001)
|
||||||
|
>>> shop1.products.add(p003)
|
||||||
|
>>> shop1.products.add(p004)
|
||||||
|
>>> shop2.products.add(p002)
|
||||||
|
>>> shop2.products.add(p003)
|
||||||
|
|
||||||
>>> sorted((name, p.title) for name, p in shop1.products.items())
|
>>> sorted((p.productId, p.title) for p in shop1.products)
|
||||||
[(u'p001', u'Silent Case')]
|
[(u'p001', u'Silent Case'), (u'p003', u'HD Flatscreen Monitor'),
|
||||||
|
(u'p004', u'Giga Mainboard')]
|
||||||
|
|
||||||
Let's have a look at the product - it should correctly reference the shop
|
Let's have a look at the product - it should correctly reference the shops
|
||||||
it belongs to.
|
it belongs to.
|
||||||
|
|
||||||
>>> len(p001.shops)
|
>>> sorted((s.name, s.title) for s in p003.shops)
|
||||||
1
|
[(u'shop1', u'PC up Ltd'), (u'shop2', u'Video up Ltd')]
|
||||||
>>> p001.shops.keys()[0]
|
|
||||||
u'shop1'
|
|
||||||
|
|
||||||
|
|
||||||
Customers
|
Customers
|
||||||
=========
|
=========
|
||||||
|
|
||||||
>>> from cybertools.commerce.customer import Customer
|
>>> from cybertools.commerce.customer import Customer
|
||||||
>>> c001 = Customer(u'c001', u'Your Local Store')
|
>>> c001 = Customer(u'c001', u'Your Local Computer Store')
|
||||||
|
>>> c002 = Customer(u'c002', u'Speedy Gonzales')
|
||||||
|
>>> c003 = Customer(u'c003', u'TeeVee')
|
||||||
|
>>> c004 = Customer(u'c004', u'MacVideo')
|
||||||
|
|
||||||
|
>>> shop1.customers.add(c001)
|
||||||
|
>>> shop1.customers.add(c002)
|
||||||
|
>>> shop1.customers.add(c004)
|
||||||
|
>>> shop2.customers.add(c002)
|
||||||
|
>>> shop2.customers.add(c003)
|
||||||
|
>>> shop2.customers.add(c004)
|
||||||
|
|
||||||
|
>>> sorted((c.customerId, c.title) for c in shop1.customers)
|
||||||
|
[(u'c001', u'Your Local Computer Store'), (u'c002', u'Speedy Gonzales'),
|
||||||
|
(u'c004', u'MacVideo')]
|
||||||
|
|
||||||
|
>>> sorted((s.name, s.title) for s in c002.shops)
|
||||||
|
[(u'shop1', u'PC up Ltd'), (u'shop2', u'Video up Ltd')]
|
||||||
|
|
||||||
|
|
||||||
Orders
|
Orders
|
||||||
|
|
|
@ -32,7 +32,7 @@ class RelationSet(object):
|
||||||
|
|
||||||
def add(self, related):
|
def add(self, related):
|
||||||
self.data[related.name] = related
|
self.data[related.name] = related
|
||||||
relatedData = getattr(related, self.attributeName)
|
relatedData = getattr(related, self.attributeName).data
|
||||||
relatedData[self.parent.name] = self.parent
|
relatedData[self.parent.name] = self.parent
|
||||||
|
|
||||||
def remove(self, related):
|
def remove(self, related):
|
||||||
|
@ -42,24 +42,9 @@ class RelationSet(object):
|
||||||
else:
|
else:
|
||||||
name = related.name
|
name = related.name
|
||||||
del self.data[name]
|
del self.data[name]
|
||||||
relatedData = getattr(related, self.attributeName)
|
relatedData = getattr(related, self.attributeName).data
|
||||||
del relatedData[self.parent.name]
|
del relatedData[self.parent.name]
|
||||||
|
|
||||||
def __getitem__(self, key):
|
def __iter__(self):
|
||||||
return self.data[key]
|
for obj in self.data.values():
|
||||||
|
yield obj
|
||||||
def get(self, key, default=None):
|
|
||||||
return self.data.get(key, default)
|
|
||||||
|
|
||||||
def __contains__(self, key):
|
|
||||||
return key in self.data
|
|
||||||
|
|
||||||
def items(self):
|
|
||||||
return self.data.items()
|
|
||||||
|
|
||||||
def keys(self):
|
|
||||||
return self.data.keys()
|
|
||||||
|
|
||||||
def values(self):
|
|
||||||
return self.data.values()
|
|
||||||
|
|
||||||
|
|
|
@ -24,6 +24,7 @@ $Id$
|
||||||
|
|
||||||
from zope.interface import implements, Interface
|
from zope.interface import implements, Interface
|
||||||
|
|
||||||
|
from cybertools.commerce.common import RelationSet
|
||||||
from cybertools.commerce.interfaces import ICustomer
|
from cybertools.commerce.interfaces import ICustomer
|
||||||
|
|
||||||
|
|
||||||
|
@ -31,8 +32,10 @@ class Customer(object):
|
||||||
|
|
||||||
implements(ICustomer)
|
implements(ICustomer)
|
||||||
|
|
||||||
|
collection = RelationSet
|
||||||
|
|
||||||
def __init__(self, customerId, title=None, client=None):
|
def __init__(self, customerId, title=None, client=None):
|
||||||
self.name = self.customerId = customerId
|
self.name = self.customerId = customerId
|
||||||
self.title = title or u'unknown'
|
self.title = title or u'unknown'
|
||||||
self.client = client
|
self.client = client
|
||||||
self.shops = {}
|
self.shops = self.collection(self, 'customers')
|
||||||
|
|
|
@ -24,6 +24,7 @@ $Id$
|
||||||
|
|
||||||
from zope.interface import implements, Interface
|
from zope.interface import implements, Interface
|
||||||
|
|
||||||
|
from cybertools.commerce.common import RelationSet
|
||||||
from cybertools.commerce.interfaces import IProduct
|
from cybertools.commerce.interfaces import IProduct
|
||||||
|
|
||||||
|
|
||||||
|
@ -31,8 +32,10 @@ class Product(object):
|
||||||
|
|
||||||
implements(IProduct)
|
implements(IProduct)
|
||||||
|
|
||||||
|
collection = RelationSet
|
||||||
|
|
||||||
def __init__(self, productId, title=None):
|
def __init__(self, productId, title=None):
|
||||||
self.name = self.productId = productId
|
self.name = self.productId = productId
|
||||||
self.title = title or u'unknown'
|
self.title = title or u'unknown'
|
||||||
self.shops = {}
|
self.shops = self.collection(self, 'products')
|
||||||
|
|
||||||
|
|
|
@ -32,10 +32,10 @@ class Shop(object):
|
||||||
|
|
||||||
implements(IShop)
|
implements(IShop)
|
||||||
|
|
||||||
mappingAttribute = RelationSet
|
collection = RelationSet
|
||||||
|
|
||||||
def __init__(self, name, title=None):
|
def __init__(self, name, title=None):
|
||||||
self.name = name
|
self.name = name
|
||||||
self.title = title or u'Shop'
|
self.title = title or u'Shop'
|
||||||
self.products = self.mappingAttribute(self, 'shops')
|
self.products = self.collection(self, 'shops')
|
||||||
self.customers = self.mappingAttribute(self, 'shops')
|
self.customers = self.collection(self, 'shops')
|
Loading…
Add table
Reference in a new issue