kerykeion 4.19.0__tar.gz → 4.21.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of kerykeion might be problematic. Click here for more details.

Files changed (40) hide show
  1. {kerykeion-4.19.0 → kerykeion-4.21.0}/PKG-INFO +17 -1
  2. {kerykeion-4.19.0 → kerykeion-4.21.0}/README.md +15 -0
  3. {kerykeion-4.19.0 → kerykeion-4.21.0}/kerykeion/__init__.py +1 -1
  4. {kerykeion-4.19.0 → kerykeion-4.21.0}/kerykeion/aspects/__init__.py +2 -2
  5. {kerykeion-4.19.0 → kerykeion-4.21.0}/kerykeion/aspects/aspects_utils.py +1 -1
  6. {kerykeion-4.19.0 → kerykeion-4.21.0}/kerykeion/aspects/natal_aspects.py +1 -1
  7. {kerykeion-4.19.0 → kerykeion-4.21.0}/kerykeion/aspects/synastry_aspects.py +1 -1
  8. {kerykeion-4.19.0 → kerykeion-4.21.0}/kerykeion/astrological_subject.py +8 -3
  9. {kerykeion-4.19.0 → kerykeion-4.21.0}/kerykeion/charts/__init__.py +2 -2
  10. {kerykeion-4.19.0 → kerykeion-4.21.0}/kerykeion/charts/kerykeion_chart_svg.py +19 -5
  11. {kerykeion-4.19.0 → kerykeion-4.21.0}/kerykeion/fetch_geonames.py +8 -5
  12. {kerykeion-4.19.0 → kerykeion-4.21.0}/kerykeion/kr_types/__init__.py +1 -1
  13. {kerykeion-4.19.0 → kerykeion-4.21.0}/kerykeion/kr_types/kerykeion_exception.py +1 -1
  14. {kerykeion-4.19.0 → kerykeion-4.21.0}/kerykeion/kr_types/kr_literals.py +1 -1
  15. {kerykeion-4.19.0 → kerykeion-4.21.0}/kerykeion/kr_types/kr_models.py +1 -1
  16. {kerykeion-4.19.0 → kerykeion-4.21.0}/kerykeion/kr_types/settings_models.py +1 -1
  17. {kerykeion-4.19.0 → kerykeion-4.21.0}/kerykeion/relationship_score/relationship_score.py +1 -1
  18. {kerykeion-4.19.0 → kerykeion-4.21.0}/kerykeion/relationship_score/relationship_score_factory.py +1 -1
  19. {kerykeion-4.19.0 → kerykeion-4.21.0}/kerykeion/settings/kerykeion_settings.py +1 -1
  20. {kerykeion-4.19.0 → kerykeion-4.21.0}/pyproject.toml +1 -1
  21. {kerykeion-4.19.0 → kerykeion-4.21.0}/LICENSE +0 -0
  22. {kerykeion-4.19.0 → kerykeion-4.21.0}/kerykeion/charts/charts_utils.py +0 -0
  23. {kerykeion-4.19.0 → kerykeion-4.21.0}/kerykeion/charts/draw_planets.py +0 -0
  24. {kerykeion-4.19.0 → kerykeion-4.21.0}/kerykeion/charts/templates/aspect_grid_only.xml +0 -0
  25. {kerykeion-4.19.0 → kerykeion-4.21.0}/kerykeion/charts/templates/chart.xml +0 -0
  26. {kerykeion-4.19.0 → kerykeion-4.21.0}/kerykeion/charts/templates/wheel_only.xml +0 -0
  27. {kerykeion-4.19.0 → kerykeion-4.21.0}/kerykeion/charts/themes/classic.css +0 -0
  28. {kerykeion-4.19.0 → kerykeion-4.21.0}/kerykeion/charts/themes/dark-high-contrast.css +0 -0
  29. {kerykeion-4.19.0 → kerykeion-4.21.0}/kerykeion/charts/themes/dark.css +0 -0
  30. {kerykeion-4.19.0 → kerykeion-4.21.0}/kerykeion/charts/themes/light.css +0 -0
  31. {kerykeion-4.19.0 → kerykeion-4.21.0}/kerykeion/enums.py +0 -0
  32. {kerykeion-4.19.0 → kerykeion-4.21.0}/kerykeion/ephemeris_data.py +0 -0
  33. {kerykeion-4.19.0 → kerykeion-4.21.0}/kerykeion/kr_types/chart_types.py +0 -0
  34. {kerykeion-4.19.0 → kerykeion-4.21.0}/kerykeion/relationship_score/__init__.py +0 -0
  35. {kerykeion-4.19.0 → kerykeion-4.21.0}/kerykeion/report.py +0 -0
  36. {kerykeion-4.19.0 → kerykeion-4.21.0}/kerykeion/settings/__init__.py +0 -0
  37. {kerykeion-4.19.0 → kerykeion-4.21.0}/kerykeion/settings/kr.config.json +0 -0
  38. {kerykeion-4.19.0 → kerykeion-4.21.0}/kerykeion/sweph/README.md +0 -0
  39. {kerykeion-4.19.0 → kerykeion-4.21.0}/kerykeion/sweph/seas_18.se1 +0 -0
  40. {kerykeion-4.19.0 → kerykeion-4.21.0}/kerykeion/utilities.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: kerykeion
3
- Version: 4.19.0
3
+ Version: 4.21.0
4
4
  Summary: A python library for astrology.
5
5
  Home-page: https://www.kerykeion.net/
6
6
  License: AGPL-3.0
@@ -19,6 +19,7 @@ Classifier: Programming Language :: Python :: 3.9
19
19
  Classifier: Programming Language :: Python :: 3.10
20
20
  Classifier: Programming Language :: Python :: 3.11
21
21
  Classifier: Programming Language :: Python :: 3.12
22
+ Classifier: Programming Language :: Python :: 3.13
22
23
  Classifier: Programming Language :: Python :: 3 :: Only
23
24
  Classifier: Topic :: Scientific/Engineering :: Astronomy
24
25
  Classifier: Topic :: Software Development
@@ -396,6 +397,21 @@ Example:
396
397
  ...
397
398
  ```
398
399
 
400
+ In the charts, by default, the mean nodes (M) are displayed, while the true nodes are not displayed.
401
+ To display them, you need to edit the configuration file (kr.config.json).
402
+
403
+ ## JSON Support
404
+
405
+ The astrological subject, which is the base of data used in the library, can be easily serialized to JSON with the `json` method.
406
+
407
+ ```python
408
+ from kerykeion import AstrologicalSubject
409
+
410
+ johnny = AstrologicalSubject("Johnny Depp", 1963, 6, 9, 0, 0, "Owensboro", "US")
411
+
412
+ print(johnny.json(dump=False, indent=2))
413
+ ```
414
+
399
415
  ## Documentation
400
416
 
401
417
  Most of the functions and the classes are self documented by the types and have docstrings.
@@ -359,6 +359,21 @@ Example:
359
359
  ...
360
360
  ```
361
361
 
362
+ In the charts, by default, the mean nodes (M) are displayed, while the true nodes are not displayed.
363
+ To display them, you need to edit the configuration file (kr.config.json).
364
+
365
+ ## JSON Support
366
+
367
+ The astrological subject, which is the base of data used in the library, can be easily serialized to JSON with the `json` method.
368
+
369
+ ```python
370
+ from kerykeion import AstrologicalSubject
371
+
372
+ johnny = AstrologicalSubject("Johnny Depp", 1963, 6, 9, 0, 0, "Owensboro", "US")
373
+
374
+ print(johnny.json(dump=False, indent=2))
375
+ ```
376
+
362
377
  ## Documentation
363
378
 
364
379
  Most of the functions and the classes are self documented by the types and have docstrings.
@@ -1,6 +1,6 @@
1
1
  # -*- coding: utf-8 -*-
2
2
  """
3
- This is part of Kerykeion (C) 2024 Giacomo Battaglia
3
+ This is part of Kerykeion (C) 2025 Giacomo Battaglia
4
4
 
5
5
  .. include:: ../README.md
6
6
  """
@@ -1,8 +1,8 @@
1
1
  # -*- coding: utf-8 -*-
2
2
  """
3
- This is part of Kerykeion (C) 2024 Giacomo Battaglia
3
+ This is part of Kerykeion (C) 2025 Giacomo Battaglia
4
4
 
5
- The aspects module contains the classes and functions for calculating
5
+ The aspects module contains the classes and functions for calculating
6
6
  aspects between planets and points in a chart.
7
7
  """
8
8
 
@@ -1,6 +1,6 @@
1
1
  # -*- coding: utf-8 -*-
2
2
  """
3
- This is part of Kerykeion (C) 2024 Giacomo Battaglia
3
+ This is part of Kerykeion (C) 2025 Giacomo Battaglia
4
4
  """
