Example #1
0
    def testElement(self):
        policy = base.BasePolicy()
        tag = base.ElementBuilder(policy)

        delay = common.delay
        e = tag.A(a=1, b=delay(2, 0.01))("XX", delay("YY", 0.01), "ZZ")

        self.assertTrue(IElement.providedBy(e))
        self.assertTrue(IElementContent.providedBy(e.content))
        self.assertFalse(e.is_leaf)
        self.assertFalse(e.needs_no_closing)
        self.assertTrue(e.is_self_closing)
        self.assertEqual(e.tag, "a")
        self.assertEqual(len(e), 2)
        self.assertTrue("a" in e)
        self.assertFalse("c" in e)
        self.assertTrue(isinstance(e["a"], unicode))
        self.assertTrue(isinstance(e["b"], defer.Deferred))
        values = yield defer.join(*(list(e)))
        self.assertEqual(set(values), set(["a", "b"]))
        e["c"] = 3
        self.assertEqual(len(e), 3)
        self.assertTrue("a" in e)
        self.assertTrue("c" in e)
        self.assertTrue(isinstance(e["c"], unicode))
        self.assertEqual("1", e["a"])
        yield self.asyncEqual("2", e["b"])
        self.assertEqual("3", e["c"])
        values = yield defer.join(*(list(e)))
        self.assertEqual(set(values), set(["a", "b", "c"]))
Example #2
0
def render_value_info(value):
    result = AsyncDict()
    result.add("type", value.value_type.name)
    if value.use_default:
        result.add("default", value.default)
    result.add_if_not_none("label", value.label)
    result.add_if_not_none("desc", value.desc)
    result.add_if_true("metadata", render_metadata(value))
    if IEncodingInfo.providedBy(value):
        encinfo = IEncodingInfo(value)
        result.add_if_not_none("mimetype", encinfo.mime_type)
        result.add_if_not_none("encoding", encinfo.encoding)
    if IValueCollection.providedBy(value):
        coll = IValueCollection(value)
        allowed = [render_value_info(v) for v in coll.allowed_types]
        result.add("allowed", defer.join(*allowed))
        result.add("ordered", coll.is_ordered)
        result.add_if_not_none("min_size", coll.min_size)
        result.add_if_not_none("max_size", coll.max_size)
    if IValueRange.providedBy(value):
        vrange = IValueRange(value)
        result.add("minimum", vrange.minimum)
        result.add("maximum", vrange.maximum)
        result.add_if_not_none("increment", vrange.increment)
    if IValueOptions.providedBy(value):
        options = IValueOptions(value)
        result.add("restricted", options.is_restricted)
        result.add("options", [{"label": o.label, "value": o.value}
                               for o in options.iter_options()])
    return result.wait()
Example #3
0
File: model.py Project: sylane/feat
 def create_items(names):
     if not names:
         return []
     Item = DynamicModelItem
     items = [Item(self, n).initiate().addErrback(log_error)
              for n in names]
     return defer.join(*items)
Example #4
0
    def testElementContent(self):
        policy = base.BasePolicy()
        tag = base.ElementBuilder(policy)

        delay = common.delay
        e = tag.A(a=1, b=delay(2, 0.01))("XX", delay("YY", 0.01), "ZZ")

        self.assertEqual(len(e.content), 3)
        self.assertEqual("XX", e.content[0])
        self.assertTrue(isinstance(e.content[1], defer.Deferred))
        yield self.asyncEqual("YY", e.content[1])
        values = yield defer.join(*(list(e.content)))
        self.assertEqual(set(values), set(["XX", "YY", "ZZ"]))
        e.content.append("OO")
        self.assertEqual(len(e.content), 4)
        self.assertEqual("OO", e.content[3])
        values = yield defer.join(*(list(e.content)))
        self.assertEqual(set(values), set(["XX", "YY", "ZZ", "OO"]))
Example #5
0
    def testJoin(self):
        res = yield defer.join(common.delay(0, 0.01),
                               common.delay(1, 0.01),
                               common.delay(2, 0.01))
        self.assertEqual(res, [0, 1, 2])

        res = yield defer.join(delay_raise(ValueError, 0.01),
                               delay_raise(ValueError, 0.01),
                               delay_raise(ValueError, 0.01))
        self.assertEqual(res, [])

        res = yield defer.join(common.delay(0, 0.01),
                               delay_raise(ValueError, 0.01),
                               common.delay(2, 0.01))
        self.assertEqual(res, [0, 2])

        res = yield defer.join(1, 2, 3)
        self.assertEqual(res, [1, 2, 3])

        res = yield defer.join(1, common.delay(2, 0.1), 3)
        self.assertEqual(res, [1, 2, 3])
Example #6
0
File: model.py Project: sylane/feat
    def count_actions(self):

        def log_error(failure):
            error.handle_failure(None, failure, "Error counting %s model "
                                 "%s actions", self.identity, self.name)
            return None

        def count_items(items):
            # Only count the action items whose initiate method
            # returns a non None value
            return len(filter(None, items))

        items = [i(self).initiate().addErrback(log_error)
                 for i in self._action_items.itervalues()]
        d = defer.join(*items) # Errors are ignored
        d.addCallback(count_items)
        return d
Example #7
0
File: model.py Project: sylane/feat
    def fetch_items(self):

        def log_error(failure):
            error.handle_failure(None, failure, "Error fetching %s model "
                                 "%s items", self.identity, self.name)
            return None

        def cleanup(items):
            # Only return model items whose initiate method
            # returns a non None value
            return filter(None, items)

        items = [item(self).initiate().addErrback(log_error)
                 for item in self._model_items.itervalues()]
        d = defer.join(*items)
        d.addCallback(cleanup)
        return d
Example #8
0
File: model.py Project: sylane/feat
    def fetch_actions(self):

        def log_error(failure):
            error.handle_failure(None, failure, "Error fetching %s model %s "
                                 "actions", self.identity, self.name)
            return None

        def item_initiated(action_item):
            # Only fetch action of items whose initiate method
            # returns a non None value
            if action_item is not None:
                return action_item.fetch()
            return None

        def cleanup(actions):
            # Cleanup actions whose action item's initiate method
            # did not returns a non None value
            return filter(None, actions)

        actions = [i(self).initiate().addCallbacks(item_initiated, log_error)
                   for i in self._action_items.itervalues()]
        d = defer.join(*actions)
        d.addCallback(cleanup)
        return d