Esempio n. 1
0
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
Esempio n. 2
0
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