kerykeion.kr_types.kr_models
This is part of Kerykeion (C) 2025 Giacomo Battaglia
1# -*- coding: utf-8 -*- 2""" 3 This is part of Kerykeion (C) 2025 Giacomo Battaglia 4""" 5 6 7from typing import Union, Optional 8from typing_extensions import TypedDict 9from pydantic import BaseModel 10from kerykeion.kr_types.kr_literals import AspectName 11 12from kerykeion.kr_types import ( 13 AxialCusps, 14 LunarPhaseEmoji, 15 LunarPhaseName, 16 Planet, 17 Houses, 18 Quality, 19 Element, 20 Sign, 21 ZodiacType, 22 SignNumbers, 23 PointType, 24 SiderealMode, 25 HousesSystemIdentifier, 26 Houses, 27 SignsEmoji, 28 RelationshipScoreDescription, 29 PerspectiveType 30) 31 32 33class SubscriptableBaseModel(BaseModel): 34 """ 35 Pydantic BaseModel with subscriptable support, so you can access the fields as if they were a dictionary. 36 """ 37 38 def __getitem__(self, key): 39 return getattr(self, key) 40 41 def __setitem__(self, key, value): 42 setattr(self, key, value) 43 44 def __delitem__(self, key): 45 delattr(self, key) 46 47 def get(self, key, default = None): 48 return getattr(self, key, default) 49 50 51class LunarPhaseModel(SubscriptableBaseModel): 52 degrees_between_s_m: Union[float, int] 53 moon_phase: int 54 sun_phase: int 55 moon_emoji: LunarPhaseEmoji 56 moon_phase_name: LunarPhaseName 57 58 59class KerykeionPointModel(SubscriptableBaseModel): 60 """ 61 Kerykeion Point Model 62 """ 63 64 name: Union[Planet, Houses, AxialCusps] 65 quality: Quality 66 element: Element 67 sign: Sign 68 sign_num: SignNumbers 69 position: float 70 abs_pos: float 71 emoji: str 72 point_type: PointType 73 house: Optional[Houses] = None 74 retrograde: Optional[bool] = None 75 76 77class AstrologicalSubjectModel(SubscriptableBaseModel): 78 """ 79 Pydantic Model for Astrological Subject 80 """ 81 82 # Data 83 name: str 84 year: int 85 month: int 86 day: int 87 hour: int 88 minute: int 89 city: str 90 nation: str 91 lng: float 92 lat: float 93 tz_str: str 94 zodiac_type: ZodiacType 95 sidereal_mode: Union[SiderealMode, None] 96 houses_system_identifier: HousesSystemIdentifier 97 houses_system_name: str 98 perspective_type: PerspectiveType 99 iso_formatted_local_datetime: str 100 iso_formatted_utc_datetime: str 101 julian_day: float 102 103 # Deprecated properties --> 104 utc_time: float 105 local_time: float 106 # <-- Deprecated properties 107 108 109 # Planets 110 sun: KerykeionPointModel 111 moon: KerykeionPointModel 112 mercury: KerykeionPointModel 113 venus: KerykeionPointModel 114 mars: KerykeionPointModel 115 jupiter: KerykeionPointModel 116 saturn: KerykeionPointModel 117 uranus: KerykeionPointModel 118 neptune: KerykeionPointModel 119 pluto: KerykeionPointModel 120 121 # Axes 122 ascendant: KerykeionPointModel 123 descendant: KerykeionPointModel 124 medium_coeli: KerykeionPointModel 125 imum_coeli: KerykeionPointModel 126 127 # Optional Planets: 128 chiron: Union[KerykeionPointModel, None] 129 mean_lilith: Union[KerykeionPointModel, None] 130 131 # Houses 132 first_house: KerykeionPointModel 133 second_house: KerykeionPointModel 134 third_house: KerykeionPointModel 135 fourth_house: KerykeionPointModel 136 fifth_house: KerykeionPointModel 137 sixth_house: KerykeionPointModel 138 seventh_house: KerykeionPointModel 139 eighth_house: KerykeionPointModel 140 ninth_house: KerykeionPointModel 141 tenth_house: KerykeionPointModel 142 eleventh_house: KerykeionPointModel 143 twelfth_house: KerykeionPointModel 144 145 # Nodes 146 mean_node: KerykeionPointModel 147 true_node: KerykeionPointModel 148 mean_south_node: KerykeionPointModel 149 true_south_node: KerykeionPointModel 150 151 planets_names_list: list[Planet] 152 """Ordered list of available planets names""" 153 154 axial_cusps_names_list: list[AxialCusps] 155 """Ordered list of available axes names""" 156 157 houses_names_list: list[Houses] 158 """Ordered list of houses names""" 159 160 lunar_phase: LunarPhaseModel 161 """Lunar phase model""" 162 163 164class EphemerisDictModel(SubscriptableBaseModel): 165 date: str 166 planets: list[KerykeionPointModel] 167 houses: list[KerykeionPointModel] 168 169 170class AspectModel(SubscriptableBaseModel): 171 p1_name: str 172 p1_abs_pos: float 173 p2_name: str 174 p2_abs_pos: float 175 aspect: str 176 orbit: float 177 aspect_degrees: int 178 diff: float 179 p1: int 180 p2: int 181 182 183class ZodiacSignModel(SubscriptableBaseModel): 184 sign: Sign 185 quality: Quality 186 element: Element 187 emoji: SignsEmoji 188 sign_num: SignNumbers 189 190 191class RelationshipScoreAspectModel(SubscriptableBaseModel): 192 p1_name: str 193 p2_name: str 194 aspect: str 195 orbit: float 196 197 198class RelationshipScoreModel(SubscriptableBaseModel): 199 score_value: int 200 score_description: RelationshipScoreDescription 201 is_destiny_sign: bool 202 aspects: list[RelationshipScoreAspectModel] 203 subjects: list[AstrologicalSubjectModel] 204 205 206class CompositeSubjectModel(SubscriptableBaseModel): 207 """ 208 Pydantic Model for Composite Subject 209 """ 210 211 # Data 212 name: str 213 first_subject: AstrologicalSubjectModel 214 second_subject: AstrologicalSubjectModel 215 composite_chart_type: str 216 217 zodiac_type: ZodiacType 218 sidereal_mode: Union[SiderealMode, None] 219 houses_system_identifier: HousesSystemIdentifier 220 houses_system_name: str 221 perspective_type: PerspectiveType 222 223 # Planets 224 sun: KerykeionPointModel 225 moon: KerykeionPointModel 226 mercury: KerykeionPointModel 227 venus: KerykeionPointModel 228 mars: KerykeionPointModel 229 jupiter: KerykeionPointModel 230 saturn: KerykeionPointModel 231 uranus: KerykeionPointModel 232 neptune: KerykeionPointModel 233 pluto: KerykeionPointModel 234 235 # Axes 236 ascendant: KerykeionPointModel 237 descendant: KerykeionPointModel 238 medium_coeli: KerykeionPointModel 239 imum_coeli: KerykeionPointModel 240 241 # Optional Planets: 242 chiron: Union[KerykeionPointModel, None] 243 mean_lilith: Union[KerykeionPointModel, None] 244 245 # Houses 246 first_house: KerykeionPointModel 247 second_house: KerykeionPointModel 248 third_house: KerykeionPointModel 249 fourth_house: KerykeionPointModel 250 fifth_house: KerykeionPointModel 251 sixth_house: KerykeionPointModel 252 seventh_house: KerykeionPointModel 253 eighth_house: KerykeionPointModel 254 ninth_house: KerykeionPointModel 255 tenth_house: KerykeionPointModel 256 eleventh_house: KerykeionPointModel 257 twelfth_house: KerykeionPointModel 258 259 # Nodes 260 mean_node: KerykeionPointModel 261 true_node: KerykeionPointModel 262 mean_south_node: KerykeionPointModel 263 true_south_node: KerykeionPointModel 264 265 planets_names_list: list[Planet] 266 """Ordered list of available planets names""" 267 268 axial_cusps_names_list: list[AxialCusps] 269 """Ordered list of available axes names""" 270 271 houses_names_list: list[Houses] 272 """Ordered list of houses names""" 273 274 lunar_phase: LunarPhaseModel 275 """Lunar phase model""" 276 277 278class ActiveAspect(TypedDict): 279 name: AspectName 280 orb: int
34class SubscriptableBaseModel(BaseModel): 35 """ 36 Pydantic BaseModel with subscriptable support, so you can access the fields as if they were a dictionary. 37 """ 38 39 def __getitem__(self, key): 40 return getattr(self, key) 41 42 def __setitem__(self, key, value): 43 setattr(self, key, value) 44 45 def __delitem__(self, key): 46 delattr(self, key) 47 48 def get(self, key, default = None): 49 return getattr(self, key, default)
Pydantic BaseModel with subscriptable support, so you can access the fields as if they were a dictionary.
Configuration for the model, should be a dictionary conforming to [ConfigDict
][pydantic.config.ConfigDict].
Inherited Members
- pydantic.main.BaseModel
- BaseModel
- model_extra
- model_fields_set
- model_construct
- model_copy
- model_dump
- model_dump_json
- model_json_schema
- model_parametrized_name
- model_post_init
- model_rebuild
- model_validate
- model_validate_json
- model_validate_strings
- dict
- json
- parse_obj
- parse_raw
- parse_file
- from_orm
- construct
- copy
- schema
- schema_json
- validate
- update_forward_refs
- model_fields
- model_computed_fields
52class LunarPhaseModel(SubscriptableBaseModel): 53 degrees_between_s_m: Union[float, int] 54 moon_phase: int 55 sun_phase: int 56 moon_emoji: LunarPhaseEmoji 57 moon_phase_name: LunarPhaseName
Pydantic BaseModel with subscriptable support, so you can access the fields as if they were a dictionary.
Configuration for the model, should be a dictionary conforming to [ConfigDict
][pydantic.config.ConfigDict].
Inherited Members
- pydantic.main.BaseModel
- BaseModel
- model_extra
- model_fields_set
- model_construct
- model_copy
- model_dump
- model_dump_json
- model_json_schema
- model_parametrized_name
- model_post_init
- model_rebuild
- model_validate
- model_validate_json
- model_validate_strings
- dict
- json
- parse_obj
- parse_raw
- parse_file
- from_orm
- construct
- copy
- schema
- schema_json
- validate
- update_forward_refs
- model_fields
- model_computed_fields
60class KerykeionPointModel(SubscriptableBaseModel): 61 """ 62 Kerykeion Point Model 63 """ 64 65 name: Union[Planet, Houses, AxialCusps] 66 quality: Quality 67 element: Element 68 sign: Sign 69 sign_num: SignNumbers 70 position: float 71 abs_pos: float 72 emoji: str 73 point_type: PointType 74 house: Optional[Houses] = None 75 retrograde: Optional[bool] = None
Kerykeion Point Model
Configuration for the model, should be a dictionary conforming to [ConfigDict
][pydantic.config.ConfigDict].
Inherited Members
- pydantic.main.BaseModel
- BaseModel
- model_extra
- model_fields_set
- model_construct
- model_copy
- model_dump
- model_dump_json
- model_json_schema
- model_parametrized_name
- model_post_init
- model_rebuild
- model_validate
- model_validate_json
- model_validate_strings
- dict
- json
- parse_obj
- parse_raw
- parse_file
- from_orm
- construct
- copy
- schema
- schema_json
- validate
- update_forward_refs
- model_fields
- model_computed_fields
78class AstrologicalSubjectModel(SubscriptableBaseModel): 79 """ 80 Pydantic Model for Astrological Subject 81 """ 82 83 # Data 84 name: str 85 year: int 86 month: int 87 day: int 88 hour: int 89 minute: int 90 city: str 91 nation: str 92 lng: float 93 lat: float 94 tz_str: str 95 zodiac_type: ZodiacType 96 sidereal_mode: Union[SiderealMode, None] 97 houses_system_identifier: HousesSystemIdentifier 98 houses_system_name: str 99 perspective_type: PerspectiveType 100 iso_formatted_local_datetime: str 101 iso_formatted_utc_datetime: str 102 julian_day: float 103 104 # Deprecated properties --> 105 utc_time: float 106 local_time: float 107 # <-- Deprecated properties 108 109 110 # Planets 111 sun: KerykeionPointModel 112 moon: KerykeionPointModel 113 mercury: KerykeionPointModel 114 venus: KerykeionPointModel 115 mars: KerykeionPointModel 116 jupiter: KerykeionPointModel 117 saturn: KerykeionPointModel 118 uranus: KerykeionPointModel 119 neptune: KerykeionPointModel 120 pluto: KerykeionPointModel 121 122 # Axes 123 ascendant: KerykeionPointModel 124 descendant: KerykeionPointModel 125 medium_coeli: KerykeionPointModel 126 imum_coeli: KerykeionPointModel 127 128 # Optional Planets: 129 chiron: Union[KerykeionPointModel, None] 130 mean_lilith: Union[KerykeionPointModel, None] 131 132 # Houses 133 first_house: KerykeionPointModel 134 second_house: KerykeionPointModel 135 third_house: KerykeionPointModel 136 fourth_house: KerykeionPointModel 137 fifth_house: KerykeionPointModel 138 sixth_house: KerykeionPointModel 139 seventh_house: KerykeionPointModel 140 eighth_house: KerykeionPointModel 141 ninth_house: KerykeionPointModel 142 tenth_house: KerykeionPointModel 143 eleventh_house: KerykeionPointModel 144 twelfth_house: KerykeionPointModel 145 146 # Nodes 147 mean_node: KerykeionPointModel 148 true_node: KerykeionPointModel 149 mean_south_node: KerykeionPointModel 150 true_south_node: KerykeionPointModel 151 152 planets_names_list: list[Planet] 153 """Ordered list of available planets names""" 154 155 axial_cusps_names_list: list[AxialCusps] 156 """Ordered list of available axes names""" 157 158 houses_names_list: list[Houses] 159 """Ordered list of houses names""" 160 161 lunar_phase: LunarPhaseModel 162 """Lunar phase model"""
Pydantic Model for Astrological Subject
Ordered list of available planets names
Ordered list of available axes names
Ordered list of houses names
Configuration for the model, should be a dictionary conforming to [ConfigDict
][pydantic.config.ConfigDict].
Inherited Members
- pydantic.main.BaseModel
- BaseModel
- model_extra
- model_fields_set
- model_construct
- model_copy
- model_dump
- model_dump_json
- model_json_schema
- model_parametrized_name
- model_post_init
- model_rebuild
- model_validate
- model_validate_json
- model_validate_strings
- dict
- json
- parse_obj
- parse_raw
- parse_file
- from_orm
- construct
- copy
- schema
- schema_json
- validate
- update_forward_refs
- model_fields
- model_computed_fields
165class EphemerisDictModel(SubscriptableBaseModel): 166 date: str 167 planets: list[KerykeionPointModel] 168 houses: list[KerykeionPointModel]
Pydantic BaseModel with subscriptable support, so you can access the fields as if they were a dictionary.
Configuration for the model, should be a dictionary conforming to [ConfigDict
][pydantic.config.ConfigDict].
Inherited Members
- pydantic.main.BaseModel
- BaseModel
- model_extra
- model_fields_set
- model_construct
- model_copy
- model_dump
- model_dump_json
- model_json_schema
- model_parametrized_name
- model_post_init
- model_rebuild
- model_validate
- model_validate_json
- model_validate_strings
- dict
- json
- parse_obj
- parse_raw
- parse_file
- from_orm
- construct
- copy
- schema
- schema_json
- validate
- update_forward_refs
- model_fields
- model_computed_fields
171class AspectModel(SubscriptableBaseModel): 172 p1_name: str 173 p1_abs_pos: float 174 p2_name: str 175 p2_abs_pos: float 176 aspect: str 177 orbit: float 178 aspect_degrees: int 179 diff: float 180 p1: int 181 p2: int
Pydantic BaseModel with subscriptable support, so you can access the fields as if they were a dictionary.
Configuration for the model, should be a dictionary conforming to [ConfigDict
][pydantic.config.ConfigDict].
Inherited Members
- pydantic.main.BaseModel
- BaseModel
- model_extra
- model_fields_set
- model_construct
- model_copy
- model_dump
- model_dump_json
- model_json_schema
- model_parametrized_name
- model_post_init
- model_rebuild
- model_validate
- model_validate_json
- model_validate_strings
- dict
- json
- parse_obj
- parse_raw
- parse_file
- from_orm
- construct
- copy
- schema
- schema_json
- validate
- update_forward_refs
- model_fields
- model_computed_fields
184class ZodiacSignModel(SubscriptableBaseModel): 185 sign: Sign 186 quality: Quality 187 element: Element 188 emoji: SignsEmoji 189 sign_num: SignNumbers
Pydantic BaseModel with subscriptable support, so you can access the fields as if they were a dictionary.
Configuration for the model, should be a dictionary conforming to [ConfigDict
][pydantic.config.ConfigDict].
Inherited Members
- pydantic.main.BaseModel
- BaseModel
- model_extra
- model_fields_set
- model_construct
- model_copy
- model_dump
- model_dump_json
- model_json_schema
- model_parametrized_name
- model_post_init
- model_rebuild
- model_validate
- model_validate_json
- model_validate_strings
- dict
- json
- parse_obj
- parse_raw
- parse_file
- from_orm
- construct
- copy
- schema
- schema_json
- validate
- update_forward_refs
- model_fields
- model_computed_fields
192class RelationshipScoreAspectModel(SubscriptableBaseModel): 193 p1_name: str 194 p2_name: str 195 aspect: str 196 orbit: float
Pydantic BaseModel with subscriptable support, so you can access the fields as if they were a dictionary.
Configuration for the model, should be a dictionary conforming to [ConfigDict
][pydantic.config.ConfigDict].
Inherited Members
- pydantic.main.BaseModel
- BaseModel
- model_extra
- model_fields_set
- model_construct
- model_copy
- model_dump
- model_dump_json
- model_json_schema
- model_parametrized_name
- model_post_init
- model_rebuild
- model_validate
- model_validate_json
- model_validate_strings
- dict
- json
- parse_obj
- parse_raw
- parse_file
- from_orm
- construct
- copy
- schema
- schema_json
- validate
- update_forward_refs
- model_fields
- model_computed_fields
199class RelationshipScoreModel(SubscriptableBaseModel): 200 score_value: int 201 score_description: RelationshipScoreDescription 202 is_destiny_sign: bool 203 aspects: list[RelationshipScoreAspectModel] 204 subjects: list[AstrologicalSubjectModel]
Pydantic BaseModel with subscriptable support, so you can access the fields as if they were a dictionary.
Configuration for the model, should be a dictionary conforming to [ConfigDict
][pydantic.config.ConfigDict].
Inherited Members
- pydantic.main.BaseModel
- BaseModel
- model_extra
- model_fields_set
- model_construct
- model_copy
- model_dump
- model_dump_json
- model_json_schema
- model_parametrized_name
- model_post_init
- model_rebuild
- model_validate
- model_validate_json
- model_validate_strings
- dict
- json
- parse_obj
- parse_raw
- parse_file
- from_orm
- construct
- copy
- schema
- schema_json
- validate
- update_forward_refs
- model_fields
- model_computed_fields
207class CompositeSubjectModel(SubscriptableBaseModel): 208 """ 209 Pydantic Model for Composite Subject 210 """ 211 212 # Data 213 name: str 214 first_subject: AstrologicalSubjectModel 215 second_subject: AstrologicalSubjectModel 216 composite_chart_type: str 217 218 zodiac_type: ZodiacType 219 sidereal_mode: Union[SiderealMode, None] 220 houses_system_identifier: HousesSystemIdentifier 221 houses_system_name: str 222 perspective_type: PerspectiveType 223 224 # Planets 225 sun: KerykeionPointModel 226 moon: KerykeionPointModel 227 mercury: KerykeionPointModel 228 venus: KerykeionPointModel 229 mars: KerykeionPointModel 230 jupiter: KerykeionPointModel 231 saturn: KerykeionPointModel 232 uranus: KerykeionPointModel 233 neptune: KerykeionPointModel 234 pluto: KerykeionPointModel 235 236 # Axes 237 ascendant: KerykeionPointModel 238 descendant: KerykeionPointModel 239 medium_coeli: KerykeionPointModel 240 imum_coeli: KerykeionPointModel 241 242 # Optional Planets: 243 chiron: Union[KerykeionPointModel, None] 244 mean_lilith: Union[KerykeionPointModel, None] 245 246 # Houses 247 first_house: KerykeionPointModel 248 second_house: KerykeionPointModel 249 third_house: KerykeionPointModel 250 fourth_house: KerykeionPointModel 251 fifth_house: KerykeionPointModel 252 sixth_house: KerykeionPointModel 253 seventh_house: KerykeionPointModel 254 eighth_house: KerykeionPointModel 255 ninth_house: KerykeionPointModel 256 tenth_house: KerykeionPointModel 257 eleventh_house: KerykeionPointModel 258 twelfth_house: KerykeionPointModel 259 260 # Nodes 261 mean_node: KerykeionPointModel 262 true_node: KerykeionPointModel 263 mean_south_node: KerykeionPointModel 264 true_south_node: KerykeionPointModel 265 266 planets_names_list: list[Planet] 267 """Ordered list of available planets names""" 268 269 axial_cusps_names_list: list[AxialCusps] 270 """Ordered list of available axes names""" 271 272 houses_names_list: list[Houses] 273 """Ordered list of houses names""" 274 275 lunar_phase: LunarPhaseModel 276 """Lunar phase model"""
Pydantic Model for Composite Subject
Ordered list of available planets names
Ordered list of available axes names
Ordered list of houses names
Configuration for the model, should be a dictionary conforming to [ConfigDict
][pydantic.config.ConfigDict].
Inherited Members
- pydantic.main.BaseModel
- BaseModel
- model_extra
- model_fields_set
- model_construct
- model_copy
- model_dump
- model_dump_json
- model_json_schema
- model_parametrized_name
- model_post_init
- model_rebuild
- model_validate
- model_validate_json
- model_validate_strings
- dict
- json
- parse_obj
- parse_raw
- parse_file
- from_orm
- construct
- copy
- schema
- schema_json
- validate
- update_forward_refs
- model_fields
- model_computed_fields
Inherited Members
- builtins.dict
- get
- setdefault
- pop
- popitem
- keys
- items
- values
- update
- fromkeys
- clear
- copy