1
+ from dataclasses import dataclass
1
2
import logging
2
- from pynonymizer .database import get_temp_db_name , get_provider
3
+ from typing import Callable , Literal , Union
4
+ from pynonymizer .database .mssql import MsSqlProvider
5
+ from pynonymizer .database .mysql import MySqlProvider
6
+ from pynonymizer .database .postgres import PostgreSqlProvider
3
7
from pynonymizer .fake import FakeColumnGenerator
4
8
from pynonymizer .strategy .parser import StrategyParser
5
9
from pynonymizer .strategy .config import read_config
6
10
from pynonymizer .exceptions import ArgumentValidationError , DatabaseConnectionError
7
11
from pynonymizer .process_steps import StepActionMap , ProcessSteps
8
-
12
+ import os .path
13
+ import uuid
9
14
10
15
logger = logging .getLogger (__name__ )
11
16
12
17
18
+ def get_temp_db_name (filename = None ):
19
+ name , _ = os .path .splitext (os .path .basename (filename ))
20
+ return f"{ name } _{ uuid .uuid4 ().hex } "
21
+
22
+
13
23
def pynonymize (
24
+ progress ,
14
25
input_path = None ,
15
26
strategyfile_path = None ,
16
27
output_path = None ,
@@ -37,6 +48,7 @@ def pynonymize(
37
48
ArgumentValidationError: used when kwargs are missing or unable to be auto-resolved.
38
49
39
50
"""
51
+
40
52
# Default and Normalize args
41
53
if only_step is not None :
42
54
only_step = ProcessSteps .from_value (only_step )
@@ -97,9 +109,6 @@ def pynonymize(
97
109
if db_name is None :
98
110
validations .append ("Missing DB_NAME: Auto-resolve failed." )
99
111
100
- if len (validations ) > 0 :
101
- raise ArgumentValidationError (validations )
102
-
103
112
# init strategy as it relies on I/O - fail fast here preferred to after restore
104
113
if not actions .skipped (ProcessSteps .ANONYMIZE_DB ):
105
114
strategy_parser = StrategyParser ()
@@ -118,14 +127,27 @@ def pynonymize(
118
127
logger .debug (
119
128
"Database: (%s:%s)%s@%s name: %s" , db_host , db_port , db_type , db_user , db_name
120
129
)
121
- db_provider = get_provider (
122
- type = db_type ,
130
+
131
+ if db_type == "mysql" :
132
+ Provider = MySqlProvider
133
+ elif db_type == "postgres" :
134
+ Provider = PostgreSqlProvider
135
+ elif db_type == "mssql" :
136
+ Provider = MsSqlProvider
137
+ else :
138
+ validations .append (f"{ db_type } is not a known database type." )
139
+
140
+ if len (validations ) > 0 :
141
+ raise ArgumentValidationError (validations )
142
+
143
+ db_provider = Provider (
123
144
db_host = db_host ,
124
145
db_user = db_user ,
125
146
db_pass = db_password ,
126
147
db_name = db_name ,
127
148
db_port = db_port ,
128
149
seed_rows = seed_rows ,
150
+ progress = progress ,
129
151
** db_kwargs ,
130
152
)
131
153
0 commit comments