Skip to content

Commit 7e7d0c3

Browse files
committed
Consolidate invoicing configurations
All invoicing configurations, such as output file names, input file paths, etc, have been grouped into a Pydantic module in `settings.py` file. There is no longer any CLI arguments, and all `Processor`/`Invoice` subclasses will now get their unique configurations from `settings.py`, instead of being passed through `__init__()`. Test cases, especially the e2e, have been changed accordingly. Loading of configuration files moved to `loader.py`. This separation between settings and loading logic should make the code more maintainable. With how we previously handled invoicing configurations, `process_report.py` had an unyieldingly long list of configurations, which also forced us to initialize each processor/invoice individually, creating much clutter over time. This change is made to reduce clutter by grouping all configurations into one file.
1 parent b7c14fd commit 7e7d0c3

28 files changed

+396
-470
lines changed

.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
*.csv
22
!process_report/tests/e2e/test_data/*.csv
3+
!process_report/tests/e2e/test_data/test_invoices/*.csv
34
__pycache__/
45
*.py[cod]

process_report/invoices/NERC_total_invoice.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
import process_report.invoices.invoice as invoice
44
import process_report.util as util
5+
from process_report.settings import invoice_settings
56

67

78
@dataclass
@@ -12,6 +13,7 @@ class NERCTotalInvoice(invoice.Invoice):
1213
- NewPICreditProcessor
1314
"""
1415

16+
name: str = invoice_settings.nerc_total_invoice_name
1517
export_columns_list = [
1618
invoice.INVOICE_DATE_FIELD,
1719
invoice.PROJECT_FIELD,
Lines changed: 2 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,6 @@
11
from dataclasses import dataclass
22

3-
import pandas
4-
import pyarrow
5-
3+
from process_report.settings import invoice_settings
64
from process_report.invoices import invoice
75

86

@@ -14,11 +12,7 @@ class BillableInvoice(invoice.Invoice):
1412
- NewPICreditProcessor
1513
"""
1614

17-
PI_S3_FILEPATH = "PIs/PI.csv"
18-
19-
old_pi_filepath: str
20-
updated_old_pi_df: pandas.DataFrame
21-
15+
name: str = invoice_settings.billable_invoice_name
2216
export_columns_list = [
2317
invoice.INVOICE_DATE_FIELD,
2418
invoice.PROJECT_FIELD,
@@ -45,20 +39,3 @@ def _prepare_export(self):
4539
self.export_data = self.data[
4640
self.data[invoice.IS_BILLABLE_FIELD] & ~self.data[invoice.MISSING_PI_FIELD]
4741
]
48-
self.updated_old_pi_df = self.updated_old_pi_df.astype(
49-
{
50-
invoice.PI_INITIAL_CREDITS: pandas.ArrowDtype(
51-
pyarrow.decimal128(21, 2)
52-
),
53-
invoice.PI_1ST_USED: pandas.ArrowDtype(pyarrow.decimal128(21, 2)),
54-
invoice.PI_2ND_USED: pandas.ArrowDtype(pyarrow.decimal128(21, 2)),
55-
},
56-
)
57-
58-
def export(self):
59-
super().export()
60-
self.updated_old_pi_df.to_csv(self.old_pi_filepath, index=False)
61-
62-
def export_s3(self, s3_bucket):
63-
super().export_s3(s3_bucket)
64-
s3_bucket.upload_file(self.old_pi_filepath, self.PI_S3_FILEPATH)

process_report/invoices/bu_internal_invoice.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
from dataclasses import dataclass
22

33
import process_report.invoices.invoice as invoice
4+
from process_report.settings import invoice_settings
45

56

67
@dataclass
@@ -11,6 +12,7 @@ class BUInternalInvoice(invoice.Invoice):
1112
- NewPICreditProcessor
1213
"""
1314

15+
name: str = invoice_settings.bu_internal_invoice_name
1416
export_columns_list = [
1517
invoice.INVOICE_DATE_FIELD,
1618
invoice.PI_FIELD,

process_report/invoices/invoice.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -64,9 +64,9 @@ class Invoice:
6464
export_columns_list = list()
6565
exported_columns_map = dict()
6666

67-
name: str
6867
invoice_month: str
6968
data: pandas.DataFrame
69+
name: str = ""
7070
export_data = None
7171

7272
def process(self):

process_report/invoices/lenovo_invoice.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
from dataclasses import dataclass
22

3+
from process_report.settings import invoice_settings
34
import process_report.invoices.invoice as invoice
45

56

@@ -12,6 +13,7 @@ class LenovoInvoice(invoice.Invoice):
1213
"BM GPUH100",
1314
]
1415

16+
name: str = invoice_settings.lenovo_invoice_name
1517
export_columns_list = [
1618
invoice.INVOICE_DATE_FIELD,
1719
invoice.PROJECT_FIELD,

process_report/invoices/nonbillable_invoice.py

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,12 @@
11
from dataclasses import dataclass
22

3+
from process_report.settings import invoice_settings
34
import process_report.invoices.invoice as invoice
45

56

67
@dataclass
78
class NonbillableInvoice(invoice.Invoice):
8-
nonbillable_pis: list[str]
9-
nonbillable_projects: list[str]
10-
9+
name: str = invoice_settings.nonbillable_invoice_name
1110
export_columns_list = [
1211
invoice.INVOICE_DATE_FIELD,
1312
invoice.PROJECT_FIELD,

process_report/invoices/ocp_test_invoice.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,13 @@
11
from dataclasses import dataclass
22

33
import process_report.invoices.invoice as invoice
4+
from process_report.settings import invoice_settings
45

56

67
@dataclass
78
class OcpTestInvoice(invoice.Invoice):
9+
name: str = invoice_settings.ocp_test_invoice_name
10+
811
export_columns_list = [
912
invoice.INVOICE_DATE_FIELD,
1013
invoice.PROJECT_FIELD,

process_report/invoices/pi_specific_invoice.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
from jinja2 import Environment, FileSystemLoader
1010

1111
import process_report.invoices.invoice as invoice
12+
from process_report.settings import invoice_settings
1213
import process_report.util as util
1314

1415

@@ -43,6 +44,8 @@ class PIInvoice(invoice.Invoice):
4344
invoice.BALANCE_FIELD,
4445
]
4546

47+
name: str = invoice_settings.pi_specific_folder_name
48+
4649
export_columns_list = [
4750
invoice.INVOICE_DATE_FIELD,
4851
invoice.PROJECT_FIELD,

process_report/invoices/prepay_credits_snapshot.py

Lines changed: 13 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,25 @@
1-
from dataclasses import dataclass
1+
from dataclasses import dataclass, field
22

33
import pandas
44

5+
from process_report.loader import loader
6+
from process_report.settings import invoice_settings
57
from process_report import util
68
from process_report.invoices import invoice
79

810

911
@dataclass
1012
class PrepayCreditsSnapshot(invoice.Invoice):
11-
prepay_credits: pandas.DataFrame
12-
prepay_contacts: pandas.DataFrame
13-
13+
prepay_credits: pandas.DataFrame = field(
14+
default_factory=lambda: loader.load_dataframe(
15+
invoice_settings.prepay_credits_filepath
16+
)
17+
)
18+
prepay_contacts: pandas.DataFrame = field(
19+
default_factory=lambda: loader.load_dataframe(
20+
invoice_settings.prepay_contacts_filepath
21+
)
22+
)
1423
export_columns_list = [
1524
invoice.PREPAY_MONTH_FIELD,
1625
invoice.PREPAY_GROUP_NAME_FIELD,

0 commit comments

Comments
 (0)