Skip to content

Commit

Permalink
fix: 👽️ add new manu: Novavax (#97)
Browse files Browse the repository at this point in the history
* fix: 👽️  add new manu: Novavax

* test: ✅  assert first possible "Novavax" usage
  • Loading branch information
jalezi authored Mar 7, 2022
1 parent b36c890 commit 3386585
Show file tree
Hide file tree
Showing 5 changed files with 68 additions and 25 deletions.
7 changes: 6 additions & 1 deletion cepimose/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -329,23 +329,28 @@ def vaccinations_by_manufacturer_used() -> "list[VaccinationByManufacturerRow]":
janssen = list(
filter(lambda x: x.date == start_date, obj[Manufacturer.JANSSEN])
)
novavax = list(
filter(lambda x: x.date == start_date, obj[Manufacturer.NOVAVAX])
)
try:
pfizer_used = pfizer[0].dose if len(pfizer) != 0 else None
moderna_used = moderna[0].dose if len(moderna) != 0 else None
az_used = az[0].dose if len(az) != 0 else None
janssen_used = janssen[0].dose if len(janssen) != 0 else None
novavax_used = novavax[0].dose if len(novavax) != 0 else None
result.append(
VaccinationByManufacturerRow(
start_date,
pfizer_used,
moderna_used,
az_used,
janssen_used,
novavax_used,
)
)
except:
print(start_date, "Something went wrong")
print(pfizer, moderna, az, janssen)
print(pfizer, moderna, az, janssen, novavax)
start_date += DAY_DELTA
return result

Expand Down
1 change: 1 addition & 0 deletions cepimose/enums.py
Original file line number Diff line number Diff line change
Expand Up @@ -44,6 +44,7 @@ class Manufacturer(Enum):
MODERNA = "Moderna"
PFIZER = "Pfizer-BioNTech"
JANSSEN = "Janssen"
NOVAVAX = "Novavax"


@unique
Expand Down
10 changes: 6 additions & 4 deletions cepimose/parser.py
Original file line number Diff line number Diff line change
Expand Up @@ -209,13 +209,13 @@ def _parse_vaccines_supplied_by_manufacturer(
]
parsed_data = []

if len(manufacturers) > 4:
if len(manufacturers) > 5:
print(manufacturers)
raise Exception("New manufacturer!")

def get_manufacturer(num):
manu_keys = ["pfizer", "moderna", "az", "janssen"]
if num > 3 or num == None:
manu_keys = ["pfizer", "moderna", "az", "janssen", "novavax"]
if num > 4 or num == None:
print(num)
raise Exception("Missing manufacturer!")
return manu_keys[num]
Expand All @@ -235,7 +235,7 @@ def get_manufacturer(num):
raise Exception("Unknown R value!")

manu_row = VaccinationByManufacturerRow(
date=None, pfizer=None, moderna=None, az=None, janssen=None
date=None, pfizer=None, moderna=None, az=None, janssen=None, novavax=None
)

if R == None:
Expand Down Expand Up @@ -595,6 +595,7 @@ def _create_vaccinations_by_manufacturer_parser(manufacturer: Manufacturer):
Manufacturer.MODERNA: datetime.datetime(2021, 1, 12),
Manufacturer.AZ: datetime.datetime(2021, 2, 6),
Manufacturer.JANSSEN: datetime.datetime(2021, 4, 14),
Manufacturer.NOVAVAX: datetime.datetime(2022, 3, 1),
}

def _parse_vaccinations_by_manufacturer_used(data) -> "list[VaccinationDose]":
Expand Down Expand Up @@ -653,6 +654,7 @@ def _parse_vaccinations_date_range_manufacturers_used(data):
"Janssen": "janssen",
"Moderna": "moderna",
"Pfizer-BioNTech": "pfizer",
"Novavax": "novavax",
}

parsed_data = []
Expand Down
2 changes: 2 additions & 0 deletions cepimose/types.py
Original file line number Diff line number Diff line change
Expand Up @@ -48,6 +48,7 @@ class VaccinationByManufacturerRow:
moderna: Optional[int]
az: Optional[int]
janssen: Optional[int]
novavax: Optional[int]


@dataclass
Expand Down Expand Up @@ -126,6 +127,7 @@ class VaccinationsDateRangeByGroup:
az: Optional[VaccinationsDoses] = field(default_factory=VaccinationsDoses)
moderna: Optional[VaccinationsDoses] = field(default_factory=VaccinationsDoses)
janssen: Optional[VaccinationsDoses] = field(default_factory=VaccinationsDoses)
novavax: Optional[VaccinationsDoses] = field(default_factory=VaccinationsDoses)


@dataclass
Expand Down
73 changes: 53 additions & 20 deletions test/test.py
Original file line number Diff line number Diff line change
Expand Up @@ -113,27 +113,33 @@ def assertRow(row, expected_date, expected):
self.assertEqual(row.moderna, expected[1])
self.assertEqual(row.az, expected[2])
self.assertEqual(row.janssen, expected[3])
self.assertEqual(row.novavax, expected[4])

assertRow(
data[0], datetime.datetime(2020, 12, 26), [11700, None, None, None]
data[0], datetime.datetime(2020, 12, 26), [11700, None, None, None, None]
) # first ever supply

