Skip to content

Commit

Permalink
Merge branch 'json-properties' of git://github.com/tomprince/buildbot
Browse files Browse the repository at this point in the history
* 'json-properties' of git://github.com/tomprince/buildbot:
  Warn about non-jsonable properties.
  Refactor Properties.update to use Properties.setProperty).
  • Loading branch information
djmitche committed May 19, 2012
2 parents 23ecfa6 + 834fb7b commit 97dc121
Show file tree
Hide file tree
Showing 2 changed files with 16 additions and 22 deletions.
14 changes: 11 additions & 3 deletions master/buildbot/process/properties.py
Expand Up @@ -15,8 +15,10 @@

import collections
import re
import warnings
import weakref
from buildbot import config, util
from buildbot.util import json
from buildbot.interfaces import IRenderable, IProperties
from twisted.internet import defer
from twisted.python.components import registerAdapter
Expand Down Expand Up @@ -94,9 +96,7 @@ def __repr__(self):
def update(self, dict, source, runtime=False):
"""Update this object from a dictionary, with an explicit source specified."""
for k, v in dict.items():
self.properties[k] = (v, source)
if runtime:
self.runtime.add(k)
self.setProperty(k, v, source, runtime=runtime)

def updateFromProperties(self, other):
"""Update this object based on another object; the other object's """
Expand All @@ -121,6 +121,14 @@ def hasProperty(self, name):
has_key = hasProperty

def setProperty(self, name, value, source, runtime=False):
try:
json.dumps(value)
except TypeError:
warnings.warn(
"Non jsonable properties are not explicitly supported and" +
"will be explicitly disallowed in a future version.",
DeprecationWarning, stacklevel=2)

self.properties[name] = (value, source)
if runtime:
self.runtime.add(name)
Expand Down
24 changes: 5 additions & 19 deletions master/buildbot/test/unit/test_process_properties.py
Expand Up @@ -497,14 +497,6 @@ def test_property_colon_plus(self):
"echo projectdefined")
return d

def test_property_renderable(self):
self.props.setProperty("project", FakeRenderable('testing'), "test")
command = Interpolate("echo '%(prop:project)s'")
d = self.build.render(command)
d.addCallback(self.failUnlessEqual,
"echo 'testing'")
return d

def test_nested_property(self):
self.props.setProperty("project", "so long!", "test")
command = Interpolate("echo '%(prop:missing:~%(prop:project)s)s'")
Expand All @@ -513,17 +505,6 @@ def test_nested_property(self):
"echo 'so long!'")
return d

def test_nested_property_deferred(self):
renderable = DeferredRenderable()
self.props.setProperty("missing", renderable, "test")
self.props.setProperty("project", "so long!", "test")
command = Interpolate("echo '%(prop:missing:~%(prop:project)s)s'")
d = self.build.render(command)
d.addCallback(self.failUnlessEqual,
"echo 'so long!'")
renderable.callback(False)
return d

def test_property_substitute_recursively(self):
self.props.setProperty("project", "proj1", "test")
command = Interpolate("echo '%(prop:no_such:-%(prop:project)s)s'")
Expand Down Expand Up @@ -1067,6 +1048,11 @@ def testUpdateFromPropertiesNoRuntime(self):
self.failUnlessEqual(self.props.getProperty('x'), 24)
self.failUnlessEqual(self.props.getPropertySource('x'), 'old')

def test_setProperty_notJsonable(self):
self.props.setProperty("project", FakeRenderable('testing'), "test")
self.props.setProperty("project", object, "test")
self.assertEqual(len(self.flushWarnings([self.test_setProperty_notJsonable])), 2)

# IProperties methods

def test_getProperty(self):
Expand Down

0 comments on commit 97dc121

Please sign in to comment.