def revise_plants_status(current_pot: Pot, new_plants_status: dict): revised_plants_status = {} new_plants_objs: Plants = Plants.parse_obj(new_plants_status) old_plants_objs: Plants = current_pot.session.plants # Fields are ordered https://pydantic-docs.helpmanual.io/usage/models/#field-ordering for old_plant_tuple, new_plant_tuple in zip(old_plants_objs, new_plants_objs): old_plant: Plant = old_plant_tuple[1] new_plant: Plant = new_plant_tuple[1] ring_colour = old_plant.ringColour # NOTE: After harvest, slot will be empty so None. For UT, no new seeds after harvest, so keep it at None # TODO: Ideally to remove this once UI allows users to indicate to plant new seed if old_plant.growthStage == None: new_plant = Plant(growthStage=None, ringColour=new_plant.ringColour) # TODO: Future work: start time of seed planting based on user indication in app, not session start time # NOTE: Add replace(tzinfo=None) to avoid error "can't subtract offset-naive and offset-aware datetimes" elif is_seed(datetime.utcnow(), current_pot.session.sessionStartTime.replace(tzinfo=None)): new_plant.growthStage = GrowthStage.seed elif is_sprouting(new_plant.growthStage, datetime.utcnow(), current_pot.session.sessionStartTime.replace(tzinfo=None)): new_plant.growthStage = GrowthStage.sprouting else: logger.info("No revision to plants status needed") revised_plants_status[ring_colour] = new_plant.dict() return revised_plants_status
def get_harvests_completed(current_pot: Pot, new_plants_status: dict): harvest_count = 0 after_harvest_plants_status = {} new_plants_objs: Plants = Plants.parse_obj(new_plants_status) old_plants_objs: Plants = current_pot.session.plants # Fields are ordered https://pydantic-docs.helpmanual.io/usage/models/#field-ordering for old_plant_tuple, new_plant_tuple in zip(old_plants_objs, new_plants_objs): old_plant: Plant = old_plant_tuple[1] new_plant: Plant = new_plant_tuple[1] ring_colour = old_plant.ringColour if is_harvested(old_plant, new_plant): # NOTE: After harvest, slot will be empty so None, since CV can't differentiate null, seed and sprout new_plant = Plant(growthStage=None, ringColour=new_plant.ringColour) harvest_count += 1 after_harvest_plants_status[ring_colour] = new_plant.dict() return harvest_count, after_harvest_plants_status