5
5
  # TODO: Better documentation and unit tests
6
6
 
@@ -1,6 +1,6 @@
1
1
  # -*- coding: utf-8 -*-
2
2
  """
3
- This is part of Kerykeion (C) 2024 Giacomo Battaglia
3
+ This is part of Kerykeion (C) 2025 Giacomo Battaglia
4
4
  """
5
5
 
6
6
  from pathlib import Path
@@ -1,6 +1,6 @@
1
1
  # -*- coding: utf-8 -*-
2
2
  """
3
- This is part of Kerykeion (C) 2024 Giacomo Battaglia
3
+ This is part of Kerykeion (C) 2025 Giacomo Battaglia
4
4
  """
5
5
 
6
6
  from kerykeion import AstrologicalSubject
@@ -1,6 +1,6 @@
1
1
  # -*- coding: utf-8 -*-
2
2
  """
3
- This is part of Kerykeion (C) 2024 Giacomo Battaglia
3
+ This is part of Kerykeion (C) 2025 Giacomo Battaglia
4
4
  """
5
5
 
6
6
  import pytz
@@ -40,6 +40,7 @@ DEFAULT_SIDEREAL_MODE: SiderealMode = "FAGAN_BRADLEY"
40
40
  DEFAULT_HOUSES_SYSTEM_IDENTIFIER: HousesSystemIdentifier = "P"
41
41
  DEFAULT_ZODIAC_TYPE: ZodiacType = "Tropic"
42
42
  DEFAULT_PERSPECTIVE_TYPE: PerspectiveType = "Apparent Geocentric"
43
+ DEFAULT_GEONAMES_CACHE_EXPIRE_AFTER_DAYS = 30
43
44
  GEONAMES_DEFAULT_USERNAME_WARNING = (
44
45
  "\n********\n"
45
46
  "NO GEONAMES USERNAME SET!\n"
@@ -89,6 +90,7 @@ class AstrologicalSubject:
89
90
  - perspective_type (PerspectiveType, optional): The perspective to use for the calculation of the chart.
90
91
  Defaults to "Apparent Geocentric".
91
92
  Available perspectives are visible in the PerspectiveType Literal.
93
+ - cache_expire_after_days (int, optional): The number of days after which the geonames cache will expire. Defaults to 30.
92
94
  - is_dst (Union[None, bool], optional): Specify if the time is in DST. Defaults to None.
93
95
  By default (None), the library will try to guess if the time is in DST or not and raise an AmbiguousTimeError
94
96
  if it can't guess. If you know the time is in DST, set this to True, if you know it's not, set it to False.
@@ -187,6 +189,7 @@ class AstrologicalSubject:
187
189
  sidereal_mode: Union[SiderealMode, None] = None,
188
190
  houses_system_identifier: HousesSystemIdentifier = DEFAULT_HOUSES_SYSTEM_IDENTIFIER,
189
191
  perspective_type: PerspectiveType = DEFAULT_PERSPECTIVE_TYPE,
192
+ cache_expire_after_days: int = DEFAULT_GEONAMES_CACHE_EXPIRE_AFTER_DAYS,
190
193
  is_dst: Union[None, bool] = None,
191
194
  disable_chiron_and_lilith: bool = False
192
195
  ) -> None:
@@ -219,6 +222,7 @@ class AstrologicalSubject:
219
222
  self.sidereal_mode = sidereal_mode
220
223
  self.houses_system_identifier = houses_system_identifier
221
224
  self.perspective_type = perspective_type
225
+ self.cache_expire_after_days = cache_expire_after_days
222
226
  self.is_dst = is_dst
223
227
  self.disable_chiron_and_lilith = disable_chiron_and_lilith
224
228
 
@@ -227,7 +231,7 @@ class AstrologicalSubject:
227
231
  #---------------#
228
232
 
229
233
  # Geonames username
230
- if geonames_username is None and online:
234
+ if geonames_username is None and online and (not lat or not lng or not tz_str):
231
235
  logging.warning(GEONAMES_DEFAULT_USERNAME_WARNING)
232
236
  self.geonames_username = DEFAULT_GEONAMES_USERNAME
233
237
  else:
@@ -381,6 +385,7 @@ class AstrologicalSubject:
381
385
  self.city,
382
386
  self.nation,
383
387
  username=self.geonames_username,
388
+ cache_expire_after_days=self.cache_expire_after_days
384
389
  )
385
390
  self.city_data: dict[str, str] = geonames.get_serialized_data()
