def read(self, path): """ Рекурсивное чтение вложенных пакетов и модулей """ for name in os.listdir(path): if name[0] == '.': continue fullName = os.path.join(path, name) splittedName = os.path.splitext(name) if os.path.isdir(fullName): # Если папка, то создать подчиненный пакет subPackage = self.addNamedItem(WppPackage(name)) subPackage.read(fullName) elif splittedName[1] == '.wpp': # Если файл с расширением .wpp, то создать модуль module = self.addNamedItem(WppModule(splittedName[0])) ctx = Context.createFromFile(fullName) module.read(ctx)
sys.path.append(os.path.abspath('../')) def readWpp(context, owner, baseLevel=0): stack = [owner] while not context.isFinish(): line = context.readLine() if not line.strip(): continue currentLevel = context.getCurrentLevel() + baseLevel while currentLevel + 1 < len(stack): last = stack.pop() if currentLevel + 1 == len(stack): newTaxon = stack[-1].readBody(context) if newTaxon: newTaxon.location = context.createLocation() newTaxon.readHead(context) postTaxon = stack[-1].addTaxon(newTaxon) stack.append(postTaxon) else: context.throwError('Invalid offset') if __name__ == '__main__': from Wpp.Context import Context from Wpp.WppModule import WppModule curDir = os.path.split(__file__)[0] ctx = Context.createFromFile( os.path.join(curDir, 'tests', 'files', 'simpleAB.wpp')) module = WppModule('simpleAB') readWpp(ctx, module)