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_ORDERvar NO_ASSIGNMENTvar RANDOMvar 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_userAncestors
Instance variables
var assignment_config : str-
Expand source code
@property def assignment_config(self) -> str: return self._assignment_config var assignment_type : AssignmentType-
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_by : User-
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_user : User-
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_type : PeriodType-
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 ADAPTIVEvar DAILYvar DYNAMIC_REGULARvar HOURLYvar MANUALLYvar MONTHLYvar WEEKLYvar YEARLY