386
391
 
@@ -835,5 +840,5 @@ if __name__ == "__main__":
835
840
  print(johnny.mean_lilith)
836
841
 
837
842
  # Offline mode
838
- johnny = AstrologicalSubject("Johnny Depp", 1963, 6, 9, 0, 0, "Owensboro", "US", online=False, tz_str="America/New_York", lng=-87.1111, lat=37.7711)
843
+ johnny = AstrologicalSubject("Johnny Depp", 1963, 6, 9, 0, 0, "Owensboro", "US", online=False, tz_str="America/New_York", lng=-87.1111, lat=37.7711, sidereal_mode="FAGAN_BRADLEY", zodiac_type="Sidereal")
839
844
  print(johnny.json(dump=True, indent=2))
@@ -1,5 +1,5 @@
1
1
  """
2
- This is part of Kerykeion (C) 2024 Giacomo Battaglia
2
+ This is part of Kerykeion (C) 2025 Giacomo Battaglia
3
3
 
4
4
  This modules contains the charts logic for the Kerykeion project.
5
- """
5
+ """
@@ -1,10 +1,11 @@
1
1
  # -*- coding: utf-8 -*-
2
2
  """
3
- This is part of Kerykeion (C) 2024 Giacomo Battaglia
3
+ This is part of Kerykeion (C) 2025 Giacomo Battaglia
4
4
  """
5
5
 
6
6
 
7
7
  import logging
8
+ import swisseph as swe
8
9
  from typing import get_args
9
10
 
10
11
  from kerykeion.settings.kerykeion_settings import get_settings
@@ -408,11 +409,19 @@ class KerykeionChartSVG:
408
409
  else:
409
410
  template_dict["stringTitle"] = self.user.name
410
411
 
411
- # Set bottom left corner information
412
- template_dict["bottomLeft0"] = f"{self.user.zodiac_type if self.user.zodiac_type == 'Tropic' else str(self.user.zodiac_type) + ' ' + str(self.user.sidereal_mode)}"
413
- template_dict["bottomLeft1"] = f"{self.user.houses_system_name}"
412
+ if self.user.zodiac_type == 'Tropic':
413
+ zodiac_info = "Tropical Zodiac"
414
+
415
+ else:
416
+ mode_const = "SIDM_" + self.user.sidereal_mode # type: ignore
417
+ mode_name = swe.get_ayanamsa_name(getattr(swe, mode_const))
418
+ zodiac_info = f"Ayanamsa: {mode_name}"
419
+
420
+ template_dict["bottomLeft0"] = f"{self.user.houses_system_name} Houses"
421
+ template_dict["bottomLeft1"] = zodiac_info
422
+
414
423
  if self.chart_type in ["Natal", "ExternalNatal", "Synastry"]:
415
- template_dict["bottomLeft2"] = f'{self.language_settings.get("lunar_phase", "Lunar Phase")}: {self.language_settings.get("day", "Day")} {self.user.lunar_phase.get("moon_phase", "")}'
424
+ template_dict["bottomLeft2"] = f'{self.language_settings.get("lunar_phase", "Lunar Phase")} {self.language_settings.get("day", "Day").lower()}: {self.user.lunar_phase.get("moon_phase", "")}'
416
425
  template_dict["bottomLeft3"] = f'{self.language_settings.get("lunar_phase", "Lunar Phase")}: {self.user.lunar_phase.moon_phase_name}'
417
426
  template_dict["bottomLeft4"] = f'{self.user.perspective_type}'
418
427
  else:
@@ -905,3 +914,8 @@ if __name__ == "__main__":
905
914
  hindi_subject = AstrologicalSubject("Amitabh Bachchan", 1942, 10, 11, 4, 0, "Allahabad", "IN")
906
915
  hindi_chart = KerykeionChartSVG(hindi_subject, chart_language="HI")
907
916
  hindi_chart.makeSVG()
917
+
918
+ # Kanye West Natal Chart
919
+ kanye_west_subject = AstrologicalSubject("Kanye", 1977, 6, 8, 8, 45, "Atlanta", "US")
920
+ kanye_west_chart = KerykeionChartSVG(kanye_west_subject)
921
+ kanye_west_chart.makeSVG()
@@ -1,10 +1,11 @@
1
1
  # -*- coding: utf-8 -*-
2
2
  """
