[Checkins]
SVN: martian/branches/jw-philipp-using-ndir-directives/src/martian/ndir.
Implemented a set method on the directive for cases where values
Jan-Wijbrand Kolman
janwijbrand at gmail.com
Sat May 3 07:37:45 EDT 2008
Log message for revision 86179:
Implemented a set method on the directive for cases where values
need to be set as if the directive was used.
Refactored getting a name for the value to store.
Changed:
U martian/branches/jw-philipp-using-ndir-directives/src/martian/ndir.py
U martian/branches/jw-philipp-using-ndir-directives/src/martian/ndir.txt
-=-
Modified: martian/branches/jw-philipp-using-ndir-directives/src/martian/ndir.py
===================================================================
--- martian/branches/jw-philipp-using-ndir-directives/src/martian/ndir.py 2008-05-03 11:26:55 UTC (rev 86178)
+++ martian/branches/jw-philipp-using-ndir-directives/src/martian/ndir.py 2008-05-03 11:37:45 UTC (rev 86179)
@@ -9,34 +9,29 @@
class StoreOnce(object):
def set(self, locals_, directive, value):
- dotted_name = (directive.__class__.__module__ + '.' +
- directive.__class__.__name__)
- if dotted_name in locals_:
+ if directive.dotted_name() in locals_:
raise GrokImportError(
"The '%s' directive can only be called once per %s." %
(directive.name, directive.scope.description))
- locals_[dotted_name] = value
+ locals_[directive.dotted_name()] = value
def get(self, directive, component, default):
- dotted_name = (directive.__class__.__module__ + '.' +
- directive.__class__.__name__)
- return getattr(component, dotted_name, default)
+ return getattr(component, directive.dotted_name(), default)
+ def setattr(self, context, directive, value):
+ setattr(context, directive.dotted_name(), value)
+
ONCE = StoreOnce()
class StoreOnceGetFromThisClassOnly(StoreOnce):
def get(self, directive, component, default):
- dotted_name = (directive.__class__.__module__ + '.' +
- directive.__class__.__name__)
- return component.__dict__.get(dotted_name, default)
+ return component.__dict__.get(directive.dotted_name(), default)
class StoreMultipleTimes(StoreOnce):
def set(self, locals_, directive, value):
- dotted_name = (directive.__class__.__module__ + '.' +
- directive.__class__.__name__)
- values = locals_.setdefault(dotted_name, [])
+ values = locals_.setdefault(directive.dotted_name(), [])
values.append(value)
MULTIPLE = StoreMultipleTimes()
@@ -44,9 +39,7 @@
class StoreDict(StoreOnce):
def set(self, locals_, directive, value):
- dotted_name = (directive.__class__.__module__ + '.' +
- directive.__class__.__name__)
- values_dict = locals_.setdefault(dotted_name, {})
+ values_dict = locals_.setdefault(directive.dotted_name(), {})
try:
key, value = value
except (TypeError, ValueError):
@@ -130,6 +123,10 @@
return self.default
@classmethod
+ def dotted_name(cls):
+ return cls.__module__ + '.' + cls.__name__
+
+ @classmethod
def get(cls, component, module=None):
# Create an instance of the directive without calling __init__
self = cls.__new__(cls)
@@ -142,6 +139,11 @@
return value
+ @classmethod
+ def set(cls, component, value):
+ # Create an instance of the directive without calling __init__
+ self = cls.__new__(cls)
+ cls.store.setattr(component, self, value)
class MultipleTimesDirective(Directive):
store = MULTIPLE
Modified: martian/branches/jw-philipp-using-ndir-directives/src/martian/ndir.txt
===================================================================
--- martian/branches/jw-philipp-using-ndir-directives/src/martian/ndir.txt 2008-05-03 11:26:55 UTC (rev 86178)
+++ martian/branches/jw-philipp-using-ndir-directives/src/martian/ndir.txt 2008-05-03 11:37:45 UTC (rev 86179)
@@ -56,6 +56,13 @@
>>> description.get(Foo)
u''
+In certain cases we need to set a value on a component as if the directive was
+actually used::
+
+ >>> description.set(Foo, u'value as set')
+ >>> description.get(Foo)
+ u'value as set'
+
Subclasses of the original class will inherit the properties set by the
directive:
More information about the Checkins
mailing list