refactor customer interface to attributes
This commit is contained in:
35
src/customer_attributes.py
Normal file
35
src/customer_attributes.py
Normal file
@@ -0,0 +1,35 @@
|
||||
from pydantic import BaseModel
|
||||
|
||||
from src.models import KeypadSize
|
||||
from src.utils import generate_random_nonrepeating_list
|
||||
|
||||
|
||||
class CustomerAttributes(BaseModel):
|
||||
attr_vals: list[int]
|
||||
set_vals: list[int]
|
||||
keypad_size: KeypadSize
|
||||
|
||||
@staticmethod
|
||||
def new(keypad_size: KeypadSize):
|
||||
assert (keypad_size.numb_of_keys <= 256)
|
||||
assert (keypad_size.attrs_per_key <= 256)
|
||||
|
||||
return CustomerAttributes(
|
||||
attr_vals=generate_random_nonrepeating_list(keypad_size.numb_of_attrs),
|
||||
set_vals=generate_random_nonrepeating_list(keypad_size.attrs_per_key),
|
||||
keypad_size=keypad_size,
|
||||
)
|
||||
|
||||
def renew(self):
|
||||
self.attr_vals = generate_random_nonrepeating_list(self.keypad_size.numb_of_attrs)
|
||||
self.set_vals = generate_random_nonrepeating_list(self.keypad_size.attrs_per_key)
|
||||
|
||||
def get_attr_set_val(self, attr: int) -> int:
|
||||
assert (attr in self.attr_vals)
|
||||
attr_idx = self.attr_vals.index(attr)
|
||||
set_idx = attr_idx % self.keypad_size.attrs_per_key
|
||||
return self.set_vals[set_idx]
|
||||
|
||||
def get_set_index(self, set_val: int) -> int:
|
||||
assert (set_val in self.set_vals)
|
||||
return self.set_vals.index(set_val)
|
||||
Reference in New Issue
Block a user