Sobes.tech
Junior — Middle+

Code optimization of the trade offer processing module

livecode

Task condition

Refactoring of the provided Python code snippet is required, which is responsible for checking current offers waiting to be unlocked in Steam, and setting their final statuses.


# coding: utf-8
# noqa:flake8
# The module checks current offers that should have already been unlocked in Steam.
# And sets the final statuses.

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()):
    # get the trade offer state via external HTTP API
    offer_data = state_object.get_offer_state(api_key=offer.steam_api_key,
                                            tradeofferid=offer.tradeoffer_id,
                                            steamid=offer.steamid)
    
    # business logic: this handler receives all offers that went into Hold state
    # but ultimately transitioned to a completed state, need to ensure that Accept -> is fixed
    # as Accept Hold, Decline as Decline Hold, others remain as is
    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()