def _createcodeblocks(self, start, end): lines = self.model.buffer[start:end] if not ''.join(lines).strip(): return [] previndent = None pointer = 0 ret = [] for line in lines: pointer += 1 if not line.strip() or line.strip().startswith('#'): continue if previndent is None: previndent = self._findindent([self.model.buffer[start]]) curindent = self._findindent([line]) if curindent >= previndent: continue elif curindent < previndent: block = Block(None, self.model.buffer) block.readlines = self.model.readlines block.bufstart = start block.bufend = start + pointer - 1 ret.append(block) start = start + pointer - 1 previndent = curindent block = Block(None, self.model.buffer) block.readlines = self.model.readlines block.bufstart = start block.bufend = end ret.append(block) return ret
def zcarealize_finalize(self, source, target): # get the collected realizes klass = source try: targetclass = read_target_node(klass, target.target) # stub if not targetclass: return targettok = token(str(targetclass.uuid), False) # class has no interfaces if not hasattr(targettok, 'realizes'): return ifacenames = [r['name'] for r in targettok.realizes] imptext = 'implements(%s)' % ','.join(ifacenames) docstrings = targetclass.filteredvalues(IDocstring) module = targetclass.__parent__ imp = Imports(module) imp.set('zope.interface', [['implements', None]]) # delete all implements stmts try: blocks = targetclass.filteredvalues(IBlock) for b in blocks: b.lines = \ [l for l in b.lines if not l.startswith('implements(')] if not b.lines: del targetclass[str(b.uuid)] # XXX: should be reparsed except KeyError, e: print 'error during delete: %s' % str(e) if klass.stereotype('pyegg:function'): return block = Block(imptext) block.__name__ = 'implements' targetclass.insertfirst(block) if docstrings: imp = targetclass.detach('implements') targetclass.insertafter(imp, docstrings[0])