Skip to main content
Yanked

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

astromansion-0.1.0.tar.gz (29.9 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

astromansion-0.1.0-py3-none-any.whl (36.7 kB view details)

Uploaded Python 3

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

Hashes for astromansion-0.1.0.tar.gz
Algorithm Hash digest
SHA256 11b3b9812c198875f164dc7e88ac3e9ec12df37f4e36d77eafedbf9da99344ad
MD5 8a390e3a9f2af092ef56eeeec9f9c8bc
BLAKE2b-256 9323d86ec5ce566ebd005554e9609549091b9ecc144c54a6b87ec693d42a0c83

See more details on using hashes here.

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

Hashes for astromansion-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 afa199fd76aa76dbadf15446f3e9c67c232ada3957352b091a1eb2906e1b76d8
MD5 83c103d0c58a0ddea82cd89217c9a583
BLAKE2b-256 2e6db06ffb858a3f5441a5d1e7d778d1c0794531aef14ddd002d21c366808133

See more details on using hashes here.

Release history Release notifications | RSS feed

0.2.3

2 files

0.2.2

2 files

0.2.1

2 files

0.2.0

2 files

0.1.14

2 files

0.1.13

2 files

0.1.12

2 files

0.1.11

2 files

0.1.10

2 files

0.1.9

2 files

0.1.8

2 files

0.1.7

2 files

0.1.6

2 files

0.1.5

2 files

0.1.4

2 files

0.1.3

2 files

0.1.2

2 files

0.1.1

2 files

This release

0.1.0 This release

2 files

0.0.2

2 files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page