def upsert_user_sync(notification_user: NotificationUser):
    conn = sqlite_item_persistence.get_connection()
    try:
        sqlite_item_persistence.upsert_notification_user(
            conn, notification_user)
    finally:
        conn.close()
def get_all_subscribed_for_user_sync(user_id: int) -> List[NotificationUser]:
    conn = sqlite_item_persistence.get_connection()
    try:
        notification_users = sqlite_item_persistence.get_all_subscribed_for_user(
            conn, user_id)
    finally:
        conn.close()
    return notification_users
def get_latest_prices_histories_sync(
        item_urls: List[str],
        max_to_retrieve: int) -> Dict[str, List[PriceHistory]]:
    conn = sqlite_item_persistence.get_connection()
    try:
        price_histories = sqlite_item_persistence.get_latest_price_histories(
            conn, item_urls, max_to_retrieve)
    finally:
        conn.close()
    return price_histories
def unsubscribe_sync(item_url: str, user: NotificationUser):
    conn = sqlite_item_persistence.get_connection()
    try:
        if sqlite_item_persistence.does_item_exist(conn, item_url):
            sqlite_item_persistence.delete_notification_user(
                conn, user.id, item_url)
        else:
            raise UserException(
                f"You are not currently subscribed to {item_url}")
    finally:
        conn.close()
def subscribe_sync(user: NotificationUser, item_url: str, website: Website,
                   loop) -> Item:
    conn = sqlite_item_persistence.get_connection()
    try:
        item = sqlite_item_persistence.get_item(conn, item_url)
        if item is not None:
            user.item_name = item.item_name
            sqlite_item_persistence.upsert_notification_user(conn, user)
        else:
            item_name_future = asyncio.run_coroutine_threadsafe(
                website_dict[website].get_item_name_from_url(
                    item_url, discord_executor), loop)
            item = create_item(item_url, item_name_future.result(), website)
            sqlite_item_persistence.insert_item_if_doesnt_exist(conn, item)
            user.item_name = item.item_name
            sqlite_item_persistence.upsert_notification_user(conn, user)
    finally:
        conn.close()
    return item
def unsubscribe_all_sync(id: int):
    conn = sqlite_item_persistence.get_connection()
    try:
        sqlite_item_persistence.delete_all_notification_users_with_id(conn, id)
    finally:
        conn.close()