Skip to content

Commit

Permalink
use zope.container and zope.lifecycleevent
Browse files Browse the repository at this point in the history
  • Loading branch information
janwijbrand committed Dec 13, 2009
1 parent 9435219 commit 39bb114
Show file tree
Hide file tree
Showing 8 changed files with 109 additions and 8 deletions.
5 changes: 5 additions & 0 deletions CHANGES.txt
@@ -1,6 +1,11 @@
Changes
=======

1.2 (unreleased)
----------------

* ...

1.1 (2009-09-18)
----------------

Expand Down
2 changes: 1 addition & 1 deletion buildout.cfg
@@ -1,7 +1,7 @@
[buildout]
develop = .
parts = interpreter test
extends = http://grok.zope.org/releaseinfo/grok-1.0b2.cfg
extends = http://grok.zope.org/releaseinfo/grok-1.1a1.cfg
versions = versions

[versions]
Expand Down
5 changes: 3 additions & 2 deletions setup.py
Expand Up @@ -45,9 +45,10 @@ def read(*rnames):
'grokcore.component',
'martian',
'zope.annotation',
'zope.app.component',
'zope.app.container',
'zope.component',
'zope.container',
'zope.interface',
'zope.lifecycleevent',
],
tests_require=tests_require,
extras_require={'test': tests_require},
Expand Down
2 changes: 1 addition & 1 deletion src/grokcore/site/components.py
Expand Up @@ -19,7 +19,7 @@
from zope.interface import implements
from zope.annotation.interfaces import IAttributeAnnotatable
from zope.app.component.site import SiteManagerContainer
from zope.app.container.contained import Contained
from zope.container.contained import Contained


class BaseSite(object):
Expand Down
51 changes: 51 additions & 0 deletions src/grokcore/site/ftests/site/site.py
@@ -0,0 +1,51 @@
"""
A site can be created by mixing in grok.Site into a grok.Model or
grok.Container.
>>> from zope import interface
>>> from zope.app.component.interfaces import IPossibleSite, ISite
>>> manfred = Mammoth()
>>> IPossibleSite.providedBy(manfred)
True
>>> herd = Herd()
>>> IPossibleSite.providedBy(herd)
True
>>> nonsite = NonSite()
>>> IPossibleSite.providedBy(nonsite)
False
>>> nonsitecontainer = NonSiteContainer()
>>> IPossibleSite.providedBy(nonsitecontainer)
False
While manfred and herd are possible sites, they are not yet sites;
>>> ISite.providedBy(manfred)
False
>>> ISite.providedBy(herd)
False
When a site is added to a container it will be initialized as a site
(when the ObjectAddedEvent is fired):
>>> nonsitecontainer['manfred'] = manfred
>>> ISite.providedBy(manfred)
True
>>> nonsitecontainer['herd'] = herd
>>> ISite.providedBy(herd)
True
"""
import grokcore.site
from persistent import Persistent
from zope.container.btree import BTreeContainer

class Mammoth(grokcore.site.Site):
pass

class Herd(grokcore.site.Site):
pass

class NonSite(Persistent):
pass

class NonSiteContainer(BTreeContainer):
pass
44 changes: 44 additions & 0 deletions src/grokcore/site/ftests/utility/public.py
@@ -0,0 +1,44 @@
"""
By default, a utility is not in the public site; it's in ++etc++site. We can
also specify the utility to be public. It will then be created in the container
that is the site. The name the utility should have in the container can
be controlled using name_in_container:
>>> cave = Cave()
>>> getRootFolder()["cave"] = cave
>>> from zope import component
>>> from zope.app.component.hooks import getSite, setSite
>>> setSite(cave)
>>> cave['fireplace'] is component.getUtility(IFireplace)
True
name_in_container can also be used for objects stored under the site manager
(that is in ++etc++site):
>>> cave2 = Cave2()
>>> getRootFolder()['cave2'] = cave2
>>> setSite(cave2)
>>> (cave2.getSiteManager()['fireplace'] is
... component.getUtility(IFireplace))
True
"""

import grokcore.site
from zope import interface
from zope.container.btree import BTreeContainer

class IFireplace(interface.Interface):
pass

class Fireplace(grokcore.site.LocalUtility):
interface.implements(IFireplace)

class Cave(BTreeContainer, grokcore.site.Site):
grokcore.site.local_utility(Fireplace, public=True,
name_in_container='fireplace')

class Cave2(BTreeContainer, grokcore.site.Site):
grokcore.site.local_utility(Fireplace, public=False,
name_in_container='fireplace')
4 changes: 2 additions & 2 deletions src/grokcore/site/meta.py
Expand Up @@ -14,8 +14,8 @@

from zope import component

from zope.app.container.interfaces import IContainer, IObjectAddedEvent
from zope.app.container.interfaces import INameChooser
from zope.lifecycleevent.interfaces import IObjectAddedEvent
from zope.container.interfaces import IContainer, INameChooser

import martian
from martian.error import GrokError
Expand Down
4 changes: 2 additions & 2 deletions src/grokcore/site/subscriber.py
Expand Up @@ -12,10 +12,10 @@
#
##############################################################################

import grokcore.component
from zope.lifecycleevent.interfaces import IObjectAddedEvent
from zope.app.component.site import LocalSiteManager
from zope.app.container.interfaces import IObjectAddedEvent

import grokcore.component
from grokcore.site.components import Site

@grokcore.component.subscribe(Site, IObjectAddedEvent)
Expand Down

0 comments on commit 39bb114

Please sign in to comment.