def testInferParentsTricky(self): source = dedent("""\ from something.this import other as another class AClass(another.bother): def amethod(self, other): other.do_something() self. def another(self): pass""") klass, parents = getClassAndParents(getSafeTree(source, 5), 5) self.assertEquals(klass, 'AClass') self.assertEquals(parents, ['something.this.other.bother'])
def testInferParentsTricky(self): source = dedent("""\ from something.this import other as another class AClass(another.bother): def amethod(self, other): other.do_something() self. def another(self): pass""") klass, parents = getClassAndParents(getSafeTree(source, 5), 5) self.assertEqual(klass, 'AClass') self.assertEqual(parents, ['something.this.other.bother'])
def testInferSelfMultipleClasses(self): source = dedent("""\ import something class AClass(object): def amethod(self, other): other.do_something() class Sneak(object): def sth(self): class EvenSneakier(object): pass pass pass def another(self): pass class BClass(object): def newmethod(self, something): wibble = [i for i in self.a] pass def newerMethod(self, somethingelse): if Bugger: self.ass """) self.assertEquals(getClassAndParents(getSafeTree(source, 1), 1)[0], None, 'no class yet!') for line in range(2, 5): klass, _ = getClassAndParents(getSafeTree(source, line), line) self.assertEquals(klass, 'AClass', 'wrong class %s in line %d' % (klass, line)) for line in range(5, 7): klass, _ = getClassAndParents(getSafeTree(source, line), line) self.assertEquals(klass, 'Sneak', 'wrong class %s in line %d' % (klass, line)) for line in range(7, 9): klass, _ = getClassAndParents(getSafeTree(source, line), line) self.assertEquals(klass, 'EvenSneakier', 'wrong class %s in line %d' % (klass, line)) line = 9 klass, _ = getClassAndParents(getSafeTree(source, line), line) self.assertEquals(klass, 'Sneak', 'wrong class %s in line %d' % (klass, line)) for line in range(10, 17): klass, _ = getClassAndParents(getSafeTree(source, line), line) self.assertEquals(klass, 'AClass', 'wrong class %s in line %d' % (klass, line)) for line in range(17, 51): klass, _ = getClassAndParents(getSafeTree(source, line), line) self.assertEquals(klass, 'BClass', 'wrong class %s in line %d' % (klass, line))
def testInferSelfMultipleClasses(self): source = dedent("""\ import something class AClass(object): def amethod(self, other): other.do_something() class Sneak(object): def sth(self): class EvenSneakier(object): pass pass pass def another(self): pass class BClass(object): def newmethod(self, something): wibble = [i for i in self.a] pass def newerMethod(self, somethingelse): if Bugger: self.ass """) self.assertEqual(getClassAndParents(getSafeTree(source, 1), 1)[0], None, 'no class yet!') for line in range(2, 5): klass, _ = getClassAndParents(getSafeTree(source, line), line) self.assertEqual(klass, 'AClass', 'wrong class %s in line %d' % (klass, line)) for line in range(5, 7): klass, _ = getClassAndParents(getSafeTree(source, line), line) self.assertEqual(klass, 'Sneak', 'wrong class %s in line %d' % (klass, line)) for line in range(7, 9): klass, _ = getClassAndParents(getSafeTree(source, line), line) self.assertEqual(klass, 'EvenSneakier', 'wrong class %s in line %d' % (klass, line)) line = 9 klass, _ = getClassAndParents(getSafeTree(source, line), line) self.assertEqual(klass, 'Sneak', 'wrong class %s in line %d' % (klass, line)) for line in range(10, 17): klass, _ = getClassAndParents(getSafeTree(source, line), line) self.assertEqual(klass, 'AClass', 'wrong class %s in line %d' % (klass, line)) for line in range(17, 51): klass, _ = getClassAndParents(getSafeTree(source, line), line) self.assertEqual(klass, 'BClass', 'wrong class %s in line %d' % (klass, line))
def testInferSelfSimple(self): source = dedent("""\ import something class AClass(object): def amethod(self, other): other.do_something() self. def another(self): pass """) klass, parents = getClassAndParents(getSafeTree(source, 5), 5) self.assertEquals(klass, 'AClass') self.assertEquals(parents, ['object'])
def testInferSelfSimple(self): source = dedent("""\ import something class AClass(object): \tdef amethod(self, other): \t\tother.do_something() \t\tself. \tdef another(self): \t\tpass """) klass, parents = getClassAndParents(getSafeTree(source, 5), 5) self.assertEqual(klass, 'AClass') self.assertEqual(parents, ['object'])
def testInferParents(self): source = dedent("""\ import something from something import father as stepfather class AClass(something.mother, stepfather): def amethod(self, other): other.do_something() self. def another(self): pass """) klass, parents = getClassAndParents(getSafeTree(source, 6), 6) self.assertEquals(klass, 'AClass') self.assertEquals(parents, ['something.mother', 'something.father'])
def testInferParents(self): source = dedent("""\ import something from something import father as stepfather class AClass(something.mother, stepfather): def amethod(self, other): other.do_something() self. def another(self): pass """) klass, parents = getClassAndParents(getSafeTree(source, 6), 6) self.assertEqual(klass, 'AClass') self.assertEqual(parents, ['something.mother', 'something.father'])
def inferClass(fullPath, origSource, origLineNo, PYSMELLDICT, vim=None): klass, parents = getClassAndParents(origSource, origLineNo) # replace POINTERS with their full reference for index, parent in enumerate(parents[:]): parents[index] = _qualify(parent, PYSMELLDICT) pathParts = _getPathParts(fullPath) fullKlass = klass while pathParts: fullKlass = "%s.%s" % (pathParts.pop(), fullKlass) if fullKlass in PYSMELLDICT['CLASSES'].keys(): break else: # we don't know about this class, look in the file system path, filename = os.path.split(fullPath) packages = findRootPackageList(path, filename) fullKlass = "%s.%s.%s" % (".".join(packages), filename[:-3], klass) return fullKlass, parents
def inferClass(fullPath, AST, origLineNo, PYSMELLDICT, vim=None): klass, parents = getClassAndParents(AST, origLineNo) # replace POINTERS with their full reference for index, parent in enumerate(parents[:]): parents[index] = _qualify(parent, PYSMELLDICT) pathParts = _getPathParts(fullPath) fullKlass = klass while pathParts: fullKlass = "%s.%s" % (pathParts.pop(), fullKlass) if fullKlass in list(PYSMELLDICT['CLASSES'].keys()): break else: # we don't know about this class, look in the file system path, filename = os.path.split(fullPath) packages = findRootPackageList(path, filename) if packages: packagesStr = (".".join(packages)) + "." else: packagesStr = "" fullKlass = "%s%s.%s" % (packagesStr, filename[:-3], klass) return fullKlass, parents