import random
import string
from datetime import datetime, date
from sqlalchemy import Integer, String, DateTime, Boolean, Float, Date, Text, Enum
from sqlalchemy.orm import DeclarativeBase
def gen_int(): return random.randint(1, 1000)
def gen_str(col): return "".join(random.choices(string.ascii_letters, k=col.type.length or 8))
def gen_bool(): return random.choice([True, False])
def gen_datetime(): return datetime.now()
def gen_date(): return date.today()
def gen_float(): return float(random.randint(1, 1000))
def gen_enum(col): return random.choice(col.type.enums)
TYPE_MAPPING = {
Integer: lambda col: gen_int(),
String: lambda col: gen_str(col),
Text: lambda col: gen_str(col),
Boolean: lambda col: gen_bool(),
DateTime: lambda col: gen_datetime(),
Date: lambda col: gen_date(),
Float: lambda col: gen_float(),
Enum: lambda col: gen_enum(col),
}
def gen(model_cls: DeclarativeBase, num_rows=5):
data = []
for _ in range(num_rows):
row = {}
for column in model_cls.__table__.columns:
gen_func = TYPE_MAPPING.get(type(column.type))
row[column.name] = gen_func(column) if gen_func else None
data.append(row)
return data
from models import AllTypesModel
mock_data = gen(AllTypesModel, 100)
for row in mock_data:
print(row)
-----------------
def find_table_in_wrappers(tree: ast.Module, target_wrappers: list[str]):
res = []
for node in ast.walk(tree):
if isinstance(node, ast.Call) and node.func.id in target_wrappers:
res.append(node.args[0].value)
return res
# =====================================================================
# 3. ЗАПУСК ТЕСТА
# =====================================================================
if __name__ == "__main__":
# Список функций-оберток, которые мы ищем
TARGET_WRAPPERS = ["db_wrapper_select", "db_wrapper_insert"]
# Парсим моковый код в AST-дерево
tree = ast.parse(mock_code)
result = find_table_in_wrappers(tree, TARGET_WRAPPERS)
print(result)