astroapi-io-client 0.2.6__tar.gz → 0.2.9__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.
- {astroapi_io_client-0.2.6 → astroapi_io_client-0.2.9}/PKG-INFO +7 -4
- {astroapi_io_client-0.2.6 → astroapi_io_client-0.2.9}/README.md +6 -3
- {astroapi_io_client-0.2.6 → astroapi_io_client-0.2.9}/pyproject.toml +1 -1
- {astroapi_io_client-0.2.6 → astroapi_io_client-0.2.9}/src/astroapi_client/__init__.py +3 -3
- {astroapi_io_client-0.2.6 → astroapi_io_client-0.2.9}/src/astroapi_client/_validation.py +45 -1
- {astroapi_io_client-0.2.6 → astroapi_io_client-0.2.9}/src/astroapi_client/client.py +15 -3
- {astroapi_io_client-0.2.6 → astroapi_io_client-0.2.9}/src/astroapi_client/types.py +38 -0
- {astroapi_io_client-0.2.6 → astroapi_io_client-0.2.9}/src/astroapi_io_client.egg-info/PKG-INFO +7 -4
- {astroapi_io_client-0.2.6 → astroapi_io_client-0.2.9}/tests/test_client.py +24 -0
- {astroapi_io_client-0.2.6 → astroapi_io_client-0.2.9}/LICENSE.txt +0 -0
- {astroapi_io_client-0.2.6 → astroapi_io_client-0.2.9}/setup.cfg +0 -0
- {astroapi_io_client-0.2.6 → astroapi_io_client-0.2.9}/src/astroapi_client/errors.py +0 -0
- {astroapi_io_client-0.2.6 → astroapi_io_client-0.2.9}/src/astroapi_client/py.typed +0 -0
- {astroapi_io_client-0.2.6 → astroapi_io_client-0.2.9}/src/astroapi_client/receipts.py +0 -0
- {astroapi_io_client-0.2.6 → astroapi_io_client-0.2.9}/src/astroapi_io_client.egg-info/SOURCES.txt +0 -0
- {astroapi_io_client-0.2.6 → astroapi_io_client-0.2.9}/src/astroapi_io_client.egg-info/dependency_links.txt +0 -0
- {astroapi_io_client-0.2.6 → astroapi_io_client-0.2.9}/src/astroapi_io_client.egg-info/requires.txt +0 -0
- {astroapi_io_client-0.2.6 → astroapi_io_client-0.2.9}/src/astroapi_io_client.egg-info/top_level.txt +0 -0
- {astroapi_io_client-0.2.6 → astroapi_io_client-0.2.9}/tests/test_aspect_windows_client.py +0 -0
- {astroapi_io_client-0.2.6 → astroapi_io_client-0.2.9}/tests/test_calendar_export.py +0 -0
- {astroapi_io_client-0.2.6 → astroapi_io_client-0.2.9}/tests/test_davison_input.py +0 -0
- {astroapi_io_client-0.2.6 → astroapi_io_client-0.2.9}/tests/test_house_ingresses_client.py +0 -0
- {astroapi_io_client-0.2.6 → astroapi_io_client-0.2.9}/tests/test_next_expansions_client.py +0 -0
- {astroapi_io_client-0.2.6 → astroapi_io_client-0.2.9}/tests/test_onboarding_context_client.py +0 -0
- {astroapi_io_client-0.2.6 → astroapi_io_client-0.2.9}/tests/test_planetary_events_client.py +0 -0
- {astroapi_io_client-0.2.6 → astroapi_io_client-0.2.9}/tests/test_varga_input.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: astroapi-io-client
|
|
3
|
-
Version: 0.2.
|
|
3
|
+
Version: 0.2.9
|
|
4
4
|
Summary: Synchronous Python client for the AstroAPI.io calculation gateway
|
|
5
5
|
License-Expression: ISC
|
|
6
6
|
Classifier: Programming Language :: Python :: 3
|
|
@@ -14,13 +14,13 @@ Dynamic: license-file
|
|
|
14
14
|
|
|
15
15
|
# AstroAPI.io Python client
|
|
16
16
|
|
|
17
|
-
The
|
|
17
|
+
The R201 source client `astroapi-io-client==0.2.9` covers all forty-nine calculation routes: forty-eight standard operations plus the separate Pro Nakshatra Timeline. This package version is the verified R201 client publication; service availability still requires R201 promotion. Minor-body calculations are not part of the contract.
|
|
18
18
|
|
|
19
19
|
A synchronous client for Python 3.10+, with no runtime dependencies.
|
|
20
20
|
The package import is `astroapi_client`; the distribution name is
|
|
21
|
-
`astroapi-io-client`. Version 0.2.
|
|
21
|
+
`astroapi-io-client`. Version 0.2.9 is the R201 source client; package availability never implies that source-only R201 API capabilities are deployed.
|
|
22
22
|
|
|
23
|
-
Install from PyPI with `python -m pip install astroapi-io-client==0.2.
|
|
23
|
+
Install from PyPI with `python -m pip install astroapi-io-client==0.2.9`, or install the current source from a local checkout using `python -m pip install ./clients/python`.
|
|
24
24
|
Building needs setuptools and wheel; the installed client uses only the standard
|
|
25
25
|
library. Keep API credentials in trusted server or command-line environments.
|
|
26
26
|
|
|
@@ -99,6 +99,9 @@ Type hints describe the server contract and do not perform response validation.
|
|
|
99
99
|
| `civil_time_audit` **beta** | `calculateCivilTimeAudit` | pinned place, local date/time, one explicit profile | both repeated-time chart candidates and exact 22-fact differences, or no shifted gap time |
|
|
100
100
|
| `chart_input_readiness` **beta** | `calculateChartInputReadiness` | pinned place, exact/approximate/unknown time quality, explicit profile | route readiness plus resolved, candidate, or sampled evidence for 22 facts |
|
|
101
101
|
| `house_system_readiness` **beta** | `calculateHouseSystemReadiness` | exact birth and explicit tropical/sidereal profile | fixed 25-system availability matrix with fingerprints and no fallback |
|
|
102
|
+
| `house_placement_stability` **beta** | `calculateHousePlacementStability` | exact birth and explicit tropical/sidereal profile | exact assignments, unweighted agreement ratios, and deterministic equivalence groups across available 12-house systems |
|
|
103
|
+
| `aspect_policy_stability` **beta** | `calculateAspectPolicyStability` | exact birth, explicit profile, optional 3–10 points, and 2–4 named aspect policies | admission reasons, signed orb margins, set fingerprints, and deterministic equivalence groups |
|
|
104
|
+
| `house_boundary_proximity` **beta** | `calculateHouseBoundaryProximity` | exact birth, explicit profile, optional 1–10 points and 0.1–10° threshold | exact two-sided cusp clearance, normalized position, nearest-boundary ties, and explicit no-fallback geometry failures |
|
|
102
105
|
| `synastry_svg` **beta** | `calculateSynastrySvg` | two births; optional zodiac/houses/theme/aspects/`include_png` | `result["svg"]`, optional `result["png"]` |
|
|
103
106
|
| `transit_svg` **beta** | `calculateTransitSvg` | birth and transit date; optional display controls/`include_png` | `result["svg"]`, optional `result["png"]` |
|
|
104
107
|
| `natal_report` **beta** | `calculateNatalReport` | birth; optional zodiac/houses/theme/SVG/download | `result["html"]`, source-linked `result["facts"]`, optional `result["download"]` |
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
# AstroAPI.io Python client
|
|
2
2
|
|
|
3
|
-
The
|
|
3
|
+
The R201 source client `astroapi-io-client==0.2.9` covers all forty-nine calculation routes: forty-eight standard operations plus the separate Pro Nakshatra Timeline. This package version is the verified R201 client publication; service availability still requires R201 promotion. Minor-body calculations are not part of the contract.
|
|
4
4
|
|
|
5
5
|
A synchronous client for Python 3.10+, with no runtime dependencies.
|
|
6
6
|
The package import is `astroapi_client`; the distribution name is
|
|
7
|
-
`astroapi-io-client`. Version 0.2.
|
|
7
|
+
`astroapi-io-client`. Version 0.2.9 is the R201 source client; package availability never implies that source-only R201 API capabilities are deployed.
|
|
8
8
|
|
|
9
|
-
Install from PyPI with `python -m pip install astroapi-io-client==0.2.
|
|
9
|
+
Install from PyPI with `python -m pip install astroapi-io-client==0.2.9`, or install the current source from a local checkout using `python -m pip install ./clients/python`.
|
|
10
10
|
Building needs setuptools and wheel; the installed client uses only the standard
|
|
11
11
|
library. Keep API credentials in trusted server or command-line environments.
|
|
12
12
|
|
|
@@ -85,6 +85,9 @@ Type hints describe the server contract and do not perform response validation.
|
|
|
85
85
|
| `civil_time_audit` **beta** | `calculateCivilTimeAudit` | pinned place, local date/time, one explicit profile | both repeated-time chart candidates and exact 22-fact differences, or no shifted gap time |
|
|
86
86
|
| `chart_input_readiness` **beta** | `calculateChartInputReadiness` | pinned place, exact/approximate/unknown time quality, explicit profile | route readiness plus resolved, candidate, or sampled evidence for 22 facts |
|
|
87
87
|
| `house_system_readiness` **beta** | `calculateHouseSystemReadiness` | exact birth and explicit tropical/sidereal profile | fixed 25-system availability matrix with fingerprints and no fallback |
|
|
88
|
+
| `house_placement_stability` **beta** | `calculateHousePlacementStability` | exact birth and explicit tropical/sidereal profile | exact assignments, unweighted agreement ratios, and deterministic equivalence groups across available 12-house systems |
|
|
89
|
+
| `aspect_policy_stability` **beta** | `calculateAspectPolicyStability` | exact birth, explicit profile, optional 3–10 points, and 2–4 named aspect policies | admission reasons, signed orb margins, set fingerprints, and deterministic equivalence groups |
|
|
90
|
+
| `house_boundary_proximity` **beta** | `calculateHouseBoundaryProximity` | exact birth, explicit profile, optional 1–10 points and 0.1–10° threshold | exact two-sided cusp clearance, normalized position, nearest-boundary ties, and explicit no-fallback geometry failures |
|
|
88
91
|
| `synastry_svg` **beta** | `calculateSynastrySvg` | two births; optional zodiac/houses/theme/aspects/`include_png` | `result["svg"]`, optional `result["png"]` |
|
|
89
92
|
| `transit_svg` **beta** | `calculateTransitSvg` | birth and transit date; optional display controls/`include_png` | `result["svg"]`, optional `result["png"]` |
|
|
90
93
|
| `natal_report` **beta** | `calculateNatalReport` | birth; optional zodiac/houses/theme/SVG/download | `result["html"]`, source-linked `result["facts"]`, optional `result["download"]` |
|
|
@@ -17,7 +17,7 @@ from .types import (
|
|
|
17
17
|
GeographicLocation, RelocationChartInput, AstrocartographyBody, AstrocartographyInput,
|
|
18
18
|
EclipseType, EclipseGeometryInput, EclipseObserverSnapshot, EclipseEvent, EclipseGeometryResponse, MoonPhaseSector, ElectionalAspectFilter,
|
|
19
19
|
ElectionalFilters, ElectionalSearchInput,
|
|
20
|
-
EventRule, EventRuleSearchInput, ConventionProfile, ConventionCompareInput, ReleaseCompareInput, ChartRobustnessInput, CivilTimeAuditInput, ChartInputReadinessExactTime, ChartInputReadinessApproximateTime, ChartInputReadinessUnknownTime, ChartInputReadinessBirthTime, ChartInputReadinessInput,
|
|
20
|
+
EventRule, EventRuleSearchInput, ConventionProfile, ConventionCompareInput, ReleaseCompareInput, ChartRobustnessInput, CivilTimeAuditInput, ChartInputReadinessExactTime, ChartInputReadinessApproximateTime, ChartInputReadinessUnknownTime, ChartInputReadinessBirthTime, ChartInputReadinessInput, HouseSystemReadinessInput, HousePlacementStabilityInput, AspectPolicyStabilityPoint, AspectPolicyStabilityPolicy, AspectPolicyStabilityInput, HouseBoundaryProximityPoint, HouseBoundaryProximityInput,
|
|
21
21
|
NatalAnalysisAspectName, NatalAnalysisAspectOption, NatalAnalysisInput,
|
|
22
22
|
AshtakootaInput, AshtakavargaInput, NumerologyInput, PlanetaryHoursInput,
|
|
23
23
|
FixedStar, FixedStarsInput,
|
|
@@ -30,7 +30,7 @@ from .types import (
|
|
|
30
30
|
PlaceSearchInput, TimezoneResolveInput, NatalContextInput,
|
|
31
31
|
)
|
|
32
32
|
|
|
33
|
-
__version__ = "0.2.
|
|
33
|
+
__version__ = "0.2.9"
|
|
34
34
|
__all__ = [
|
|
35
35
|
"NumerologyInput", "verify_calculation_receipt",
|
|
36
36
|
"AstroAPIClient", "AstroAPIError", "ClientBusyError", "HTTPError", "DavisonInput",
|
|
@@ -45,7 +45,7 @@ __all__ = [
|
|
|
45
45
|
"GeographicLocation", "RelocationChartInput", "AstrocartographyBody", "AstrocartographyInput",
|
|
46
46
|
"EclipseType", "EclipseGeometryInput", "EclipseObserverSnapshot", "EclipseEvent", "EclipseGeometryResponse", "MoonPhaseSector", "ElectionalAspectFilter",
|
|
47
47
|
"ElectionalFilters", "ElectionalSearchInput",
|
|
48
|
-
"EventRule", "EventRuleSearchInput", "ConventionProfile", "ConventionCompareInput", "ReleaseCompareInput", "ChartRobustnessInput", "CivilTimeAuditInput", "ChartInputReadinessExactTime", "ChartInputReadinessApproximateTime", "ChartInputReadinessUnknownTime", "ChartInputReadinessBirthTime", "ChartInputReadinessInput",
|
|
48
|
+
"EventRule", "EventRuleSearchInput", "ConventionProfile", "ConventionCompareInput", "ReleaseCompareInput", "ChartRobustnessInput", "CivilTimeAuditInput", "ChartInputReadinessExactTime", "ChartInputReadinessApproximateTime", "ChartInputReadinessUnknownTime", "ChartInputReadinessBirthTime", "ChartInputReadinessInput", "HouseSystemReadinessInput", "HousePlacementStabilityInput", "AspectPolicyStabilityPoint", "AspectPolicyStabilityPolicy", "AspectPolicyStabilityInput", "HouseBoundaryProximityPoint", "HouseBoundaryProximityInput",
|
|
49
49
|
"NatalAnalysisAspectName", "NatalAnalysisAspectOption", "NatalAnalysisInput",
|
|
50
50
|
"AshtakootaInput", "AshtakavargaInput", "PlanetaryHoursInput",
|
|
51
51
|
"FixedStar", "FixedStarsInput",
|
|
@@ -702,7 +702,51 @@ def encode_request(route: str, payload: Any) -> bytes:
|
|
|
702
702
|
_invalid("tropical profiles cannot include ayanamsa.")
|
|
703
703
|
if profile["zodiac"] == "sidereal" and ("ayanamsa" not in profile or profile["ayanamsa"] not in _AYANAMSAS):
|
|
704
704
|
_invalid("sidereal profiles require a supported ayanamsa.")
|
|
705
|
-
elif route == "
|
|
705
|
+
elif route == "aspect-policy-stability":
|
|
706
|
+
_object(data, {"birth", "profile", "points", "policies"}, {"birth", "profile", "policies"})
|
|
707
|
+
birth = _object(data["birth"], {"date", "time", "timezone", "lat", "lon"}, {"date", "time", "timezone", "lat", "lon"})
|
|
708
|
+
_birth(birth)
|
|
709
|
+
profile = _object(data["profile"], {"zodiac", "ayanamsa"}, {"zodiac"})
|
|
710
|
+
_enum(profile["zodiac"], {"tropical", "sidereal"}, "zodiac must be tropical or sidereal.")
|
|
711
|
+
if profile["zodiac"] == "tropical" and "ayanamsa" in profile:
|
|
712
|
+
_invalid("tropical profiles cannot include ayanamsa.")
|
|
713
|
+
if profile["zodiac"] == "sidereal" and ("ayanamsa" not in profile or profile["ayanamsa"] not in _AYANAMSAS):
|
|
714
|
+
_invalid("sidereal profiles require a supported ayanamsa.")
|
|
715
|
+
if "points" in data:
|
|
716
|
+
_unique_enum_list(data["points"], _PLANETARY_EVENT_BODIES, 10, "points")
|
|
717
|
+
if len(data["points"]) < 3:
|
|
718
|
+
_invalid("aspect-policy stability requires at least three points.")
|
|
719
|
+
if not isinstance(data["policies"], list) or not 2 <= len(data["policies"]) <= 4:
|
|
720
|
+
_invalid("policies must contain two through four entries.")
|
|
721
|
+
identifiers = set()
|
|
722
|
+
for policy in data["policies"]:
|
|
723
|
+
policy = _object(policy, {"id", "aspects"}, {"id", "aspects"})
|
|
724
|
+
identifier = policy["id"]
|
|
725
|
+
if (not isinstance(identifier, str)
|
|
726
|
+
or re.fullmatch(r"[a-z][a-z0-9_-]{0,31}", identifier) is None
|
|
727
|
+
or identifier in identifiers):
|
|
728
|
+
_invalid("policy ids must be unique lowercase identifiers of at most 32 characters.")
|
|
729
|
+
identifiers.add(identifier)
|
|
730
|
+
_aspect_configuration(policy)
|
|
731
|
+
elif route == "house-boundary-proximity":
|
|
732
|
+
_object(data, {"birth", "profile", "points", "threshold_degrees"}, {"birth", "profile"})
|
|
733
|
+
birth = _object(data["birth"], {"date", "time", "timezone", "lat", "lon"}, {"date", "time", "timezone", "lat", "lon"})
|
|
734
|
+
_birth(birth)
|
|
735
|
+
profile = _object(data["profile"], {"zodiac", "ayanamsa"}, {"zodiac"})
|
|
736
|
+
_enum(profile["zodiac"], {"tropical", "sidereal"}, "zodiac must be tropical or sidereal.")
|
|
737
|
+
if profile["zodiac"] == "tropical" and "ayanamsa" in profile:
|
|
738
|
+
_invalid("tropical profiles cannot include ayanamsa.")
|
|
739
|
+
if profile["zodiac"] == "sidereal" and ("ayanamsa" not in profile or profile["ayanamsa"] not in _AYANAMSAS):
|
|
740
|
+
_invalid("sidereal profiles require a supported ayanamsa.")
|
|
741
|
+
if "points" in data:
|
|
742
|
+
_unique_enum_list(data["points"], _PLANETARY_EVENT_BODIES, 10, "points")
|
|
743
|
+
if "threshold_degrees" in data:
|
|
744
|
+
threshold = data["threshold_degrees"]
|
|
745
|
+
if (type(threshold) not in {int, float} or not math.isfinite(threshold)
|
|
746
|
+
or not 0.1 <= threshold <= 10.0
|
|
747
|
+
or abs(threshold * 10 - round(threshold * 10)) > 1e-9):
|
|
748
|
+
_invalid("threshold_degrees must be 0.1 through 10.0 in 0.1 degree increments.")
|
|
749
|
+
elif route in {"house-system-readiness", "house-placement-stability"}:
|
|
706
750
|
_object(data, {"birth", "profile"}, {"birth", "profile"})
|
|
707
751
|
birth = _object(data["birth"], {"date", "time", "timezone", "lat", "lon"}, {"date", "time", "timezone", "lat", "lon"})
|
|
708
752
|
_birth(birth)
|
|
@@ -32,7 +32,7 @@ from .types import (
|
|
|
32
32
|
MoonPhaseInput, MoonPhaseResponse, DavisonInput, PlanetaryEventsInput, PlanetaryEventsResponse,
|
|
33
33
|
HouseIngressesInput, HouseIngressesResponse,
|
|
34
34
|
AspectWindowsInput, AspectWindowsResponse,
|
|
35
|
-
EventRuleSearchInput, ConventionCompareInput, ReleaseCompareInput, ChartRobustnessInput, CivilTimeAuditInput, ChartInputReadinessInput, HouseSystemReadinessInput,
|
|
35
|
+
EventRuleSearchInput, ConventionCompareInput, ReleaseCompareInput, ChartRobustnessInput, CivilTimeAuditInput, ChartInputReadinessInput, HouseSystemReadinessInput, HousePlacementStabilityInput, AspectPolicyStabilityInput, HouseBoundaryProximityInput,
|
|
36
36
|
EventCalendarInput, SynastrySvgInput, TransitSvgInput, NatalReportInput,
|
|
37
37
|
BirthTimeSensitivityInput, RelocationChartInput, AstrocartographyInput,
|
|
38
38
|
PlaceSearchInput, TimezoneResolveInput, NatalContextInput,
|
|
@@ -181,7 +181,7 @@ def _perform(
|
|
|
181
181
|
"Content-Type": "application/json",
|
|
182
182
|
"Accept": "application/json",
|
|
183
183
|
"Accept-Encoding": "identity",
|
|
184
|
-
"User-Agent": "astroapi-io-client/0.2.
|
|
184
|
+
"User-Agent": "astroapi-io-client/0.2.9",
|
|
185
185
|
"Connection": "close",
|
|
186
186
|
**({"X-AstroAPI-Receipt": "v1"} if request_receipt else {}),
|
|
187
187
|
})
|
|
@@ -285,7 +285,7 @@ class AstroAPIClient:
|
|
|
285
285
|
|
|
286
286
|
def _request(self, route: str, payload: object) -> JSONResponse:
|
|
287
287
|
body = encode_request(route, payload)
|
|
288
|
-
timeout = (self._timeline_timeout if route in {"nakshatra-timeline", "birth-time-sensitivity", "chart-robustness", "chart-input-readiness", "house-system-readiness"}
|
|
288
|
+
timeout = (self._timeline_timeout if route in {"nakshatra-timeline", "birth-time-sensitivity", "chart-robustness", "chart-input-readiness", "house-system-readiness", "house-placement-stability", "house-boundary-proximity"}
|
|
289
289
|
else self._planetary_events_timeout if route in {"planetary-events", "house-ingresses", "eclipse-geometry", "electional-search", "event-rule-search"}
|
|
290
290
|
else self._aspect_windows_timeout if route == "aspect-windows"
|
|
291
291
|
else self._timeout)
|
|
@@ -440,6 +440,18 @@ class AstroAPIClient:
|
|
|
440
440
|
"""BETA: preflight the fixed 25-system inventory without fallback."""
|
|
441
441
|
return self._request("house-system-readiness", payload)
|
|
442
442
|
|
|
443
|
+
def house_placement_stability(self, payload: HousePlacementStabilityInput) -> JSONResponse:
|
|
444
|
+
"""BETA: quantify unweighted planet-house stability across comparable systems."""
|
|
445
|
+
return self._request("house-placement-stability", payload)
|
|
446
|
+
|
|
447
|
+
def aspect_policy_stability(self, payload: AspectPolicyStabilityInput) -> JSONResponse:
|
|
448
|
+
"""BETA: compare several explicit aspect-orb policies on one exact chart."""
|
|
449
|
+
return self._request("aspect-policy-stability", payload)
|
|
450
|
+
|
|
451
|
+
def house_boundary_proximity(self, payload: HouseBoundaryProximityInput) -> JSONResponse:
|
|
452
|
+
"""BETA: audit exact two-sided cusp clearance across 12-house systems."""
|
|
453
|
+
return self._request("house-boundary-proximity", payload)
|
|
454
|
+
|
|
443
455
|
def synastry_svg(self, payload: SynastrySvgInput) -> JSONResponse:
|
|
444
456
|
"""BETA: original deterministic double-wheel relationship SVG."""
|
|
445
457
|
return self._request("synastry-svg", payload)
|
|
@@ -419,6 +419,23 @@ class HouseSystemReadinessInput(TypedDict):
|
|
|
419
419
|
profile: HouseSystemReadinessProfile
|
|
420
420
|
|
|
421
421
|
|
|
422
|
+
HousePlacementStabilityInput = HouseSystemReadinessInput
|
|
423
|
+
HouseBoundaryProximityPoint = Literal[
|
|
424
|
+
"sun", "moon", "mercury", "venus", "mars",
|
|
425
|
+
"jupiter", "saturn", "uranus", "neptune", "pluto",
|
|
426
|
+
]
|
|
427
|
+
|
|
428
|
+
|
|
429
|
+
class _HouseBoundaryProximityRequired(TypedDict):
|
|
430
|
+
birth: BirthInput
|
|
431
|
+
profile: HouseSystemReadinessProfile
|
|
432
|
+
|
|
433
|
+
|
|
434
|
+
class HouseBoundaryProximityInput(_HouseBoundaryProximityRequired, total=False):
|
|
435
|
+
points: list[HouseBoundaryProximityPoint]
|
|
436
|
+
threshold_degrees: float
|
|
437
|
+
|
|
438
|
+
|
|
422
439
|
class ReleaseCompareInput(TypedDict):
|
|
423
440
|
releases: list[JSONResponse]
|
|
424
441
|
|
|
@@ -463,6 +480,27 @@ class NatalAnalysisInput(_NatalAnalysisRequired, total=False):
|
|
|
463
480
|
ayanamsa: Ayanamsa
|
|
464
481
|
|
|
465
482
|
|
|
483
|
+
AspectPolicyStabilityPoint = Literal[
|
|
484
|
+
"sun", "moon", "mercury", "venus", "mars",
|
|
485
|
+
"jupiter", "saturn", "uranus", "neptune", "pluto",
|
|
486
|
+
]
|
|
487
|
+
|
|
488
|
+
|
|
489
|
+
class AspectPolicyStabilityPolicy(TypedDict):
|
|
490
|
+
id: str
|
|
491
|
+
aspects: list[NatalAnalysisAspectOption]
|
|
492
|
+
|
|
493
|
+
|
|
494
|
+
class _AspectPolicyStabilityRequired(TypedDict):
|
|
495
|
+
birth: BirthInput
|
|
496
|
+
profile: HouseSystemReadinessProfile
|
|
497
|
+
policies: list[AspectPolicyStabilityPolicy]
|
|
498
|
+
|
|
499
|
+
|
|
500
|
+
class AspectPolicyStabilityInput(_AspectPolicyStabilityRequired, total=False):
|
|
501
|
+
points: list[AspectPolicyStabilityPoint]
|
|
502
|
+
|
|
503
|
+
|
|
466
504
|
class PlanetaryHoursInput(TypedDict):
|
|
467
505
|
date: str
|
|
468
506
|
timezone: str
|
{astroapi_io_client-0.2.6 → astroapi_io_client-0.2.9}/src/astroapi_io_client.egg-info/PKG-INFO
RENAMED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: astroapi-io-client
|
|
3
|
-
Version: 0.2.
|
|
3
|
+
Version: 0.2.9
|
|
4
4
|
Summary: Synchronous Python client for the AstroAPI.io calculation gateway
|
|
5
5
|
License-Expression: ISC
|
|
6
6
|
Classifier: Programming Language :: Python :: 3
|
|
@@ -14,13 +14,13 @@ Dynamic: license-file
|
|
|
14
14
|
|
|
15
15
|
# AstroAPI.io Python client
|
|
16
16
|
|
|
17
|
-
The
|
|
17
|
+
The R201 source client `astroapi-io-client==0.2.9` covers all forty-nine calculation routes: forty-eight standard operations plus the separate Pro Nakshatra Timeline. This package version is the verified R201 client publication; service availability still requires R201 promotion. Minor-body calculations are not part of the contract.
|
|
18
18
|
|
|
19
19
|
A synchronous client for Python 3.10+, with no runtime dependencies.
|
|
20
20
|
The package import is `astroapi_client`; the distribution name is
|
|
21
|
-
`astroapi-io-client`. Version 0.2.
|
|
21
|
+
`astroapi-io-client`. Version 0.2.9 is the R201 source client; package availability never implies that source-only R201 API capabilities are deployed.
|
|
22
22
|
|
|
23
|
-
Install from PyPI with `python -m pip install astroapi-io-client==0.2.
|
|
23
|
+
Install from PyPI with `python -m pip install astroapi-io-client==0.2.9`, or install the current source from a local checkout using `python -m pip install ./clients/python`.
|
|
24
24
|
Building needs setuptools and wheel; the installed client uses only the standard
|
|
25
25
|
library. Keep API credentials in trusted server or command-line environments.
|
|
26
26
|
|
|
@@ -99,6 +99,9 @@ Type hints describe the server contract and do not perform response validation.
|
|
|
99
99
|
| `civil_time_audit` **beta** | `calculateCivilTimeAudit` | pinned place, local date/time, one explicit profile | both repeated-time chart candidates and exact 22-fact differences, or no shifted gap time |
|
|
100
100
|
| `chart_input_readiness` **beta** | `calculateChartInputReadiness` | pinned place, exact/approximate/unknown time quality, explicit profile | route readiness plus resolved, candidate, or sampled evidence for 22 facts |
|
|
101
101
|
| `house_system_readiness` **beta** | `calculateHouseSystemReadiness` | exact birth and explicit tropical/sidereal profile | fixed 25-system availability matrix with fingerprints and no fallback |
|
|
102
|
+
| `house_placement_stability` **beta** | `calculateHousePlacementStability` | exact birth and explicit tropical/sidereal profile | exact assignments, unweighted agreement ratios, and deterministic equivalence groups across available 12-house systems |
|
|
103
|
+
| `aspect_policy_stability` **beta** | `calculateAspectPolicyStability` | exact birth, explicit profile, optional 3–10 points, and 2–4 named aspect policies | admission reasons, signed orb margins, set fingerprints, and deterministic equivalence groups |
|
|
104
|
+
| `house_boundary_proximity` **beta** | `calculateHouseBoundaryProximity` | exact birth, explicit profile, optional 1–10 points and 0.1–10° threshold | exact two-sided cusp clearance, normalized position, nearest-boundary ties, and explicit no-fallback geometry failures |
|
|
102
105
|
| `synastry_svg` **beta** | `calculateSynastrySvg` | two births; optional zodiac/houses/theme/aspects/`include_png` | `result["svg"]`, optional `result["png"]` |
|
|
103
106
|
| `transit_svg` **beta** | `calculateTransitSvg` | birth and transit date; optional display controls/`include_png` | `result["svg"]`, optional `result["png"]` |
|
|
104
107
|
| `natal_report` **beta** | `calculateNatalReport` | birth; optional zodiac/houses/theme/SVG/download | `result["html"]`, source-linked `result["facts"]`, optional `result["download"]` |
|
|
@@ -65,6 +65,15 @@ CONVENTION_INPUT = {"birth": BIRTH, "profiles": [{"zodiac": "tropical", "house_s
|
|
|
65
65
|
CIVIL_TIME_AUDIT_INPUT = {"place_id": "geonames:5128581:2026-10-02", "date": "2024-11-03", "time": "01:30", "profile": {"zodiac": "tropical", "house_system": "equal"}}
|
|
66
66
|
CHART_INPUT_READINESS_INPUT = {"place_id": "geonames:5128581:2026-10-02", "birth_time": {"status": "exact", "date": "2024-11-03", "time": "01:30"}, "profile": {"zodiac": "tropical", "house_system": "equal"}}
|
|
67
67
|
HOUSE_SYSTEM_READINESS_INPUT = {"birth": BIRTH, "profile": {"zodiac": "tropical"}}
|
|
68
|
+
HOUSE_PLACEMENT_STABILITY_INPUT = HOUSE_SYSTEM_READINESS_INPUT
|
|
69
|
+
ASPECT_POLICY_STABILITY_INPUT = {
|
|
70
|
+
"birth": BIRTH, "profile": {"zodiac": "tropical"},
|
|
71
|
+
"points": ["sun", "moon", "mercury"],
|
|
72
|
+
"policies": [
|
|
73
|
+
{"id": "tight", "aspects": [{"aspect": "square", "max_orb_degrees": 3.0}]},
|
|
74
|
+
{"id": "wide", "aspects": [{"aspect": "square", "max_orb_degrees": 8.0}]},
|
|
75
|
+
],
|
|
76
|
+
}
|
|
68
77
|
CHART_ROBUSTNESS_INPUT = {"birth_time": {"status": "approximate", "date": "2000-01-01", "time": "12:00", "timezone": "UTC", "uncertainty_minutes": 30}, "lat": 0, "lon": 0, "profiles": [{"zodiac": "tropical", "house_system": "equal"}, {"zodiac": "sidereal", "ayanamsa": "lahiri", "house_system": "whole_sign"}]}
|
|
69
78
|
ROUTES += [
|
|
70
79
|
("event_rule_search", "event-rule-search", RULE_INPUT, {"type": "event_rule_search", "status": "beta", "rule_analysis": {}, "matching_samples": [], "sampled_candidate_windows": [], "metadata": {}}),
|
|
@@ -73,6 +82,9 @@ ROUTES += [
|
|
|
73
82
|
("civil_time_audit", "civil-time-audit", CIVIL_TIME_AUDIT_INPUT, {"type": "civil_time_audit", "status": "beta", "resolution": {}, "profile": {}, "calculation_ready": False, "requires_selection": True, "candidates": [], "comparison": {}, "metadata": {}}),
|
|
74
83
|
("chart_input_readiness", "chart-input-readiness", CHART_INPUT_READINESS_INPUT, {"type": "chart_input_readiness", "status": "beta", "birth_time_status": "exact", "profile": {}, "resolution": {}, "exact_chart_ready": False, "next_action": "select_civil_time_candidate", "workflows": [{}, {}, {}, {}], "fact_evidence": [], "summary": {}, "evidence": {}, "metadata": {}}),
|
|
75
84
|
("house_system_readiness", "house-system-readiness", HOUSE_SYSTEM_READINESS_INPUT, {"type": "house_system_readiness", "status": "beta", "input": BIRTH, "profile": {}, "systems": [{} for _ in range(25)], "summary": {}, "fallback": {"performed": False, "selected_system": None}, "metadata": {}}),
|
|
85
|
+
("house_placement_stability", "house-placement-stability", HOUSE_PLACEMENT_STABILITY_INPUT, {"type": "house_placement_stability", "status": "beta", "input": BIRTH, "profile": {}, "systems": [{} for _ in range(25)], "planets": [{} for _ in range(10)], "placement_groups": [], "summary": {}, "fallback": {"performed": False, "selected_system": None}, "metadata": {}}),
|
|
86
|
+
("aspect_policy_stability", "aspect-policy-stability", ASPECT_POLICY_STABILITY_INPUT, {"type": "aspect_policy_stability", "status": "beta", "input": {}, "positions": {}, "evaluations": [], "policy_results": [{}, {}], "policy_groups": [{}], "summary": {}, "metadata": {}}),
|
|
87
|
+
("house_boundary_proximity", "house-boundary-proximity", {"birth": BIRTH, "profile": {"zodiac": "tropical"}, "points": ["sun", "moon"], "threshold_degrees": 2.0}, {"type": "house_boundary_proximity", "status": "beta", "input": {}, "systems": [{} for _ in range(25)], "point_summaries": [{}, {}], "summary": {}, "fallback": {"performed": False, "selected_system": None}, "metadata": {}}),
|
|
76
88
|
]
|
|
77
89
|
|
|
78
90
|
@contextmanager
|
|
@@ -158,6 +170,15 @@ CONVENTION_INPUT = {"birth": BIRTH, "profiles": [{"zodiac": "tropical", "house_s
|
|
|
158
170
|
CIVIL_TIME_AUDIT_INPUT = {"place_id": "geonames:5128581:2026-10-02", "date": "2024-11-03", "time": "01:30", "profile": {"zodiac": "tropical", "house_system": "equal"}}
|
|
159
171
|
CHART_INPUT_READINESS_INPUT = {"place_id": "geonames:5128581:2026-10-02", "birth_time": {"status": "exact", "date": "2024-11-03", "time": "01:30"}, "profile": {"zodiac": "tropical", "house_system": "equal"}}
|
|
160
172
|
HOUSE_SYSTEM_READINESS_INPUT = {"birth": BIRTH, "profile": {"zodiac": "tropical"}}
|
|
173
|
+
HOUSE_PLACEMENT_STABILITY_INPUT = HOUSE_SYSTEM_READINESS_INPUT
|
|
174
|
+
ASPECT_POLICY_STABILITY_INPUT = {
|
|
175
|
+
"birth": BIRTH, "profile": {"zodiac": "tropical"},
|
|
176
|
+
"points": ["sun", "moon", "mercury"],
|
|
177
|
+
"policies": [
|
|
178
|
+
{"id": "tight", "aspects": [{"aspect": "square", "max_orb_degrees": 3.0}]},
|
|
179
|
+
{"id": "wide", "aspects": [{"aspect": "square", "max_orb_degrees": 8.0}]},
|
|
180
|
+
],
|
|
181
|
+
}
|
|
161
182
|
CHART_ROBUSTNESS_INPUT = {"birth_time": {"status": "approximate", "date": "2000-01-01", "time": "12:00", "timezone": "UTC", "uncertainty_minutes": 30}, "lat": 0, "lon": 0, "profiles": [{"zodiac": "tropical", "house_system": "equal"}, {"zodiac": "sidereal", "ayanamsa": "lahiri", "house_system": "whole_sign"}]}
|
|
162
183
|
ROUTES += [
|
|
163
184
|
("event_rule_search", "event-rule-search", RULE_INPUT, {"type": "event_rule_search", "status": "beta", "rule_analysis": {}, "matching_samples": [], "sampled_candidate_windows": [], "metadata": {}}),
|
|
@@ -166,6 +187,9 @@ ROUTES += [
|
|
|
166
187
|
("civil_time_audit", "civil-time-audit", CIVIL_TIME_AUDIT_INPUT, {"type": "civil_time_audit", "status": "beta", "resolution": {}, "profile": {}, "calculation_ready": False, "requires_selection": True, "candidates": [], "comparison": {}, "metadata": {}}),
|
|
167
188
|
("chart_input_readiness", "chart-input-readiness", CHART_INPUT_READINESS_INPUT, {"type": "chart_input_readiness", "status": "beta", "birth_time_status": "exact", "profile": {}, "resolution": {}, "exact_chart_ready": False, "next_action": "select_civil_time_candidate", "workflows": [{}, {}, {}, {}], "fact_evidence": [], "summary": {}, "evidence": {}, "metadata": {}}),
|
|
168
189
|
("house_system_readiness", "house-system-readiness", HOUSE_SYSTEM_READINESS_INPUT, {"type": "house_system_readiness", "status": "beta", "input": BIRTH, "profile": {}, "systems": [{} for _ in range(25)], "summary": {}, "fallback": {"performed": False, "selected_system": None}, "metadata": {}}),
|
|
190
|
+
("house_placement_stability", "house-placement-stability", HOUSE_PLACEMENT_STABILITY_INPUT, {"type": "house_placement_stability", "status": "beta", "input": BIRTH, "profile": {}, "systems": [{} for _ in range(25)], "planets": [{} for _ in range(10)], "placement_groups": [], "summary": {}, "fallback": {"performed": False, "selected_system": None}, "metadata": {}}),
|
|
191
|
+
("aspect_policy_stability", "aspect-policy-stability", ASPECT_POLICY_STABILITY_INPUT, {"type": "aspect_policy_stability", "status": "beta", "input": {}, "positions": {}, "evaluations": [], "policy_results": [{}, {}], "policy_groups": [{}], "summary": {}, "metadata": {}}),
|
|
192
|
+
("house_boundary_proximity", "house-boundary-proximity", {"birth": BIRTH, "profile": {"zodiac": "tropical"}, "points": ["sun", "moon"], "threshold_degrees": 2.0}, {"type": "house_boundary_proximity", "status": "beta", "input": {}, "systems": [{} for _ in range(25)], "point_summaries": [{}, {}], "summary": {}, "fallback": {"performed": False, "selected_system": None}, "metadata": {}}),
|
|
169
193
|
]
|
|
170
194
|
|
|
171
195
|
@contextmanager
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{astroapi_io_client-0.2.6 → astroapi_io_client-0.2.9}/src/astroapi_io_client.egg-info/SOURCES.txt
RENAMED
|
File without changes
|
|
File without changes
|
{astroapi_io_client-0.2.6 → astroapi_io_client-0.2.9}/src/astroapi_io_client.egg-info/requires.txt
RENAMED
|
File without changes
|
{astroapi_io_client-0.2.6 → astroapi_io_client-0.2.9}/src/astroapi_io_client.egg-info/top_level.txt
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{astroapi_io_client-0.2.6 → astroapi_io_client-0.2.9}/tests/test_onboarding_context_client.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|