def _calcpostlf(self, values): valuecount = len(values) sametype = False for i in range(valuecount): value = values[i] if i + 1 == valuecount: value.postlf = 0 continue if i + 1 < valuecount: sametype = value.__class__ is values[i + 1].__class__ if not sametype: if IDocstring.providedBy(values[i + 1]): value.postlf = 0 continue if IDocstring.providedBy(value): if IFunction.providedBy(value.__parent__): value.postlf = 0 else: value.postlf = 1 continue value.postlf = 1 continue if IClass.providedBy(value) or IFunction.providedBy(value): value.postlf = 1 continue value.postlf = 0
def _calcpostlf(self, values): valuecount = len(values) sametype = False for i in range(valuecount): value = values[i] if i + 1 == valuecount: value.postlf = 0 continue if i + 1 < valuecount: sametype = value.__class__ is values[i + 1].__class__ if not sametype: if IDocstring.providedBy(values[i + 1]): value.postlf = 0 continue if IDocstring.providedBy(value): if IFunction.providedBy(value.__parent__): value.postlf = 0 else: value.postlf = 1 continue value.postlf = 1 continue if IClass.providedBy(value) \ or IFunction.providedBy(value): value.postlf = 1 continue value.postlf = 0
def __call__(self): if self.model.classname is None: raise Incomplete(u"Incomplete class definition.") ret = list() for decorator in self.model.filtereditems(IDecorator): ret.append(decorator()) name = self.model.classname level = self.model.nodelevel bases = self.model.bases indent = level * 4 * u" " base_str = u"class %s(" % name rclass = u"%s%s" % (indent, base_str) if not bases: bases = ["object"] if len(bases) > 1 and "object" in bases: bases.remove("object") rargs = self.render_arguments(level, len(name) + 7, bases) rclass = u"%s%s):\n" % (rclass, rargs) ret.append(rclass) values = [val for val in self.model.values() if not IDecorator.providedBy(val)] # case ``pass`` was parsed for class body if len(values) == 1 and IBlock.providedBy(values[0]) and values[0].text == u"pass": values = list() self._calcpostlf(values) if not values: ret.append(u"%s pass\n" % indent) valuecount = len(values) for i in range(valuecount): if i == 0 and not IDocstring.providedBy(values[i]): ret.append("\n") ret.append(values[i]()) ret += [u"\n" for i in range(self.model.postlf)] return u"".join(ret)
def __call__(self): if self.model.classname is None: raise Incomplete, u"Incomplete class definition." ret = list() for decorator in self.model.filtereditems(IDecorator): ret.append(decorator()) name = self.model.classname level = self.model.nodelevel bases = self.model.bases indent = level * 4 * u' ' base_str = u'class %s(' % name rclass = u'%s%s' % (indent, base_str) if not bases: bases = ['object'] if len(bases) > 1 and 'object' in bases: bases.remove('object') rargs = self.render_arguments(level, len(name) + 7, bases) rclass = u'%s%s):\n' % (rclass, rargs) ret.append(rclass) values = [val for val in self.model.values() \ if not IDecorator.providedBy(val)] # case ``pass`` was parsed for class body if len(values) == 1 \ and IBlock.providedBy(values[0]) \ and values[0].text == u'pass': values = list() self._calcpostlf(values) if not values: ret.append(u'%s pass\n' % indent) valuecount = len(values) for i in range(valuecount): if i == 0 and not IDocstring.providedBy(values[i]): ret.append('\n') ret.append(values[i]()) ret += [u'\n' for i in range(self.model.postlf)] return u''.join(ret)