Schemas
All response models are frozen Pydantic v2 models based on ForecastModel, which configures
extra="allow", populate_by_name=True, str_strip_whitespace=True, and frozen=True. The
extra="allow" setting means any additional fields returned by the API are accessible as attributes
even if they aren't explicitly declared.
Base model
ForecastModel
Bases: BaseModel
model_config
class-attribute
instance-attribute
model_config = ConfigDict (
extra = "allow" ,
populate_by_name = True ,
str_strip_whitespace = True ,
frozen = True ,
)
Resources
Assignment
Bases: ForecastModel
start_date
instance-attribute
end_date
instance-attribute
allocation
class-attribute
instance-attribute
allocation : int | None = None
notes
class-attribute
instance-attribute
updated_at
instance-attribute
updated_by_id
class-attribute
instance-attribute
updated_by_id : int | None = None
project_id
class-attribute
instance-attribute
project_id : int | None = None
person_id
class-attribute
instance-attribute
person_id : int | None = None
placeholder_id
class-attribute
instance-attribute
placeholder_id : int | None = None
repeated_assignment_set_id
class-attribute
instance-attribute
repeated_assignment_set_id : int | None = None
harvest_project_task_id
class-attribute
instance-attribute
harvest_project_task_id : int | None = None
active_on_days_off
class-attribute
instance-attribute
active_on_days_off : bool = False
Client
Bases: ForecastModel
harvest_id
class-attribute
instance-attribute
harvest_id : int | None = None
archived
class-attribute
instance-attribute
updated_at
instance-attribute
updated_by_id
class-attribute
instance-attribute
updated_by_id : int | None = None
Milestone
Bases: ForecastModel
updated_at
instance-attribute
updated_by_id
class-attribute
instance-attribute
updated_by_id : int | None = None
project_id
class-attribute
instance-attribute
project_id : int | None = None
Person
Bases: ForecastModel
first_name
instance-attribute
last_name
instance-attribute
email
class-attribute
instance-attribute
login
class-attribute
instance-attribute
admin
class-attribute
instance-attribute
archived
class-attribute
instance-attribute
subscribed
class-attribute
instance-attribute
avatar_url
class-attribute
instance-attribute
avatar_url : str | None = None
teams
class-attribute
instance-attribute
teams : list [ str ] = Field ( default_factory = list [ str ])
updated_at
instance-attribute
updated_by_id
class-attribute
instance-attribute
updated_by_id : int | None = None
harvest_user_id
class-attribute
instance-attribute
harvest_user_id : int | None = None
weekly_capacity
class-attribute
instance-attribute
weekly_capacity : int | None = None
working_days
class-attribute
instance-attribute
working_days : WorkingDays | None = None
color_blind
class-attribute
instance-attribute
color_blind : bool = False
roles
class-attribute
instance-attribute
roles : list [ str ] = Field ( default_factory = list [ str ])
invitation_code_id
class-attribute
instance-attribute
invitation_code_id : int | None = None
personal_feed_token_id
class-attribute
instance-attribute
personal_feed_token_id : int | None = None
Placeholder
Bases: ForecastModel
archived
class-attribute
instance-attribute
teams
class-attribute
instance-attribute
teams : list [ str ] = Field ( default_factory = list [ str ])
roles
class-attribute
instance-attribute
roles : list [ str ] = Field ( default_factory = list [ str ])
updated_at
instance-attribute
updated_by_id
class-attribute
instance-attribute
updated_by_id : int | None = None
Project
Bases: ForecastModel
color
class-attribute
instance-attribute
code
class-attribute
instance-attribute
notes
class-attribute
instance-attribute
start_date
class-attribute
instance-attribute
start_date : date | None = None
end_date
class-attribute
instance-attribute
end_date : date | None = None
harvest_id
class-attribute
instance-attribute
harvest_id : int | None = None
archived
class-attribute
instance-attribute
budget_by
class-attribute
instance-attribute
budget_by : str | None = None
budget_is_monthly
class-attribute
instance-attribute
budget_is_monthly : bool = False
updated_at
instance-attribute
updated_by_id
class-attribute
instance-attribute
updated_by_id : int | None = None
client_id
class-attribute
instance-attribute
client_id : int | None = None
tags : list [ str ] = Field ( default_factory = list [ str ])
Role
Bases: ForecastModel
placeholder_ids
class-attribute
instance-attribute
placeholder_ids : list [ int ] = Field (
default_factory = list [ int ]
)
person_ids
class-attribute
instance-attribute
person_ids : list [ int ] = Field ( default_factory = list [ int ])
harvest_role_id
class-attribute
instance-attribute
harvest_role_id : int | None = None
RepeatedAssignmentSet
Bases: ForecastModel
first_start_date
class-attribute
instance-attribute
first_start_date : date | None = None
last_end_date
class-attribute
instance-attribute
last_end_date : date | None = None
assignment_ids
class-attribute
instance-attribute
assignment_ids : list [ int ] = Field ( default_factory = list [ int ])
Assignment filter and request
AssignmentFilter
dataclass
AssignmentFilter (
project_id : int | None = None ,
person_id : int | None = None ,
start_date : date | None = None ,
end_date : date | None = None ,
repeated_assignment_set_id : int | None = None ,
state : str | None = None ,
)
project_id
class-attribute
instance-attribute
project_id : int | None = None
person_id
class-attribute
instance-attribute
person_id : int | None = None
start_date
class-attribute
instance-attribute
start_date : date | None = None
end_date
class-attribute
instance-attribute
end_date : date | None = None
repeated_assignment_set_id
class-attribute
instance-attribute
repeated_assignment_set_id : int | None = None
state
class-attribute
instance-attribute
to_params
to_params () -> dict [ str , str ]
Source code in src/harvest_forecast/schemas.py
def to_params ( self ) -> dict [ str , str ]:
params : dict [ str , str ] = {}
for f in fields ( self ):
value = getattr ( self , f . name )
if value is None :
continue
if isinstance ( value , date ):
params [ f . name ] = value . isoformat ()
else :
params [ f . name ] = str ( value )
return params
AssignmentRequest
dataclass
AssignmentRequest (
start_date : date ,
end_date : date ,
project_id : int ,
person_id : int ,
allocation : int | None = None ,
notes : str | None = None ,
placeholder_id : int | None = None ,
repeated_assignment_set_id : int | None = None ,
active_on_days_off : bool = False ,
harvest_project_task_id : int | None = None ,
)
start_date
instance-attribute
end_date
instance-attribute
project_id
instance-attribute
person_id
instance-attribute
allocation
class-attribute
instance-attribute
allocation : int | None = None
notes
class-attribute
instance-attribute
placeholder_id
class-attribute
instance-attribute
placeholder_id : int | None = None
repeated_assignment_set_id
class-attribute
instance-attribute
repeated_assignment_set_id : int | None = None
active_on_days_off
class-attribute
instance-attribute
active_on_days_off : bool = False
harvest_project_task_id
class-attribute
instance-attribute
harvest_project_task_id : int | None = None
to_payload
to_payload () -> dict [ str , Any ]
Source code in src/harvest_forecast/schemas.py
def to_payload ( self ) -> dict [ str , Any ]:
payload : dict [ str , Any ] = {
"start_date" : self . start_date . isoformat (),
"end_date" : self . end_date . isoformat (),
"project_id" : self . project_id ,
"person_id" : self . person_id ,
"active_on_days_off" : self . active_on_days_off ,
}
if self . allocation is not None :
payload [ "allocation" ] = self . allocation
if self . notes is not None :
payload [ "notes" ] = self . notes
if self . placeholder_id is not None :
payload [ "placeholder_id" ] = self . placeholder_id
if self . repeated_assignment_set_id is not None :
payload [ "repeated_assignment_set_id" ] = self . repeated_assignment_set_id
if self . harvest_project_task_id is not None :
payload [ "harvest_project_task_id" ] = self . harvest_project_task_id
return { "assignment" : payload }
CurrentUser
Bases: ForecastModel
account_ids
class-attribute
instance-attribute
account_ids : list [ int ] = Field ( default_factory = list [ int ])
identity_user_id
class-attribute
instance-attribute
identity_user_id : int | None = None
Account
Bases: ForecastModel
weekly_capacity
class-attribute
instance-attribute
weekly_capacity : int | None = None
color_labels
class-attribute
instance-attribute
color_labels : list [ ColorLabel ] = Field (
default_factory = list [ ColorLabel ]
)
harvest_subdomain
class-attribute
instance-attribute
harvest_subdomain : str | None = None
harvest_link
class-attribute
instance-attribute
harvest_link : str | None = None
saml_sign_in_required
class-attribute
instance-attribute
saml_sign_in_required : bool = False
harvest_name
class-attribute
instance-attribute
harvest_name : str | None = None
weekends_enabled
class-attribute
instance-attribute
weekends_enabled : bool = False
created_at
class-attribute
instance-attribute
created_at : datetime | None = None
creator_first_name
class-attribute
instance-attribute
creator_first_name : str | None = None
creator_last_name
class-attribute
instance-attribute
creator_last_name : str | None = None
billing_status
class-attribute
instance-attribute
billing_status : str | None = None
gdpr
class-attribute
instance-attribute
WorkingDays
Bases: ForecastModel
monday
class-attribute
instance-attribute
tuesday
class-attribute
instance-attribute
wednesday
class-attribute
instance-attribute
thursday
class-attribute
instance-attribute
friday
class-attribute
instance-attribute
saturday
class-attribute
instance-attribute
sunday
class-attribute
instance-attribute
UserConnection
Bases: ForecastModel
person_id
class-attribute
instance-attribute
person_id : int | None = None
last_active_at
class-attribute
instance-attribute
last_active_at : datetime | None = None
Subscription
Subscription
Bases: ForecastModel
interval_unit_amounts
class-attribute
instance-attribute
interval_unit_amounts : (
SubscriptionIntervalUnitAmounts | None
) = None
next_billing_date
class-attribute
instance-attribute
next_billing_date : str | None = None
days_until_next_billing_date
class-attribute
instance-attribute
days_until_next_billing_date : int | None = None
amount
class-attribute
instance-attribute
amount : int | None = None
default_deactivation_at
class-attribute
instance-attribute
default_deactivation_at : datetime | None = None
receipt_recipient
class-attribute
instance-attribute
receipt_recipient : str | None = None
status
class-attribute
instance-attribute
status : str | None = None
purchased_people
class-attribute
instance-attribute
purchased_people : int | None = None
interval
class-attribute
instance-attribute
interval : str | None = None
discounts
class-attribute
instance-attribute
discounts : SubscriptionDiscounts | None = None
placeholder_limit
class-attribute
instance-attribute
placeholder_limit : int | None = None
invoiced
class-attribute
instance-attribute
days_until_due
class-attribute
instance-attribute
days_until_due : int | None = None
balance
class-attribute
instance-attribute
balance : int | None = None
past_due_balance
class-attribute
instance-attribute
past_due_balance : int | None = None
sales_tax_exempt
class-attribute
instance-attribute
sales_tax_exempt : bool = False
sales_tax_percentage
class-attribute
instance-attribute
sales_tax_percentage : float | None = None
converted_at
class-attribute
instance-attribute
converted_at : datetime | None = None
card
class-attribute
instance-attribute
card : SubscriptionCard | None = None
address
class-attribute
instance-attribute
address : SubscriptionAddress | None = None
SubscriptionAddress
Bases: ForecastModel
line_1
class-attribute
instance-attribute
line_1 : str | None = None
line_2
class-attribute
instance-attribute
line_2 : str | None = None
city
class-attribute
instance-attribute
state
class-attribute
instance-attribute
postal_code
class-attribute
instance-attribute
postal_code : str | None = None
country
class-attribute
instance-attribute
country : str | None = None
SubscriptionCard
Bases: ForecastModel
brand
class-attribute
instance-attribute
last_four
class-attribute
instance-attribute
last_four : str | None = None
expiry_month
class-attribute
instance-attribute
expiry_month : int | None = None
expiry_year
class-attribute
instance-attribute
expiry_year : int | None = None
SubscriptionDiscounts
Bases: ForecastModel
monthly_percentage
class-attribute
instance-attribute
monthly_percentage : float = 0.0
yearly_percentage
class-attribute
instance-attribute
yearly_percentage : float = 0.0
SubscriptionIntervalUnitAmounts
Bases: ForecastModel
monthly
class-attribute
instance-attribute
yearly
class-attribute
instance-attribute
Aggregates
RemainingBudgetedHoursItem
Bases: ForecastModel
project_id
instance-attribute
budget_by
class-attribute
instance-attribute
budget_by : str | None = None
budget_is_monthly
class-attribute
instance-attribute
budget_is_monthly : bool = False
hours
class-attribute
instance-attribute
hours : float | None = None
response_code
class-attribute
instance-attribute
response_code : int | None = None
FutureScheduledHoursItem
Bases: ForecastModel
project_id
class-attribute
instance-attribute
project_id : int | None = None
person_id
class-attribute
instance-attribute
person_id : int | None = None
placeholder_id
class-attribute
instance-attribute
placeholder_id : int | None = None
allocation
class-attribute
instance-attribute
allocation : float | None = None
ProjectHeatmapItem
Bases: ForecastModel
start_date
class-attribute
instance-attribute
start_date : str | None = None
end_date
class-attribute
instance-attribute
end_date : str | None = None
PersonHeatmapItem
Bases: ForecastModel
start_date
class-attribute
instance-attribute
start_date : str | None = None
end_date
class-attribute
instance-attribute
end_date : str | None = None
daily_allocation
class-attribute
instance-attribute
daily_allocation : int | None = None
daily_time_off
class-attribute
instance-attribute
daily_time_off : int | None = None
PlaceholderHeatmapItem
Bases: ForecastModel
start_date
class-attribute
instance-attribute
start_date : str | None = None
end_date
class-attribute
instance-attribute
end_date : str | None = None
daily_allocation
class-attribute
instance-attribute
daily_allocation : int | None = None
daily_time_off
class-attribute
instance-attribute
daily_time_off : int | None = None