assertRow(
data[1], datetime.datetime(2020, 12, 30), [8190, None, None, None]
data[1], datetime.datetime(2020, 12, 30), [8190, None, None, None, None]
) # R = 2
assertRow(
data[3], datetime.datetime(2021, 1, 11), [19890, None, None, None]
data[3], datetime.datetime(2021, 1, 11), [19890, None, None, None, None]
) # R = 6
assertRow(
data[16], datetime.datetime(2021, 2, 25), [None, 8400, 16800, None]
data[16], datetime.datetime(2021, 2, 25), [None, 8400, 16800, None, None]
) # combined: two response data items with same date; second has R = 1
assertRow(data[32], datetime.datetime(2021, 4, 14), [None, None, None, 7200])
assertRow(
data[65], datetime.datetime(2021, 7, 12), [72540, None, -250000, None]
data[32], datetime.datetime(2021, 4, 14), [None, None, None, 7200, None]
)
assertRow(
data[65], datetime.datetime(2021, 7, 12), [72540, None, -250000, None, None]
) # Negative
assertRow(
data[73], datetime.datetime(2021, 7, 30), [None, 12000, None, 12000]
data[73], datetime.datetime(2021, 7, 30), [None, 12000, None, 12000, None]
) # R = 5, combined: two response data items with same, date, same value, different manufacturer
assertRow(
data[123], datetime.datetime(2022, 3, 1), [None, None, None, None, 36000]
) # Novavax

self.assertDatesIncreaseSince(data, datetime.datetime(2020, 12, 26))

Expand Down Expand Up @@ -273,25 +279,47 @@ def test_vaccinations_by_manufacturer_used(self):

def assertRow(row, expected_date, expected):
print(row, expected)
expected_pfizer, expected_moderna, expected_az, expected_janssen = expected
(
expected_pfizer,
expected_moderna,
expected_az,
expected_janssen,
expected_novavax,
) = expected
self.assertEqual(row.date, expected_date)
self.assertAlmostEqual(row.pfizer, expected_pfizer, delta=150)
self.assertAlmostEqual(row.moderna, expected_moderna, delta=50)
self.assertAlmostEqual(row.az, expected_az, delta=50)
self.assertAlmostEqual(row.janssen, expected_janssen, delta=50)
self.assertAlmostEqual(row.novavax, expected_novavax, delta=50)

assertRow(data[20], datetime.datetime(2021, 1, 16), [323, None, None, None])
assertRow(data[23], datetime.datetime(2021, 1, 19), [2119, 66, None, None])
assertRow(data[33], datetime.datetime(2021, 1, 29), [4601, 1, None, None])
assertRow(data[38], datetime.datetime(2021, 2, 3), [4854, None, None, None])
assertRow(data[42], datetime.datetime(2021, 2, 7), [None, None, None, None])
assertRow(data[50], datetime.datetime(2021, 2, 15), [28, 40, 18, None])
assertRow(data[79], datetime.datetime(2021, 3, 16), [609, 452, None, None])
assertRow(data[98], datetime.datetime(2021, 4, 4), [None, 1594, None, None])
assertRow(data[99], datetime.datetime(2021, 4, 5), [1, None, None, None])
assertRow(data[120], datetime.datetime(2021, 4, 26), [1, None, 381, None])
assertRow(data[134], datetime.datetime(2021, 5, 10), [46, 141, 2080, 717])
assertRow(data[290], datetime.datetime(2021, 10, 13), [5192, 438, 4, None])
assertRow(
data[20], datetime.datetime(2021, 1, 16), [323, None, None, None, None]
)
assertRow(
data[23], datetime.datetime(2021, 1, 19), [2119, 66, None, None, None]
)
assertRow(data[33], datetime.datetime(2021, 1, 29), [4601, 1, None, None, None])
assertRow(
data[38], datetime.datetime(2021, 2, 3), [4854, None, None, None, None]
)
assertRow(
data[42], datetime.datetime(2021, 2, 7), [None, None, None, None, None]
)
assertRow(data[50], datetime.datetime(2021, 2, 15), [28, 40, 18, None, None])
assertRow(
data[79], datetime.datetime(2021, 3, 16), [609, 452, None, None, None]
)
assertRow(
data[98], datetime.datetime(2021, 4, 4), [None, 1594, None, None, None]
)
assertRow(data[99], datetime.datetime(2021, 4, 5), [1, None, None, None, None])
assertRow(data[120], datetime.datetime(2021, 4, 26), [1, None, 381, None, None])
assertRow(data[134], datetime.datetime(2021, 5, 10), [46, 141, 2080, 717, None])
assertRow(
data[290], datetime.datetime(2021, 10, 13), [5192, 438, 4, None, None]
)
assertRow(data[431], datetime.datetime(2022, 3, 3), [743, 15, None, None, 1])

for row in data:
print(row)
Expand All @@ -308,6 +336,11 @@ def assertRow(row, expected_date, expected):
f"Too early for Janssen usage: {row}",
)

self.assertTrue(
row.date >= datetime.datetime(2022, 3, 1, 0, 0) or row.novavax == None,
f"Too early for Novavax usage: {row}",
)

# check for absurdly high numbers (eg leaked timestamps)
if row.pfizer is not None:
self.assertLess(row.pfizer, 100000, row)
Expand Down

0 comments on commit 3386585

Please sign in to comment.