Добавлено детальное логирование в класс OracleDatabase и обработчики в main.py для улучшения отладки и информативности. Теперь выводятся значения VIN, SVIN и результаты запросов к базе данных, а также улучшена обработка случаев, когда VIN не удается декодировать. Эти изменения помогут в выявлении и устранении ошибок при работе с данными о транспортных средствах.
This commit is contained in:
parent
097a481026
commit
f8d763920a
8
db.py
8
db.py
@ -54,10 +54,16 @@ class OracleDatabase:
|
|||||||
(select count(*) from salvagedb.m_JSONS_FROM_NHTSA v3 where v3.svin =s.svin) cnt
|
(select count(*) from salvagedb.m_JSONS_FROM_NHTSA v3 where v3.svin =s.svin) cnt
|
||||||
from (select substr(:vin,1,10) svin, :vin vin from dual) s
|
from (select substr(:vin,1,10) svin, :vin vin from dual) s
|
||||||
"""
|
"""
|
||||||
|
print(f"[DB DEBUG] Executing query for VIN: {vin}")
|
||||||
|
print(f"[DB DEBUG] SVIN will be: {vin[:10]}")
|
||||||
cur.execute(query, {"vin": vin})
|
cur.execute(query, {"vin": vin})
|
||||||
result = cur.fetchone()
|
result = cur.fetchone()
|
||||||
|
print(f"[DB DEBUG] Raw result from database: {result}")
|
||||||
if result:
|
if result:
|
||||||
return result[1], result[2], result[3], result[4] # make, model, year, cnt
|
make, model, year, cnt = result[1], result[2], result[3], result[4]
|
||||||
|
print(f"[DB DEBUG] Parsed values - make: '{make}', model: '{model}', year: '{year}', cnt: {cnt}")
|
||||||
|
return make, model, year, cnt
|
||||||
|
print(f"[DB DEBUG] No result found, returning defaults")
|
||||||
return "UNKNOWN", "UNKNOWN", "UNKNOWN", 0
|
return "UNKNOWN", "UNKNOWN", "UNKNOWN", 0
|
||||||
import asyncio
|
import asyncio
|
||||||
return await asyncio.to_thread(_query)
|
return await asyncio.to_thread(_query)
|
||||||
|
|||||||
35
main.py
35
main.py
@ -106,6 +106,10 @@ logging.getLogger().setLevel(logging.INFO)
|
|||||||
|
|
||||||
TOKEN = getenv("BOT_TOKEN")
|
TOKEN = getenv("BOT_TOKEN")
|
||||||
BOTNAME = getenv("BOT_NAME")
|
BOTNAME = getenv("BOT_NAME")
|
||||||
|
DECODE_PRICE = getenv("DECODE_PRICE",1)
|
||||||
|
CHECK_PRICE = getenv("CHECK_PRICE",10)
|
||||||
|
IMG_PRICE = getenv("IMG_PRICE",100)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
oracle_db = OracleDatabase(
|
oracle_db = OracleDatabase(
|
||||||
@ -228,21 +232,33 @@ async def process_vin(message: Message, state: FSMContext, db: OracleDatabase =
|
|||||||
try:
|
try:
|
||||||
make, model, year, cnt = await database.fetch_vin_info(vin)
|
make, model, year, cnt = await database.fetch_vin_info(vin)
|
||||||
logging.info(f"Decode VIN 1st step: make: {make}, model: {model}, year: {year}, cnt: {cnt}")
|
logging.info(f"Decode VIN 1st step: make: {make}, model: {model}, year: {year}, cnt: {cnt}")
|
||||||
response_text = f"🚗 **{year} {make} {model}**\n\n"
|
logging.info(f"VIN decode check: make==UNKNOWN: {make == 'UNKNOWN'}, model==UNKNOWN: {model == 'UNKNOWN'}, year==UNKNOWN: {year == 'UNKNOWN'}")
|
||||||
if cnt == 0:
|
logging.info(f"All UNKNOWN check: {make == 'UNKNOWN' and model == 'UNKNOWN' and year == 'UNKNOWN'}")
|
||||||
response_text = "** Unable to decode VIN, possibly incorrect **"
|
logging.info(f"cnt == 0 check: {cnt == 0}")
|
||||||
|
|
||||||
|
# Формируем текст ответа
|
||||||
|
if make == "UNKNOWN" and model == "UNKNOWN" and year == "UNKNOWN":
|
||||||
|
logging.info("Setting response_text to 'Unable to decode VIN' because all fields are UNKNOWN")
|
||||||
|
response_text = "❌ **Unable to decode VIN, possibly incorrect**"
|
||||||
|
else:
|
||||||
|
logging.info(f"VIN successfully decoded! Setting response_text to car info: {year} {make} {model}")
|
||||||
|
response_text = f"🚗 **{year} {make} {model}**\n\n"
|
||||||
|
|
||||||
# Create keyboard based on cnt value
|
# Create keyboard based on cnt value
|
||||||
builder = InlineKeyboardBuilder()
|
builder = InlineKeyboardBuilder()
|
||||||
builder.button(text="Try another VIN", callback_data="decode_vin")
|
builder.button(text="Try another VIN", callback_data="decode_vin")
|
||||||
builder.button(text="Back to Main Menu", callback_data="main_menu")
|
builder.button(text="Back to Main Menu", callback_data="main_menu")
|
||||||
|
|
||||||
if cnt > 9:
|
if cnt > 9 and not (make == "UNKNOWN" and model == "UNKNOWN" and year == "UNKNOWN"):
|
||||||
builder.button(text="Get detailed info. Pay 1 ⭐️", callback_data=f"pay_detailed_info:{vin}", pay=True)
|
logging.info("Adding detailed info button because cnt > 9 and VIN is decoded")
|
||||||
|
builder.button(text=f"Get detailed info. Pay {DECODE_PRICE} ⭐️", callback_data=f"pay_detailed_info:{vin}", pay=True)
|
||||||
builder.adjust(1, 1, 1) # Each button on separate row
|
builder.adjust(1, 1, 1) # Each button on separate row
|
||||||
else:
|
else:
|
||||||
|
logging.info(f"Not adding detailed info button because cnt <= 9 (cnt={cnt}) or VIN not decoded")
|
||||||
builder.adjust(1, 1) # Each button on separate row
|
builder.adjust(1, 1) # Each button on separate row
|
||||||
|
|
||||||
|
logging.info(f"Final response_text before sending in decode VIN: '{response_text}'")
|
||||||
|
logging.info(f"Response text length: {len(response_text)}")
|
||||||
await message.answer(response_text, reply_markup=builder.as_markup(), parse_mode="Markdown")
|
await message.answer(response_text, reply_markup=builder.as_markup(), parse_mode="Markdown")
|
||||||
|
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
@ -271,11 +287,16 @@ async def process_check_vin(message: Message, state: FSMContext, db: OracleDatab
|
|||||||
salvage_count = await database.count_salvage_records(vin)
|
salvage_count = await database.count_salvage_records(vin)
|
||||||
|
|
||||||
logging.info(f"Check VIN: make: {make}, model: {model}, year: {year}, cnt: {cnt}, salvage_count: {salvage_count}")
|
logging.info(f"Check VIN: make: {make}, model: {model}, year: {year}, cnt: {cnt}, salvage_count: {salvage_count}")
|
||||||
|
logging.info(f"VIN decode check: make==UNKNOWN: {make == 'UNKNOWN'}, model==UNKNOWN: {model == 'UNKNOWN'}, year==UNKNOWN: {year == 'UNKNOWN'}")
|
||||||
|
logging.info(f"All UNKNOWN check: {make == 'UNKNOWN' and model == 'UNKNOWN' and year == 'UNKNOWN'}")
|
||||||
|
logging.info(f"cnt == 0 check: {cnt == 0}")
|
||||||
|
|
||||||
# Формируем текст ответа
|
# Формируем текст ответа
|
||||||
if cnt == 0:
|
if make == "UNKNOWN" and model == "UNKNOWN" and year == "UNKNOWN":
|
||||||
|
logging.info("Setting response_text to 'Unable to decode VIN' because all fields are UNKNOWN")
|
||||||
response_text = "❌ **Unable to decode VIN, possibly incorrect**\n\n"
|
response_text = "❌ **Unable to decode VIN, possibly incorrect**\n\n"
|
||||||
else:
|
else:
|
||||||
|
logging.info(f"VIN successfully decoded! Setting response_text to car info: {year} {make} {model}")
|
||||||
response_text = f"🚗 **{year} {make} {model}**\n\n"
|
response_text = f"🚗 **{year} {make} {model}**\n\n"
|
||||||
|
|
||||||
response_text += f"📊 **Records found in database:** {salvage_count}\n\n"
|
response_text += f"📊 **Records found in database:** {salvage_count}\n\n"
|
||||||
@ -296,6 +317,8 @@ async def process_check_vin(message: Message, state: FSMContext, db: OracleDatab
|
|||||||
builder.button(text="Back to Main Menu", callback_data="main_menu")
|
builder.button(text="Back to Main Menu", callback_data="main_menu")
|
||||||
builder.adjust(1, 1) # Each button on separate row
|
builder.adjust(1, 1) # Each button on separate row
|
||||||
|
|
||||||
|
logging.info(f"Final response_text before sending: '{response_text}'")
|
||||||
|
logging.info(f"Response text length: {len(response_text)}")
|
||||||
await message.answer(response_text, reply_markup=builder.as_markup(), parse_mode="Markdown")
|
await message.answer(response_text, reply_markup=builder.as_markup(), parse_mode="Markdown")
|
||||||
|
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user