Назад к задачамПолучайте помощь с лайвкодингом в реальном времени с Sobes Copilot
Junior — Middle+
52
Оптимизация кода модуля обработки торговых предложений
Компании, где спрашивали:
EX CORP
Условие задачи
Требуется провести рефакторинг представленного ниже фрагмента Python‑кода, который отвечает за проверку текущих офферов, ожидающих разблокировки в Steam, и установку их окончательных статусов.
# coding: utf-8
# noqa:flake8
# Модуль проверяет текущие офферы, которые должны уже были разблокироваться в Steam.
# И выставляет конечные статусы.
import logging
logging.basicConfig(format='%(asctime)s :%(message)s', level=logging.INFO)
# our modules
from .history import state_class
from .others import Database
from .shared import CSGO_APPID
# other
import time
import traceback
from collections import namedtuple
from datetime import *
offer = namedtuple("offer", ["offer_id", "tradeoffer_id", "steamid"])
status_map = {'Accept': 'Accept Hold', 'Decline': 'Decline Hold'}
def handle_hold_offers(database, state_object, offer, start_time=datetime.now()):
# получить через внешний HTTP API состояние тренаоффера
offer_data = state_object.get_offer_state(api_key=offer.steam_api_key,
tradeofferid=offer.tradeoffer_id,
steamid=offer.steamid)
# бизнес логика: в этот обработчик попадают все оферы, которые уходили в Hold состояние
# но в конечно итоге перешли в завершенное состояние, нужно чтобы Accept -> зафиксировался
# как Accept Hold, Decline как Decline Hold, остальные остались как есть
offer_state = status_map[offer_data.offer_state]
reaction_time = datetime.now() - offer_data.updated_timestamp
logging.info("offer_id=( ) steamid=( ) reaction_time=( ) state=( ):".format(
offer.offer_id,
offer.steamid,
reaction_time,
offer_state))
try:
# WDMOHWTH COCTORHWE ooOepa n 5A
state_object.set_state(offer_state, offer.offer_id, database, offer_data)
except:
logging.error(traceback.format_exc())
database.rollback()