Example #1
0
 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
Example #2
0
 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])