Skip to content

Commit

Permalink
initial commit
Browse files Browse the repository at this point in the history
  • Loading branch information
andrwqa committed May 30, 2023
1 parent c1967ac commit 0d7e43c
Show file tree
Hide file tree
Showing 6 changed files with 1,712 additions and 1,607 deletions.
15 changes: 14 additions & 1 deletion odd_collector_profiler/datasource/database/repository.py
Original file line number Diff line number Diff line change
@@ -1,10 +1,14 @@
import sys

import oracledb

from contextlib import contextmanager

from sqlalchemy import create_engine, inspect
from sqlalchemy.engine import Connection, Engine, Inspector

from odd_collector_profiler.datasource.database.table import Table
from odd_collector_profiler.domain.config import DatabaseConfig
from odd_collector_profiler.domain.config import DatabaseConfig, OracleConfig
from odd_collector_profiler.logger import logger


Expand Down Expand Up @@ -83,3 +87,12 @@ def get_tables(self) -> list[Table]:
for table_name in self._get_tables_by(self.config.database):
if not self.config.filters or table_name in self.config.filters:
yield Table(database=self.config.database, schema=None, name=table_name)


class OracleRepository(RDBRepository):
def __init__(self, config: OracleConfig, skip_schemas: set[str] = None) -> None:
super().__init__(config, skip_schemas)
oracledb.version = "8.3.0"
sys.modules["cx_Oracle"] = oracledb
if config.thick_mode:
oracledb.init_oracle_client()
15 changes: 15 additions & 0 deletions odd_collector_profiler/domain/config.py
Original file line number Diff line number Diff line change
Expand Up @@ -104,3 +104,18 @@ class ClickHouseConfig(DatabaseConfig):
def connection_str(self) -> str:
conn_str = f"clickhouse://{self.username}:{self.password}@{self.host}:{self.port}/{self.database}"
return conn_str


class OracleConfig(DatabaseConfig):
type = "oracle"
host: str
port: str
user: str
database: str
password: SecretStr
thick_mode: Optional[bool] = False

def connection_str(self) -> str:
conn_str = f"oracle+cx_oracle://{self.user}:{self.password.get_secret_value()}@{self.host}:{self.port}" \
f"/?service_name={self.database}"
return conn_str
Empty file.
32 changes: 32 additions & 0 deletions odd_collector_profiler/profilers/oracle/profiler.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
from typing import Any

from oddrn_generator import OracleGenerator

from odd_collector_profiler.datasource.database.profiler import RDBProfiler
from odd_collector_profiler.datasource.database.repository import OracleRepository
from odd_collector_profiler.domain.config import OracleConfig
from odd_collector_profiler.domain.profiler import Profiler
from odd_collector_profiler.profilers import DATA_PROFILER


SYS_SCHEMAS = {"xdb", "xs$null", "anonymous", "apex_040000", "apex_public_user", "ctxsys", "flows_files", "hr", "mdsys",
"outln", "sys", "system"}


class OracleProfiler(RDBProfiler):
config_model = OracleConfig
"""Profiler for Oracle datasource"""


def register_profiler(config: dict[str, Any]) -> Profiler:
config = OracleConfig.parse_obj(config)
repository = OracleRepository(config=config, skip_schemas=SYS_SCHEMAS)
generator = OracleGenerator(
host_settings=config.host, databases=config.database, schemas=config.user
)
return OracleProfiler(
config=config,
generator=generator,
repository=repository,
profiler=DATA_PROFILER,
)
Loading

0 comments on commit 0d7e43c

Please sign in to comment.