Managed to get the sku doing the same thing as the previous code.

This commit is contained in:
counterweight 2023-09-06 14:20:28 +02:00
parent f3776966bc
commit 83743ca526
Signed by: counterweight
GPG key ID: 883EDBAA726BD96C
5 changed files with 43 additions and 13 deletions

View file

@ -5,7 +5,10 @@ import typer
from typing_extensions import Annotated
import camisatoshi_wordpress_reports.controllers as controllers
import camisatoshi_wordpress_reports.logging as our_logging
our_logging.set_config_level()
app = typer.Typer()
@ -20,7 +23,7 @@ def generate_sku_report(
end_date: Annotated[datetime.datetime, typer.Option(prompt=True)],
sku: Annotated[str, typer.Option(prompt=True)]
):
controllers.generate_sku_report(start_date, end_date, sku)
controllers.wip_generate_sku_report(start_date, end_date, sku)
@app.command()
def generate_um_report(

View file

@ -13,7 +13,11 @@ from camisatoshi_wordpress_reports.constants import (
DEFAULT_DOTENV_FILEPATH,
bbo_royalty_fee,
)
from camisatoshi_wordpress_reports.report_building import ReportChainBuilder, WoocomerceOrderScope, keep_orders_containing_sku
from camisatoshi_wordpress_reports.report_building import (
ReportChainBuilder,
WoocomerceOrderScope,
keep_orders_containing_sku,
)
API_CONFIG = dotenv_values(
dotenv_path=Path.home() / Path(DEFAULT_DOTENV_FILEPATH)
@ -25,7 +29,6 @@ WC_API = API(
version=API_CONFIG["VERSION"],
)
logging.basicConfig(level=logging.INFO)
logger = logging.getLogger()
@ -189,15 +192,12 @@ def wip_generate_sku_report(start_date, end_date, sku):
wc_order_scope=WoocomerceOrderScope(
after=start_date.isoformat(),
before=end_date.isoformat(),
status="processing,completed"
status="processing,completed",
)
)
report_chain_builder.add_order_filtering_step(
partial(
keep_orders_containing_sku,
sku=sku
)
partial(keep_orders_containing_sku, sku=sku)
)
report_chain = report_chain_builder.get_report_chain()

View file

@ -0,0 +1,4 @@
import logging
def set_config_level():
logging.basicConfig(level=logging.DEBUG)

View file

@ -1,9 +1,12 @@
import logging
from typing import Dict, Collection
from camisatoshi_wordpress_reports.constants import order_keys, custom_meta_data_keys
from camisatoshi_wordpress_reports.utils import safe_zero_division
logger = logging.getLogger()
class Order:
def __init__(self, raw_data: Dict):
self.raw_data = raw_data
@ -47,9 +50,12 @@ class Order:
return sats_received_for_sku
def contains_sku(self, sku: str) -> bool:
logger.debug(f"Checking if order {self['id']} contains sku {sku}.")
for item in self[order_keys.line_items]:
if item[order_keys.line_item_keys.sku] == sku:
logger.debug(f"It does.")
return True
logger.debug("It doesn't.")
return False
def contains_meta_data_entry(self, meta_data_entry_key: str) -> bool:
@ -94,6 +100,8 @@ class Orders:
if order.contains_sku(sku):
filtered_orders.append(order)
logger.debug(f"Finished filtering. I have {len(filtered_orders)} orders.")
return Orders(filtered_orders)
def filter_orders_without_sats_received(self) -> "Orders":

View file

@ -1,3 +1,4 @@
import logging
from functools import partial
from woocommerce import API
@ -5,6 +6,9 @@ from woocommerce import API
from camisatoshi_wordpress_reports.order import Orders, Order
logger = logging.getLogger()
class MetadataFilter:
def __init__(self, key, value, operator):
self.key = key
@ -83,28 +87,39 @@ def validate_orders_satisfy_metadata_filter(
class ReportChain:
def __init__(self):
self.order_fetching_step = None
self.order_filtering_steps = None
self.order_validation_steps = None
self.transformation_steps = None
self.storage_steps = None
self.order_filtering_steps = []
self.order_validation_steps = []
self._orders = None
def run_chain(self, wc_api_client: API):
logger.info("Running report chain.")
self._run_order_fetching_step(wc_api_client)
self._run_order_filtering_steps()
self._run_order_validation_steps()
logger.info(f"Report chain ran. Returning {len(self._orders)} orders.")
return self._orders
def _run_order_fetching_step(self, wc_api_client: API) -> Orders:
logger.debug("Running order fetching step.")
self._orders = self.order_fetching_step(wc_api_client)
logger.debug(f"Received {self._orders} orders.")
def _run_order_filtering_steps(self) -> Orders:
logger.debug(
f"Running {len(self.order_filtering_steps)} order filtering steps."
)
temp_orders = self._orders
for order_filtering_step in self.order_filtering_steps:
logger.debug(f"{len(temp_orders)} before filtering.")
temp_orders = order_filtering_step(temp_orders)
logger.debug(f"{len(temp_orders)} after filtering.")
return temp_orders
self._orders = temp_orders
def _run_order_validation_steps(self):
for order_validation_step in self.order_validation_steps: