[KSS-checkins] r49275 - kukit/kss.base/trunk/kss/base
jvloothuis at codespeak.net
jvloothuis at codespeak.net
Sun Dec 2 13:41:57 CET 2007
Author: jvloothuis
Date: Sun Dec 2 13:41:57 2007
New Revision: 49275
Removed:
kukit/kss.base/trunk/kss/base/coreselectors.py
Modified:
kukit/kss.base/trunk/kss/base/__init__.py
kukit/kss.base/trunk/kss/base/commands.py
kukit/kss.base/trunk/kss/base/commands.txt
kukit/kss.base/trunk/kss/base/config.py
kukit/kss.base/trunk/kss/base/corecommands.txt
kukit/kss.base/trunk/kss/base/plugin.py
kukit/kss.base/trunk/kss/base/plugin.txt
kukit/kss.base/trunk/kss/base/registry.py
kukit/kss.base/trunk/kss/base/selectors.py
kukit/kss.base/trunk/kss/base/selectors.txt
Log:
Changed the selector registration so that it now supports namespaces
for selectors. It still has the shortcuts for the core selectors so
this change only affects plugin writers.
Modified: kukit/kss.base/trunk/kss/base/__init__.py
==============================================================================
--- kukit/kss.base/trunk/kss/base/__init__.py (original)
+++ kukit/kss.base/trunk/kss/base/__init__.py Sun Dec 2 13:41:57 2007
@@ -1,2 +1,3 @@
from kss.base.commands import KSSCommands
+from kss.base.selectors import selectors
from kss.base.plugin import load_plugins
Modified: kukit/kss.base/trunk/kss/base/commands.py
==============================================================================
--- kukit/kss.base/trunk/kss/base/commands.py (original)
+++ kukit/kss.base/trunk/kss/base/commands.py Sun Dec 2 13:41:57 2007
@@ -1,7 +1,7 @@
from xml.sax.saxutils import quoteattr
from kss.base.registry import command_set_registry
from kss.base.selectors import Selector
-from kss.base.coreselectors import css
+from kss.base.selectors import css
kss_response_header = '''<?xml version="1.0" ?>
<kukit xmlns="http://www.kukit.org/commands/1.0"><commands>
Modified: kukit/kss.base/trunk/kss/base/commands.txt
==============================================================================
--- kukit/kss.base/trunk/kss/base/commands.txt (original)
+++ kukit/kss.base/trunk/kss/base/commands.txt Sun Dec 2 13:41:57 2007
@@ -22,7 +22,7 @@
also need to create a selector. In this case we will use the CSS selector.
For more information about selectors look at the selector documentation.
- >>> from kss.base.coreselectors import css
+ >>> from kss.base.selectors import css
>>> commands.add('replaceHTML', css('#someid'), html='some value')
Now we have added a command. The first argument is the name of the action
Modified: kukit/kss.base/trunk/kss/base/config.py
==============================================================================
--- kukit/kss.base/trunk/kss/base/config.py (original)
+++ kukit/kss.base/trunk/kss/base/config.py Sun Dec 2 13:41:57 2007
@@ -2,7 +2,7 @@
from kss.base.plugin import Plugin
from kss.base.corecommands import KSSCoreCommands
-from kss.base.coreselectors import css, htmlid, samenode, parentnode
+from kss.base.selectors import css, htmlid, samenode, parentnode
kukit_dir = os.path.join(os.path.dirname(os.path.abspath(__file__)), 'kukit')
@@ -46,5 +46,5 @@
'core': KSSCoreCommands,
}
- selectors = [css, htmlid, samenode, parentnode]
+ selectors = {None: [css, htmlid, samenode, parentnode]}
Modified: kukit/kss.base/trunk/kss/base/corecommands.txt
==============================================================================
--- kukit/kss.base/trunk/kss/base/corecommands.txt (original)
+++ kukit/kss.base/trunk/kss/base/corecommands.txt Sun Dec 2 13:41:57 2007
@@ -9,7 +9,7 @@
>>> from kss.base.corecommands import KSSCoreCommands
>>> from kss.base import KSSCommands
- >>> from kss.base.coreselectors import css
+ >>> from kss.base.selectors import css
>>> commands = KSSCommands()
>>> core = KSSCoreCommands(commands)
Deleted: /kukit/kss.base/trunk/kss/base/coreselectors.py
==============================================================================
--- /kukit/kss.base/trunk/kss/base/coreselectors.py Sun Dec 2 13:41:57 2007
+++ (empty file)
@@ -1,17 +0,0 @@
-from kss.base.selectors import Selector
-
-class css(Selector):
- def __init__(self, value):
- super(css, self).__init__('css', value)
-
-class htmlid(Selector):
- def __init__(self, value):
- super(htmlid, self).__init__('htmlid', value)
-
-class samenode(Selector):
- def __init__(self):
- super(samenode, self).__init__('samenode', '')
-
-class parentnode(Selector):
- def __init__(self, value):
- super(parentnode, self).__init__('parentnode', value)
Modified: kukit/kss.base/trunk/kss/base/plugin.py
==============================================================================
--- kukit/kss.base/trunk/kss/base/plugin.py (original)
+++ kukit/kss.base/trunk/kss/base/plugin.py Sun Dec 2 13:41:57 2007
@@ -3,7 +3,7 @@
from pkg_resources import iter_entry_points
from kss.base.registry import command_set_registry, plugin_registry
-from kss.base import selectors as kss_selectors
+from kss.base import selectors as selector_registry
class Plugin(object):
priority = 100
@@ -21,13 +21,22 @@
for name, commandset in self.commandsets.iteritems():
registry.unregister(name)
+ def _selectors(self):
+ for name, selectors in self.selectors.iteritems():
+ for selector in selectors:
+ if name is None:
+ selector_id = selector.__name__
+ else:
+ selector_id = name + '-' + selector.__name__
+ yield selector_id, selector
+
def register_selectors(self):
- for selector in self.selectors:
- setattr(kss_selectors, selector.__name__, selector)
+ for id, selector in self._selectors():
+ selector_registry.register(id, selector)
def unregister_selectors(self):
- for selector in self.selectors:
- delattr(kss_selectors, selector.__name__)
+ for id, selector in self._selectors():
+ selector_registry.unregister(id)
def javascripts_from(path):
Modified: kukit/kss.base/trunk/kss/base/plugin.txt
==============================================================================
--- kukit/kss.base/trunk/kss/base/plugin.txt (original)
+++ kukit/kss.base/trunk/kss/base/plugin.txt Sun Dec 2 13:41:57 2007
@@ -26,7 +26,12 @@
>>> import kss.base
>>> from kss.base.corecommands import KSSCoreCommands
- >>> from kss.base.coreselectors import css
+ >>> from kss.base.selectors import Selector
+
+ >>> class silly(Selector):
+ ... def __init__(self, value):
+ ... super(silly, self).__init__('example-silly', value)
+
>>> class ExamplePlugin(Plugin):
... javascripts = [file_below_module(kss.base,
@@ -35,7 +40,7 @@
... commandsets = {
... 'example': KSSCoreCommands,
... }
- ... selectors = [css]
+ ... selectors = {'example': [silly]}
As you can see from the lines above the registration has a few things
in it. The first thing is registering the Javascripts. All items in
@@ -47,8 +52,6 @@
identifiers and the command set factory. When using KSS you would
normally use this identifier for the lookup of command sets.
-We can also register additional selectors.
-
If we try the activate our plugin now it will not work.
>>> kss.base.load_plugins('kss-testing')
@@ -84,6 +87,15 @@
>>> tuple(activated_plugins())
(('kss-testing', <ExamplePlugin object at ...>),)
+
+The additional selector we registered is now available in the selector
+registry. It can be looked up based on the class name with the key
+from the registrion as the namespace.
+
+ >>> from kss.base import selectors
+ >>> print selectors['example-silly']('testing')
+ example-silly('testing')
+
Finally we will unregister our plugin to clean up.
>>> from kss.base.plugin import unload_plugins
Modified: kukit/kss.base/trunk/kss/base/registry.py
==============================================================================
--- kukit/kss.base/trunk/kss/base/registry.py (original)
+++ kukit/kss.base/trunk/kss/base/registry.py Sun Dec 2 13:41:57 2007
@@ -16,5 +16,7 @@
def items(self):
return self._items.iteritems()
+ __getitem__ = get
+
command_set_registry = Registry()
plugin_registry = Registry()
Modified: kukit/kss.base/trunk/kss/base/selectors.py
==============================================================================
--- kukit/kss.base/trunk/kss/base/selectors.py (original)
+++ kukit/kss.base/trunk/kss/base/selectors.py Sun Dec 2 13:41:57 2007
@@ -1,3 +1,5 @@
+from kss.base.registry import Registry
+
class Selector(object):
def __init__(self, type, value):
self.type = type
@@ -5,3 +7,22 @@
def __str__(self):
return "%s('%s')" % (self.type, self.value)
+
+class css(Selector):
+ def __init__(self, value):
+ super(css, self).__init__('css', value)
+
+class htmlid(Selector):
+ def __init__(self, value):
+ super(htmlid, self).__init__('htmlid', value)
+
+class samenode(Selector):
+ def __init__(self):
+ super(samenode, self).__init__('samenode', '')
+
+class parentnode(Selector):
+ def __init__(self, value):
+ super(parentnode, self).__init__('parentnode', value)
+
+
+selectors = Registry()
Modified: kukit/kss.base/trunk/kss/base/selectors.txt
==============================================================================
--- kukit/kss.base/trunk/kss/base/selectors.txt (original)
+++ kukit/kss.base/trunk/kss/base/selectors.txt Sun Dec 2 13:41:57 2007
@@ -24,7 +24,7 @@
In the core package you can find a few standard selectors. The most
basic selectors are the CSS and HTML id selectors.
- >>> from kss.base.coreselectors import css, htmlid
+ >>> from kss.base.selectors import css, htmlid
They both need a value to operate on.
@@ -44,7 +44,7 @@
in that it selects the same node that was used to call the server
action. Also note that it does not accept any arguments.
- >>> from kss.base.coreselectors import samenode
+ >>> from kss.base.selectors import samenode
>>> selector = samenode()
>>> selector.type
'samenode'
@@ -55,7 +55,7 @@
query which only operates on nodes that are the parent (or
grandparents).
- >>> from kss.base.coreselectors import parentnode
+ >>> from kss.base.selectors import parentnode
>>> selector = parentnode('a')
>>> selector.type
'parentnode'
More information about the Kukit-checkins
mailing list