class TestParser(unittest.TestCase): """ Class implements tests for PLSQL parser """ def setUp(self): self.fixtures = {} for item in os.listdir(os.path.dirname(__file__) + "/fixture"): match = re.match("(\w+)\.pkg", item) if match: f = open(os.path.dirname(__file__) + "/fixture/" + item) self.fixtures[match.group(1)] = f.read() f.close() self.parser = PlSqlParser() def test_parse_plsqlparsertestpackage(self): """ Tests to parse PL/SQL package specification """ functions, procedures, constants = self.parser.get_package_members(self.fixtures[TEST_PACKAGE]) self.assertEquals(len(functions), 12) self.assertEquals(len(procedures), 1) self.assertEquals(len(constants), 3)
def setUp(self): self.fixtures = {} for item in os.listdir(os.path.dirname(__file__) + "/fixture"): match = re.match("(\w+)\.pkg", item) if match: f = open(os.path.dirname(__file__) + "/fixture/" + item) self.fixtures[match.group(1)] = f.read() f.close() self.parser = PlSqlParser()
def __init__(self, connection): self.dba = DBA(connection) self.parser = PlSqlParser() self.fs = SchemaIO() self.packages = []
class Schema(): def __init__(self, connection): self.dba = DBA(connection) self.parser = PlSqlParser() self.fs = SchemaIO() self.packages = [] def generate_packages(self): """Dump PLSQL packages to filesystem""" self.fs.check_packages_storage() self._save_packages() def _save_packages(self): """ Get packages, parse package specification, generate py and save """ raw_packages = self.dba.get_packages() for package in raw_packages: package = Package(package) if package.name in settings.PLSQL_PACKAGES: # parse package to get package members members = self._get_package_members(package) package.set_members(members) self.packages.append(package) # save package to fs self.fs.save_package( package.name.lower(), package.get_py_source() ) def _get_package_members(self, package): """ Function to get package members Parameters: package - instance of Package class """ source = self.dba.get_spec_source(package.name) functions, procedures, constants = self.parser.get_package_members(source) members = [] for proc in procedures: # create Procedure member = Procedure(proc['name'], package) for arg in proc['args']: member.add_argument( Argument.create(arg['name'], arg['type'], arg['oratype']) ) members.append(member) for func in functions: # create Function member = Function(func['name'], func['oratype'], package) for arg in func['args']: member.add_argument( Argument.create(arg['name'], arg['type'], arg['oratype']) ) members.append(member) for const in constants: members.append(Constant(const['name'], const['value'])) return members