Exemple #1
0
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)
Exemple #2
0
    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()
Exemple #3
0
 def __init__(self, connection):
     self.dba = DBA(connection)
     self.parser = PlSqlParser()
     self.fs = SchemaIO()
     self.packages = []
Exemple #4
0
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