Managed to get the sku doing the same thing as the previous code.
This commit is contained in:
parent
f3776966bc
commit
83743ca526
5 changed files with 43 additions and 13 deletions
|
|
@ -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(
|
||||||
|
|
|
||||||
|
|
@ -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()
|
||||||
|
|
|
||||||
4
camisatoshi_wordpress_reports/logging.py
Normal file
4
camisatoshi_wordpress_reports/logging.py
Normal file
|
|
@ -0,0 +1,4 @@
|
||||||
|
import logging
|
||||||
|
|
||||||
|
def set_config_level():
|
||||||
|
logging.basicConfig(level=logging.DEBUG)
|
||||||
|
|
@ -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":
|
||||||
|
|
|
||||||
|
|
@ -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:
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue