From 55b06dbbb00033c25017edb5aa56d905603fe208 Mon Sep 17 00:00:00 2001 From: Pablo Martin Date: Thu, 3 Aug 2023 16:50:40 +0200 Subject: [PATCH] Move weird functions to Orders class --- camisatoshi_wordpress_reports/controllers.py | 69 ++++++-------------- camisatoshi_wordpress_reports/order.py | 37 ++++++++++- 2 files changed, 54 insertions(+), 52 deletions(-) diff --git a/camisatoshi_wordpress_reports/controllers.py b/camisatoshi_wordpress_reports/controllers.py index d16b7d8..5495596 100644 --- a/camisatoshi_wordpress_reports/controllers.py +++ b/camisatoshi_wordpress_reports/controllers.py @@ -6,7 +6,7 @@ import logging from dotenv import dotenv_values from woocommerce import API -from camisatoshi_wordpress_reports.order import Order +from camisatoshi_wordpress_reports.order import Order, Orders from camisatoshi_wordpress_reports.constants import custom_meta_data_keys API_CONFIG = dotenv_values( @@ -24,16 +24,12 @@ logger = logging.getLogger() def check_health(): - logger.info( - f"Connecting to the configured WooCommerce at {API_CONFIG['URL']}" - ) + logger.info(f"Connecting to the configured WooCommerce at {API_CONFIG['URL']}") try: api_reported_version = WC_API.get("").json()["namespace"] except: - raise ConnectionError( - "There was an issue connecting to the WooCommerce API." - ) + raise ConnectionError("There was an issue connecting to the WooCommerce API.") logger.info(f"Informed version of the API: {API_CONFIG['VERSION']}") logger.info(f"Version reported by the API itself: {api_reported_version}") @@ -41,7 +37,9 @@ def check_health(): logger.info("Connection successful. The API is reachable.") -def generate_um_report(start_date: datetime.datetime, end_date: datetime.datetime) -> None: +def generate_um_report( + start_date: datetime.datetime, end_date: datetime.datetime +) -> None: logger.info(f"Fetching orders between {start_date} and {end_date}.") orders_in_date_range = WC_API.get( @@ -53,29 +51,34 @@ def generate_um_report(start_date: datetime.datetime, end_date: datetime.datetim "status": "processing,completed", }, ).json() - orders_in_date_range = [Order.from_api_response(order_raw_data) for order_raw_data in orders_in_date_range] + orders_in_date_range = Orders( + [ + Order.from_api_response(order_raw_data) + for order_raw_data in orders_in_date_range + ] + ) logger.info(f"Received {len(orders_in_date_range)} orders.") skus_to_keep = ["TEE-05-BBO-BLACK"] - logger.info(f"Filtering by SKUs: {skus_to_keep}") - relevant_orders = filter_orders_by_sku( - orders_in_date_range, skus=skus_to_keep - ) + relevant_orders = orders_in_date_range.filter_orders_by_skus(skus=skus_to_keep) logger.info(f"Kept {len(relevant_orders)} orders.") logger.info("Checking if all orders have the sats_received entry filled in.") - orders_without_sats_received = find_orders_without_sats_received(relevant_orders) + orders_without_sats_received = relevant_orders.filter_orders_without_sats_received() if orders_without_sats_received: logger.warning( - f"There are {len(orders_without_sats_received)} orders without a properly filled sats_received entry.") + f"There are {len(orders_without_sats_received)} orders without a properly filled sats_received entry." + ) logger.warning(f"See details below.") logger.warning(orders_without_sats_received) - raise ValueError("Not all orders have sats_received. Can't compute sats owed without that.") + raise ValueError( + "Not all orders have sats_received. Can't compute sats owed without that." + ) logger.info("Success, all orders have sats_received filled in.") logger.info("Removing settled orders.") - unsettled_orders = filter_settled_orders(relevant_orders) + unsettled_orders = relevant_orders.filter_unsettled_orders() logger.info(f"Kept {len(unsettled_orders)} unsettled orders.") # Fetch orders: # - Between specific dates @@ -93,35 +96,3 @@ def generate_um_report(start_date: datetime.datetime, end_date: datetime.datetim # Update orders: # - Add metadata entry: is_settled_with_um: 1 - - -def filter_orders_by_sku(orders: List[Order], skus: List[str]) -> List[Order]: - filtered_orders = [] - - for order in orders: - for sku in skus: - if order.contains_sku(sku): - filtered_orders.append(order) - - return filtered_orders - - -def find_orders_without_sats_received(orders: List[Order]) -> List[Order]: - orders_without_sats_received = [] - - for order in orders: - if not order.contains_meta_data_entry(custom_meta_data_keys.sats_received): - orders_without_sats_received.append(order) - continue - - return orders_without_sats_received - - -def filter_settled_orders(orders: List[Order]) -> List[Order]: - unsettled_orders = [] - - for order in orders: - if not order.is_settled_with_um(): - unsettled_orders.append(order) - - return unsettled_orders diff --git a/camisatoshi_wordpress_reports/order.py b/camisatoshi_wordpress_reports/order.py index cb44b06..5e2c436 100644 --- a/camisatoshi_wordpress_reports/order.py +++ b/camisatoshi_wordpress_reports/order.py @@ -1,4 +1,4 @@ -from typing import Dict, Collection +from typing import List, Dict, Collection from camisatoshi_wordpress_reports.constants import order_keys, custom_meta_data_keys @@ -41,6 +41,37 @@ class Order: class Orders: - def __init__(self, orders: Collection[Order]): - self._orders = orders \ No newline at end of file + self._orders = orders + + def __len__(self): + return len(self._orders) + + def filter_orders_by_skus(self, skus: List[str]) -> "Orders": + filtered_orders = [] + + for order in self._orders: + for sku in skus: + if order.contains_sku(sku): + filtered_orders.append(order) + + return Orders(filtered_orders) + + def filter_orders_without_sats_received(self) -> "Orders": + orders_without_sats_received = [] + + for order in self._orders: + if not order.contains_meta_data_entry(custom_meta_data_keys.sats_received): + orders_without_sats_received.append(order) + continue + + return Orders(orders_without_sats_received) + + def filter_unsettled_orders(self) -> "Orders": + unsettled_orders = [] + + for order in self._orders: + if not order.is_settled_with_um(): + unsettled_orders.append(order) + + return Orders(unsettled_orders)