3
- This is part of Kerykeion (C) 2024 Giacomo Battaglia
3
+ This is part of Kerykeion (C) 2025 Giacomo Battaglia
4
4
  """
5
5
 
6
6
 
7
7
  import logging
8
+ from datetime import timedelta
8
9
  from requests import Request
9
10
  from requests_cache import CachedSession
10
11
  from typing import Union
@@ -15,9 +16,10 @@ class FetchGeonames:
15
16
  Class to handle requests to the GeoNames API
16
17
 
17
18
  Args:
18
- city_name (str): Name of the city
19
- country_code (str): Two letters country code
20
- username (str, optional): GeoNames username, defaults to "century.boy".
19
+ - city_name (str): Name of the city
20
+ - country_code (str): Two letters country code
21
+ - username (str, optional): GeoNames username, defaults to "century.boy".
22
+ - cache_expire_after_days (int, optional): Cache expiration time in days, defaults to 30.
21
23
  """
22
24
 
23
25
  def __init__(
@@ -25,11 +27,12 @@ class FetchGeonames:
25
27
  city_name: str,
26
28
  country_code: str,
27
29
  username: str = "century.boy",
30
+ cache_expire_after_days=30,
28
31
  ):
29
32
  self.session = CachedSession(
30
33
  cache_name="cache/kerykeion_geonames_cache",
31
34
  backend="sqlite",
32
- expire_after=86400,
35
+ expire_after=timedelta(days=cache_expire_after_days),
33
36
  )
34
37
 
35
38
  self.username = username
@@ -1,6 +1,6 @@
1
1
  # -*- coding: utf-8 -*-
2
2
  """
3
- This is part of Kerykeion (C) 2024 Giacomo Battaglia
3
+ This is part of Kerykeion (C) 2025 Giacomo Battaglia
4
4
  """
5
5
 
6
6
  from .kerykeion_exception import KerykeionException
@@ -1,6 +1,6 @@
1
1
  # -*- coding: utf-8 -*-
2
2
  """
3
- This is part of Kerykeion (C) 2024 Giacomo Battaglia
3
+ This is part of Kerykeion (C) 2025 Giacomo Battaglia
4
4
  """
5
5
 
6
6
 
@@ -1,6 +1,6 @@
1
1
  # -*- coding: utf-8 -*-
2
2
  """
3
- This is part of Kerykeion (C) 2024 Giacomo Battaglia
3
+ This is part of Kerykeion (C) 2025 Giacomo Battaglia
4
4
  """
5
5
  from typing import Literal
6
6
 
@@ -1,6 +1,6 @@
1
1
  # -*- coding: utf-8 -*-
2
2
  """
3
- This is part of Kerykeion (C) 2024 Giacomo Battaglia
3
+ This is part of Kerykeion (C) 2025 Giacomo Battaglia
4
4
  """
5
5
 
6
6
 
@@ -1,6 +1,6 @@
1
1
  # -*- coding: utf-8 -*-
2
2
  """
3
- This is part of Kerykeion (C) 2024 Giacomo Battaglia
3
+ This is part of Kerykeion (C) 2025 Giacomo Battaglia
4
4
  """
5
5
 
6
6
 
@@ -1,6 +1,6 @@
1
1
  # -*- coding: utf-8 -*-
2
2
  """
3
- This is part of Kerykeion (C) 2024 Giacomo Battaglia
3
+ This is part of Kerykeion (C) 2025 Giacomo Battaglia
4
4
  """
5
5
 
6
6
  from kerykeion import AstrologicalSubject
@@ -1,6 +1,6 @@
1
1
  # -*- coding: utf-8 -*-
2
2
  """
3
- This is part of Kerykeion (C) 2024 Giacomo Battaglia
3
+ This is part of Kerykeion (C) 2025 Giacomo Battaglia
4
4
  """
5
5
 
6
6
  from kerykeion import AstrologicalSubject
@@ -1,6 +1,6 @@
1
1
  # -*- coding: utf-8 -*-
2
2
  """
3
- This is part of Kerykeion (C) 2024 Giacomo Battaglia
3
+ This is part of Kerykeion (C) 2025 Giacomo Battaglia
4
4
  """
5
5
 
6
6
 
@@ -1,6 +1,6 @@
1
1
  [tool.poetry]
2
2
  name = "kerykeion"
3
- version = "4.19.0"
3
+ version = "4.21.0"
4
4
  authors = ["Giacomo Battaglia <kerykeion.astrology@gmail.com>"]
5
5
  description = "A python library for astrology."
6
6
  license = "AGPL-3.0"
File without changes