def test_unmarshall(): from riffle.cumin import unmarshall # types set to None just returns the arguments assert unmarshall([42], None) == (42, ) assert unmarshall([1, 2], [int, int]) == (1, 2) assert unmarshall([1, "a"], [int, str]) == (1, "a")
def test_unmarshall_object(): from riffle.cumin import unmarshall from riffle.model import ModelObject class Person(ModelObject): name = str dale = Person(name="Dale") dale_s = dale._serialize() lance = Person(name="Lance") lance_s = lance._serialize() # Person objects as arguments assert unmarshall([dale_s], [Person]) == (dale, ) assert unmarshall([dale_s, lance_s], [Person, Person]) == (dale, lance) # List of Person objects as an argument assert unmarshall([[]], [[Person]]) == ([], ) assert unmarshall([[dale_s]], [[Person]]) == ([dale], ) assert unmarshall([[dale_s, lance_s]], [[Person]]) == ([dale, lance], )
def wait(self, *types): ''' Wait until the results of this invocation are resolved ''' # if canReturn then this is a call. We need to retroactively inform the core of our types if self.canReturn: self.mantleDomain.CallExpects(self.cb, cumin.prepareSchema(types)) # Get our current greenlet. If we're not running in a greenlet, someone screwed up bad self.green = greenlet.getcurrent() # Switch back to the parent greenlet: block until the parent has time to resolve us results = self.green.parent.switch(self) if isinstance(results, Exception): raise results r = cumin.unmarshall(results, types) # Actually, this cant happen. A return from a function should always come back as # a list. Unless you mean a return from... any other thing. In which case, bleh. if r is None: return r return r[0] if len(r) == 1 else r