Module pygrocy.data_models.chore

Expand source code
from datetime import datetime
from enum import Enum
from typing import Dict

from pygrocy.base import DataModel
from pygrocy.data_models.user import User
from pygrocy.grocy_api_client import (
    ChoreDetailsResponse,
    CurrentChoreResponse,
    GrocyApiClient,
)


class PeriodType(str, Enum):
    MANUALLY = "manually"
    DYNAMIC_REGULAR = "dynamic-regular"
    DAILY = "daily"
    WEEKLY = "weekly"
    MONTHLY = "monthly"
    YEARLY = "yearly"
    ADAPTIVE = "adaptive"
    HOURLY = "hourly"


class AssignmentType(str, Enum):
    NO_ASSIGNMENT = "no-assignment"
    WHO_LEAST_DID_FIRST = "who-least-did-first"
    RANDOM = "random"
    IN_ALPHABETICAL_ORDER = "in-alphabetical-order"


class Chore(DataModel):
    def __init__(self, response):
        if isinstance(response, CurrentChoreResponse):
            self._init_from_CurrentChoreResponse(response)
        elif isinstance(response, ChoreDetailsResponse):
            self._init_from_ChoreDetailsResponse(response)

    # noinspection PyPep8Naming
    def _init_from_CurrentChoreResponse(self, response: CurrentChoreResponse):
        self._id = response.chore_id
        self._last_tracked_time = response.last_tracked_time
        self._next_estimated_execution_time = response.next_estimated_execution_time
        self._name = None
        self._last_done_by = None

    # noinspection PyPep8Naming
    def _init_from_ChoreDetailsResponse(self, response: ChoreDetailsResponse):
        chore_data = response.chore
        self._id = chore_data.id
        self._name = chore_data.name
        self._description = chore_data.description

        if chore_data.period_type is not None:
            self._period_type = PeriodType(chore_data.period_type)
        else:
            self._period_type = None

        self._period_config = chore_data.period_config
        self._period_days = chore_data.period_days
        self._track_date_only = chore_data.track_date_only
        self._rollover = chore_data.rollover

        if chore_data.assignment_type is not None:
            self._assignment_type = AssignmentType(chore_data.assignment_type)
        else:
            self._assignment_type = None

        self._assignment_config = chore_data.assignment_config
        self._next_execution_assigned_to_user_id = (
            chore_data.next_execution_assigned_to_user_id
        )
        self._userfields = chore_data.userfields

        self._last_tracked_time = response.last_tracked
        self._next_estimated_execution_time = response.next_estimated_execution_time
        if response.last_done_by is not None:
            self._last_done_by = User(response.last_done_by)
        else:
            self._last_done_by = None
        self._track_count = response.track_count
        if response.next_execution_assigned_user is not None:
            self._next_execution_assigned_user = User(
                response.next_execution_assigned_user
            )
        else:
            self._next_execution_assigned_user = None

    def get_details(self, api_client: GrocyApiClient):
        details = api_client.get_chore(self.id)
        self._init_from_ChoreDetailsResponse(details)

    @property
    def id(self) -> int:
        return self._id

    @property
    def name(self) -> str:
        return self._name

    @property
    def description(self) -> str:
        return self._description

    @property
    def period_type(self) -> PeriodType:
        return self._period_type

    @property
    def period_config(self) -> str:
        return self._period_config

    @property
    def period_days(self) -> int:
        return self._period_days

    @property
    def track_date_only(self) -> bool:
        return self._track_date_only

    @property
    def rollover(self) -> bool:
        return self._rollover

    @property
    def assignment_type(self) -> AssignmentType:
        return self._assignment_type

    @property
    def assignment_config(self) -> str:
        return self._assignment_config

    @property
    def next_execution_assigned_to_user_id(self) -> int:
        return self._next_execution_assigned_to_user_id

    @property
    def userfields(self) -> Dict[str, str]:
        return self._userfields

    @property
    def last_tracked_time(self) -> datetime:
        return self._last_tracked_time

    @property
    def next_estimated_execution_time(self) -> datetime:
        return self._next_estimated_execution_time

    @property
    def last_done_by(self) -> User:
        return self._last_done_by

    @property
    def track_count(self) -> int:
        return self._track_count

    @property
    def next_execution_assigned_user(self) -> User:
        return self._next_execution_assigned_user

Classes

class AssignmentType (value, names=None, *, module=None, qualname=None, type=None, start=1)

An enumeration.

Expand source code
class AssignmentType(str, Enum):
    NO_ASSIGNMENT = "no-assignment"
    WHO_LEAST_DID_FIRST = "who-least-did-first"
    RANDOM = "random"
    IN_ALPHABETICAL_ORDER = "in-alphabetical-order"

Ancestors

  • builtins.str
  • enum.Enum

Class variables

