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 from typing_extensions import Annotated
import camisatoshi_wordpress_reports.controllers as controllers import camisatoshi_wordpress_reports.controllers as controllers
import camisatoshi_wordpress_reports.logging as our_logging
our_logging.set_config_level()
app = typer.Typer() app = typer.Typer()
@ -20,7 +23,7 @@ def generate_sku_report(
end_date: Annotated[datetime.datetime, typer.Option(prompt=True)], end_date: Annotated[datetime.datetime, typer.Option(prompt=True)],
sku: Annotated[str, 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() @app.command()
def generate_um_report( def generate_um_report(

View file

@ -13,7 +13,11 @@ from camisatoshi_wordpress_reports.constants import (
DEFAULT_DOTENV_FILEPATH, DEFAULT_DOTENV_FILEPATH,
bbo_royalty_fee, 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( API_CONFIG = dotenv_values(
dotenv_path=Path.home() / Path(DEFAULT_DOTENV_FILEPATH) dotenv_path=Path.home() / Path(DEFAULT_DOTENV_FILEPATH)
@ -25,7 +29,6 @@ WC_API = API(
version=API_CONFIG["VERSION"], version=API_CONFIG["VERSION"],
) )
logging.basicConfig(level=logging.INFO)
logger = logging.getLogger() logger = logging.getLogger()
@ -189,15 +192,12 @@ def wip_generate_sku_report(start_date, end_date, sku):
wc_order_scope=WoocomerceOrderScope( wc_order_scope=WoocomerceOrderScope(
after=start_date.isoformat(), after=start_date.isoformat(),
before=end_date.isoformat(), before=end_date.isoformat(),
status="processing,completed" status="processing,completed",
) )
) )
report_chain_builder.add_order_filtering_step( report_chain_builder.add_order_filtering_step(
partial( partial(keep_orders_containing_sku, sku=sku)
keep_orders_containing_sku,
sku=sku
)
) )
report_chain = report_chain_builder.get_report_chain() 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 typing import Dict, Collection
from camisatoshi_wordpress_reports.constants import order_keys, custom_meta_data_keys from camisatoshi_wordpress_reports.constants import order_keys, custom_meta_data_keys
from camisatoshi_wordpress_reports.utils import safe_zero_division from camisatoshi_wordpress_reports.utils import safe_zero_division
logger = logging.getLogger()
class Order: class Order:
def __init__(self, raw_data: Dict): def __init__(self, raw_data: Dict):
self.raw_data = raw_data self.raw_data = raw_data
@ -47,9 +50,12 @@ class Order:
return sats_received_for_sku return sats_received_for_sku
def contains_sku(self, sku: str) -> bool: 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]: for item in self[order_keys.line_items]:
if item[order_keys.line_item_keys.sku] == sku: if item[order_keys.line_item_keys.sku] == sku:
logger.debug(f"It does.")
return True return True
logger.debug("It doesn't.")
return False return False
def contains_meta_data_entry(self, meta_data_entry_key: str) -> bool: def contains_meta_data_entry(self, meta_data_entry_key: str) -> bool:
@ -94,6 +100,8 @@ class Orders:
if order.contains_sku(sku): if order.contains_sku(sku):
filtered_orders.append(order) filtered_orders.append(order)
logger.debug(f"Finished filtering. I have {len(filtered_orders)} orders.")
return Orders(filtered_orders) return Orders(filtered_orders)
def filter_orders_without_sats_received(self) -> "Orders": def filter_orders_without_sats_received(self) -> "Orders":

View file

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