This release has been yanked by its maintainers, and will be ignored by installers, except when explicitly specified.
Consider using release 0.2.3 instead.
astromansion
Official Python client for the AstroMansion astrology API.
Nothing is computed locally. Every call reaches https://api.astromansion.com,
which owns the ephemeris, your plan, your quota and your rate limit. The
package never opens a feature the server did not grant.
Install
pip install astromansion
Python 3.10 or newer. The only dependency is httpx.
Get an API key
Create an account at astromansion.com, open your account page and generate a key. Requests made with it count against that account, under the plan it already has.
First chart
Put the key in the environment rather than in your source:
export ASTROMANSION_API_KEY="your key"
from astromansion import AstroMansion
client = AstroMansion()
chart = client.natal(
date="1990-07-19",
time="14:30",
lat=41.0082,
lon=28.9784,
timezone=3,
)
print(chart.summary.Sun.sign) # Cancer
print(chart.planets[0].house) # 9
Birth data is passed flat. The API nests it under birth; the client does
that for you.
Fields: date as YYYY-MM-DD, time as HH:MM (omit if unknown), lat and
lon in decimal degrees, timezone as an hour offset or an IANA zone name,
houses for a house system.
You can pass a mapping instead of keywords, but not both at once:
chart = client.natal({"date": "1990-07-19", "lat": 41.0082, "lon": 28.9784})
Where the key comes from
In order: the api_key argument, then astromansion.set_api_key(...), then
ASTROMANSION_API_KEY. With none of them the call raises
AuthenticationError before touching the network.
client = AstroMansion(api_key="your key")
Quick use
For a notebook or a one-file script:
import astromansion as am
am.set_api_key("your key") # or rely on the environment
chart = am.natal(date="1990-07-19", lat=41.0082, lon=28.9784)
Applications should build a client instead: it holds a connection pool, and two of them can carry two different keys.
Async
from astromansion import AsyncAstroMansion
async with AsyncAstroMansion() as client:
chart = await client.natal(
date="1990-07-19",
time="14:30",
lat=41.0082,
lon=28.9784,
timezone=3,
)
Same method names, same arguments, same exceptions. Python cannot make one
class serve both, so the bare name is synchronous and Async marks the other,
as in httpx, openai and anthropic.
Reading a response
The response is the server's own JSON, readable either way:
chart.summary.Sun.sign
chart["summary"]["Sun"]["sign"]
chart.to_dict()
Nothing is remodelled, so a field the API adds reaches you instead of being dropped, and no field it did not send is invented.
Every endpoint
Every published operation, 66 of them, has a method on both clients and a
module-level shortcut, all generated from the schema: natal, transits, synastry, composite,
solar_return, progression, harmonics, astrocartography, vedic_chart,
zodiacal_releasing, firdaria, horary, electional and the rest.
Anything new is reachable before this client names it:
result = client.request("POST", "/v1/harmonics", json={"birth": {...}})
Authentication, timeouts, retries and error handling behave identically there.
Errors
from astromansion import QuotaExceededError, RateLimitError
try:
chart = client.natal(date="1990-07-19", lat=41.0, lon=29.0)
except RateLimitError as error:
print("wait", error.retry_after, "seconds")
except QuotaExceededError:
print("this period's allowance is spent")
| Exception | Meaning |
|---|---|
AuthenticationError |
Key missing, malformed or unknown |
PermissionDeniedError |
Valid key, feature not in the plan |
QuotaExceededError |
Allowance for the period is spent |
RateLimitError |
Too many requests just now; retry_after says how long |
ValidationError |
Request rejected; details names the field |
NotFoundError, ConflictError |
Missing resource, conflicting state |
ServerError |
The API failed to answer |
AstroMansionConnectionError |
The request never completed |
All descend from AstroMansionError. Each carries status_code,
error_code, details, request_id and retry_after when the API supplies
them.
Rate limits and quota
A rate limit clears on its own after retry_after. A spent quota does not:
it needs a new period or a larger plan. They are separate exceptions for that
reason.
The client retries only failures that carry no result: connection errors, 429
and 5xx, twice by default, honouring Retry-After. A refusal you must fix is
never retried.
client = AstroMansion(timeout=60.0, max_retries=0)
Documents
pdf = client.export_pdf(date="1990-07-19", lat=41.0082, lon=28.9784)
with open("chart.pdf", "wb") as file:
file.write(pdf)
Or name a path and let the client write it:
client.export_pdf(date="1990-07-19", lat=41.0082, lon=28.9784, output="chart.pdf")
Nothing is written to disk unless you ask. export_csv, render_svg,
render_png and render_biwheel also return bytes.
Security
The key travels in the X-API-Key header, never in a URL. It is masked in
repr(client) and appears in no exception or log line the package writes.
Keep it in the environment or a secret store, not in source control. Rotate it
from your account page if it leaks.
Staging
client = AstroMansion(base_url="http://localhost:8000")
Also readable from ASTROMANSION_BASE_URL.
Links
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file astromansion-0.1.0.tar.gz.
File metadata
- Download URL: astromansion-0.1.0.tar.gz
- Upload date:
- Size: 29.9 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via:
twine/7.0.0 CPython/3.12.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
11b3b9812c198875f164dc7e88ac3e9ec12df37f4e36d77eafedbf9da99344ad
|
|
| MD5 |
8a390e3a9f2af092ef56eeeec9f9c8bc
|
|
| BLAKE2b-256 |
9323d86ec5ce566ebd005554e9609549091b9ecc144c54a6b87ec693d42a0c83
|
File details
Details for the file astromansion-0.1.0-py3-none-any.whl.
File metadata
- Download URL: astromansion-0.1.0-py3-none-any.whl
- Upload date:
- Size: 36.7 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via:
twine/7.0.0 CPython/3.12.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
afa199fd76aa76dbadf15446f3e9c67c232ada3957352b091a1eb2906e1b76d8
|
|
| MD5 |
83c103d0c58a0ddea82cd89217c9a583
|
|
| BLAKE2b-256 |
2e6db06ffb858a3f5441a5d1e7d778d1c0794531aef14ddd002d21c366808133
|