def _any(thing, fields=()): """ Dispatch, all types are routed through here. """ ret = None if isinstance(thing, QuerySet): ret = _qs(thing, fields=fields) elif isinstance(thing, (tuple, list, set)): ret = _list(thing, fields=fields) elif isinstance(thing, dict): ret = _dict(thing, fields) elif isinstance(thing, decimal.Decimal): ret = str(thing) elif isinstance(thing, Model): ret = _model(thing, fields) elif isinstance(thing, HttpResponse): raise HttpStatusCode(thing) elif inspect.isfunction(thing): if not inspect.getargspec(thing)[0]: ret = _any(thing()) elif hasattr(thing, '__emittable__'): f = thing.__emittable__ if inspect.ismethod(f) and len(inspect.getargspec(f)[0]) == 1: ret = _any(f()) elif repr(thing).startswith( "<django.db.models.fields.related.RelatedManager"): ret = _any(thing.all()) else: ret = smart_unicode(thing, strings_only=True) return ret
def _any(thing, fields=None): """ Dispatch, all types are routed through here. """ ret = None # return anything we've already seen as a string only # this prevents infinite recursion in the case of recursive # relationships if thing in self.stack: raise RuntimeError, ( u'Circular reference detected while emitting ' 'response') self.stack.append(thing) if isinstance(thing, QuerySet): ret = _qs(thing, fields) elif isinstance(thing, (tuple, list, set)): ret = _list(thing, fields) elif isinstance(thing, dict): ret = _dict(thing, fields) elif isinstance(thing, decimal.Decimal): ret = str(thing) elif isinstance(thing, Model): ret = _model(thing, fields) elif isinstance(thing, HttpResponse): raise HttpStatusCode(thing) elif inspect.isfunction(thing): if not inspect.getargspec(thing)[0]: ret = _any(thing()) elif hasattr(thing, '__emittable__'): f = thing.__emittable__ if inspect.ismethod(f) and len(inspect.getargspec(f)[0]) == 1: ret = _any(f()) elif repr(thing).startswith( "<django.db.models.fields.related.RelatedManager"): ret = _any(thing.all()) else: ret = smart_unicode(thing, strings_only=True) self.stack.pop() return ret