var IN_ALPHABETICAL_ORDER
var NO_ASSIGNMENT
var RANDOM
var WHO_LEAST_DID_FIRST
class Chore (response)
Expand source code
class Chore(DataModel):
    def __init__(self, response):
        if isinstance(response, CurrentChoreResponse):
            self._init_from_CurrentChoreResponse(response)
        elif isinstance(response, ChoreDetailsResponse):
            self._init_from_ChoreDetailsResponse(response)

    # noinspection PyPep8Naming
    def _init_from_CurrentChoreResponse(self, response: CurrentChoreResponse):
        self._id = response.chore_id
        self._last_tracked_time = response.last_tracked_time
        self._next_estimated_execution_time = response.next_estimated_execution_time
        self._name = None
        self._last_done_by = None

    # noinspection PyPep8Naming
    def _init_from_ChoreDetailsResponse(self, response: ChoreDetailsResponse):
        chore_data = response.chore
        self._id = chore_data.id
        self._name = chore_data.name
        self._description = chore_data.description

        if chore_data.period_type is not None:
            self._period_type = PeriodType(chore_data.period_type)
        else:
            self._period_type = None

        self._period_config = chore_data.period_config
        self._period_days = chore_data.period_days
        self._track_date_only = chore_data.track_date_only
        self._rollover = chore_data.rollover

        if chore_data.assignment_type is not None:
            self._assignment_type = AssignmentType(chore_data.assignment_type)
        else:
            self._assignment_type = None

        self._assignment_config = chore_data.assignment_config
        self._next_execution_assigned_to_user_id = (
            chore_data.next_execution_assigned_to_user_id
        )
        self._userfields = chore_data.userfields

        self._last_tracked_time = response.last_tracked
        self._next_estimated_execution_time = response.next_estimated_execution_time
        if response.last_done_by is not None:
            self._last_done_by = User(response.last_done_by)
        else:
            self._last_done_by = None
        self._track_count = response.track_count
        if response.next_execution_assigned_user is not None:
            self._next_execution_assigned_user = User(
                response.next_execution_assigned_user
            )
        else:
            self._next_execution_assigned_user = None

    def get_details(self, api_client: GrocyApiClient):
        details = api_client.get_chore(self.id)
        self._init_from_ChoreDetailsResponse(details)

    @property
    def id(self) -> int:
        return self._id

    @property
    def name(self) -> str:
        return self._name

    @property
    def description(self) -> str:
        return self._description

    @property
    def period_type(self) -> PeriodType:
        return self._period_type

    @property
    def period_config(self) -> str:
        return self._period_config

    @property
    def period_days(self) -> int:
        return self._period_days

    @property
    def track_date_only(self) -> bool:
        return self._track_date_only

    @property
    def rollover(self) -> bool:
        return self._rollover

    @property
    def assignment_type(self) -> AssignmentType:
        return self._assignment_type

    @property
    def assignment_config(self) -> str:
        return self._assignment_config

    @property
    def next_execution_assigned_to_user_id(self) -> int:
        return self._next_execution_assigned_to_user_id

    @property
    def userfields(self) -> Dict[str, str]:
        return self._userfields

    @property
    def last_tracked_time(self) -> datetime:
        return self._last_tracked_time

    @property
    def next_estimated_execution_time(self) -> datetime:
        return self._next_estimated_execution_time

    @property
    def last_done_by(self) -> User:
        return self._last_done_by

    @property
    def track_count(self) -> int:
        return self._track_count

    @property
    def next_execution_assigned_user(self) -> User:
        return self._next_execution_assigned_user

Ancestors

Instance variables

var assignment_config : str
Expand source code
@property
def assignment_config(self) -> str:
    return self._assignment_config
var assignment_typeAssignmentType
Expand source code
@property
def assignment_type(self) -> AssignmentType:
    return self._assignment_type
var description : str
Expand source code
@property
def description(self) -> str:
    return self._description
var id : int
Expand source code
@property
def id(self) -> int:
    return self._id
var last_done_byUser
Expand source code
@property
def last_done_by(self) -> User:
    return self._last_done_by
var last_tracked_time : datetime.datetime
Expand source code
@property
def last_tracked_time(self) -> datetime:
    return self._last_tracked_time
var name : str
Expand source code
@property
def name(self) -> str:
    return self._name
var next_estimated_execution_time : datetime.datetime
Expand source code
@property
def next_estimated_execution_time(self) -> datetime:
    return self._next_estimated_execution_time
var next_execution_assigned_to_user_id : int
Expand source code
@property
def next_execution_assigned_to_user_id(self) -> int:
    return self._next_execution_assigned_to_user_id
var next_execution_assigned_userUser
Expand source code
@property
def next_execution_assigned_user(self) -> User:
    return self._next_execution_assigned_user
var period_config : str
Expand source code
@property
def period_config(self) -> str:
    return self._period_config
var period_days : int
Expand source code
@property
def period_days(self) -> int:
    return self._period_days
var period_typePeriodType
Expand source code
@property
def period_type(self) -> PeriodType:
    return self._period_type
var rollover : bool
Expand source code
@property
def rollover(self) -> bool:
    return self._rollover
var track_count : int
Expand source code
@property
def track_count(self) -> int:
    return self._track_count
var track_date_only : bool
Expand source code
@property
def track_date_only(self) -> bool:
    return self._track_date_only
var userfields : Dict[str, str]
Expand source code
@property
def userfields(self) -> Dict[str, str]:
    return self._userfields

Methods

def get_details(self, api_client: GrocyApiClient)
Expand source code
def get_details(self, api_client: GrocyApiClient):
    details = api_client.get_chore(self.id)
    self._init_from_ChoreDetailsResponse(details)
class PeriodType (value, names=None, *, module=None, qualname=None, type=None, start=1)

An enumeration.

Expand source code
class PeriodType(str, Enum):
    MANUALLY = "manually"
    DYNAMIC_REGULAR = "dynamic-regular"
    DAILY = "daily"
    WEEKLY = "weekly"
    MONTHLY = "monthly"
    YEARLY = "yearly"
    ADAPTIVE = "adaptive"
    HOURLY = "hourly"

Ancestors

  • builtins.str
  • enum.Enum

Class variables

var ADAPTIVE
var DAILY
var DYNAMIC_REGULAR
var HOURLY
var MANUALLY
var MONTHLY
var WEEKLY
var YEARLY