roxy-sdk 1.2.1__tar.gz → 1.3.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.
- {roxy_sdk-1.2.1 → roxy_sdk-1.3.0}/PKG-INFO +9 -2
- {roxy_sdk-1.2.1 → roxy_sdk-1.3.0}/README.md +8 -1
- {roxy_sdk-1.2.1 → roxy_sdk-1.3.0}/pyproject.toml +1 -1
- {roxy_sdk-1.2.1 → roxy_sdk-1.3.0}/pyproject.toml.orig +1 -1
- {roxy_sdk-1.2.1 → roxy_sdk-1.3.0}/src/roxy_sdk/AGENTS.md +8 -1
- {roxy_sdk-1.2.1 → roxy_sdk-1.3.0}/src/roxy_sdk/factory.py +473 -6
- roxy_sdk-1.3.0/src/roxy_sdk/version.py +1 -0
- roxy_sdk-1.2.1/src/roxy_sdk/version.py +0 -1
- {roxy_sdk-1.2.1 → roxy_sdk-1.3.0}/LICENSE +0 -0
- {roxy_sdk-1.2.1 → roxy_sdk-1.3.0}/src/roxy_sdk/__init__.py +0 -0
- {roxy_sdk-1.2.1 → roxy_sdk-1.3.0}/src/roxy_sdk/py.typed +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: roxy-sdk
|
|
3
|
-
Version: 1.
|
|
3
|
+
Version: 1.3.0
|
|
4
4
|
Summary: Python SDK for RoxyAPI. Astrology, tarot, numerology, and more.
|
|
5
5
|
Keywords: astrology,vedic,tarot,numerology,horoscope,kundli,birth-chart,natal-chart,iching,crystals,angel-numbers,dreams,biorhythm,spiritual,api,sdk,async,fastapi,ai-agent,mcp,llm
|
|
6
6
|
License-Expression: MIT
|
|
@@ -120,6 +120,7 @@ kundli = roxy.vedic_astrology.generate_birth_chart(
|
|
|
120
120
|
| [Angel Numbers](https://roxyapi.com/api-reference/angel-numbers) | `roxy.angel_numbers` | 4 | Angel numbers API with meanings for 111, 222, 333, 444, 555, 666, 777, 888, 999, 1111, and 75+ sequences covering eve... |
|
|
121
121
|
| [Location and Timezone](https://roxyapi.com/api-reference/location-and-timezone) | `roxy.location` | 3 | Timezone and location API with city search and geocoding across 5,180,000+ cities, towns and villages in 240+ countri... |
|
|
122
122
|
| [Usage](https://roxyapi.com/api-reference/usage) | `roxy.usage` | 1 | Monitor your API usage, check rate limits, and track request consumption |
|
|
123
|
+
| [Reports](https://roxyapi.com/api-reference/reports) | `roxy.reports` | 9 | Branded reports built from the API: a natal chart and more as a print-ready PDF, self-contained HTML or Markdown, whi... |
|
|
123
124
|
| [Languages](https://roxyapi.com/api-reference/languages) | `roxy.languages` | 2 | List the response languages accepted by the `lang` query parameter on every i18n-aware endpoint |
|
|
124
125
|
<!-- END:DOMAINS -->
|
|
125
126
|
|
|
@@ -480,7 +481,7 @@ Never expose your API key client-side. Call Roxy from server code only.
|
|
|
480
481
|
## Multi-language responses
|
|
481
482
|
|
|
482
483
|
<!-- BEGIN:LANGS -->
|
|
483
|
-
Interpretations and editorial text are available in 10 languages: `en`, `tr`, `de`, `es`, `hi`, `pt`, `fr`, `ru`, `zh-Hans`, `zh-Hant`. Pass `lang` as a keyword argument on any supported method. Defaults to `en`. Supported: `astrology`, `vedic_astrology`, `forecast`, `human_design`, `chinese_astrology`, `feng_shui`, `mesoamerican_astrology`, `vastu`, `numerology`, `kabbalah`, `tarot`, `biorhythm`, `ayurveda`, `iching`, `crystals`, `angel_numbers`, `languages`. English-only: `dreams`, `location`, `usage`. Languages without translations yet fall back to English.
|
|
484
|
+
Interpretations and editorial text are available in 10 languages: `en`, `tr`, `de`, `es`, `hi`, `pt`, `fr`, `ru`, `zh-Hans`, `zh-Hant`. Pass `lang` as a keyword argument on any supported method. Defaults to `en`. Supported: `astrology`, `vedic_astrology`, `forecast`, `human_design`, `chinese_astrology`, `feng_shui`, `mesoamerican_astrology`, `vastu`, `numerology`, `kabbalah`, `tarot`, `biorhythm`, `ayurveda`, `iching`, `crystals`, `angel_numbers`, `reports`, `languages`. English-only: `dreams`, `location`, `usage`. Languages without translations yet fall back to English.
|
|
484
485
|
<!-- END:LANGS -->
|
|
485
486
|
|
|
486
487
|
```python
|
|
@@ -518,6 +519,9 @@ Every error returns `{ error, code, doc_url }`. Switch on `code`; `error` is rea
|
|
|
518
519
|
| 400 | `validation_error` | A field is missing or invalid. The body lists every failing field at once in issues, each with its path and the expected shape. |
|
|
519
520
|
| 400 | `bad_request` | The request was rejected as a whole, for example a body that is not valid JSON or a date range that ends before it starts. |
|
|
520
521
|
| 400 | `date_out_of_range` | A date lies outside the span the planetary positions are served for. The error names the supported dates. |
|
|
522
|
+
| 400 | `invalid_branding` | The report branding cannot be used, for example a logo that is not a PNG, JPEG, WebP or SVG image. |
|
|
523
|
+
| 400 | `logo_fetch_failed` | The report logo could not be fetched: it must be an HTTPS URL on a public host that answers within the size limit. |
|
|
524
|
+
| 400 | `unsupported_character` | The report text holds a character no report font draws. The error names it: remove or replace it. |
|
|
521
525
|
| 401 | `api_key_required` | No API key was sent. |
|
|
522
526
|
| 401 | `invalid_api_key` | The key sent is malformed or cannot be verified. |
|
|
523
527
|
| 401 | `api_key_revoked` | The key was valid once and has since been revoked from the account page. |
|
|
@@ -540,8 +544,11 @@ Every error returns `{ error, code, doc_url }`. Switch on `code`; `error` is rea
|
|
|
540
544
|
| 429 | `rate_limit_per_minute` | The per-minute limit of the plan was reached. Retry-After gives the seconds to the next minute, and the monthly allowance is not charged. |
|
|
541
545
|
| 429 | `rate_limited` | A rate limit was reached, reported without the plan detail. |
|
|
542
546
|
| 429 | `free_tier_exhausted` | A keyless request has used up its trial allowance. |
|
|
547
|
+
| 429 | `reports_rate_limited` | Too many reports were requested this minute. Retry-After gives the seconds to the next minute. |
|
|
543
548
|
| 500 | `internal_error` | The request failed inside our service. Retry with exponential backoff. |
|
|
544
549
|
| 503 | `compute_saturated` | Heavy calculations are briefly at capacity. Send the same request again after Retry-After seconds. |
|
|
550
|
+
| 503 | `reports_busy` | Report rendering is briefly at capacity. Send the same request again after Retry-After seconds. |
|
|
551
|
+
| 503 | `report_render_timeout` | The report took too long to render. Send the same request again. |
|
|
545
552
|
| Any | `error` | A fallback for a status with no more specific code. The status and the error field carry the signal. |
|
|
546
553
|
<!-- END:ERRORS -->
|
|
547
554
|
|
|
@@ -97,6 +97,7 @@ kundli = roxy.vedic_astrology.generate_birth_chart(
|
|
|
97
97
|
| [Angel Numbers](https://roxyapi.com/api-reference/angel-numbers) | `roxy.angel_numbers` | 4 | Angel numbers API with meanings for 111, 222, 333, 444, 555, 666, 777, 888, 999, 1111, and 75+ sequences covering eve... |
|
|
98
98
|
| [Location and Timezone](https://roxyapi.com/api-reference/location-and-timezone) | `roxy.location` | 3 | Timezone and location API with city search and geocoding across 5,180,000+ cities, towns and villages in 240+ countri... |
|
|
99
99
|
| [Usage](https://roxyapi.com/api-reference/usage) | `roxy.usage` | 1 | Monitor your API usage, check rate limits, and track request consumption |
|
|
100
|
+
| [Reports](https://roxyapi.com/api-reference/reports) | `roxy.reports` | 9 | Branded reports built from the API: a natal chart and more as a print-ready PDF, self-contained HTML or Markdown, whi... |
|
|
100
101
|
| [Languages](https://roxyapi.com/api-reference/languages) | `roxy.languages` | 2 | List the response languages accepted by the `lang` query parameter on every i18n-aware endpoint |
|
|
101
102
|
<!-- END:DOMAINS -->
|
|
102
103
|
|
|
@@ -457,7 +458,7 @@ Never expose your API key client-side. Call Roxy from server code only.
|
|
|
457
458
|
## Multi-language responses
|
|
458
459
|
|
|
459
460
|
<!-- BEGIN:LANGS -->
|
|
460
|
-
Interpretations and editorial text are available in 10 languages: `en`, `tr`, `de`, `es`, `hi`, `pt`, `fr`, `ru`, `zh-Hans`, `zh-Hant`. Pass `lang` as a keyword argument on any supported method. Defaults to `en`. Supported: `astrology`, `vedic_astrology`, `forecast`, `human_design`, `chinese_astrology`, `feng_shui`, `mesoamerican_astrology`, `vastu`, `numerology`, `kabbalah`, `tarot`, `biorhythm`, `ayurveda`, `iching`, `crystals`, `angel_numbers`, `languages`. English-only: `dreams`, `location`, `usage`. Languages without translations yet fall back to English.
|
|
461
|
+
Interpretations and editorial text are available in 10 languages: `en`, `tr`, `de`, `es`, `hi`, `pt`, `fr`, `ru`, `zh-Hans`, `zh-Hant`. Pass `lang` as a keyword argument on any supported method. Defaults to `en`. Supported: `astrology`, `vedic_astrology`, `forecast`, `human_design`, `chinese_astrology`, `feng_shui`, `mesoamerican_astrology`, `vastu`, `numerology`, `kabbalah`, `tarot`, `biorhythm`, `ayurveda`, `iching`, `crystals`, `angel_numbers`, `reports`, `languages`. English-only: `dreams`, `location`, `usage`. Languages without translations yet fall back to English.
|
|
461
462
|
<!-- END:LANGS -->
|
|
462
463
|
|
|
463
464
|
```python
|
|
@@ -495,6 +496,9 @@ Every error returns `{ error, code, doc_url }`. Switch on `code`; `error` is rea
|
|
|
495
496
|
| 400 | `validation_error` | A field is missing or invalid. The body lists every failing field at once in issues, each with its path and the expected shape. |
|
|
496
497
|
| 400 | `bad_request` | The request was rejected as a whole, for example a body that is not valid JSON or a date range that ends before it starts. |
|
|
497
498
|
| 400 | `date_out_of_range` | A date lies outside the span the planetary positions are served for. The error names the supported dates. |
|
|
499
|
+
| 400 | `invalid_branding` | The report branding cannot be used, for example a logo that is not a PNG, JPEG, WebP or SVG image. |
|
|
500
|
+
| 400 | `logo_fetch_failed` | The report logo could not be fetched: it must be an HTTPS URL on a public host that answers within the size limit. |
|
|
501
|
+
| 400 | `unsupported_character` | The report text holds a character no report font draws. The error names it: remove or replace it. |
|
|
498
502
|
| 401 | `api_key_required` | No API key was sent. |
|
|
499
503
|
| 401 | `invalid_api_key` | The key sent is malformed or cannot be verified. |
|
|
500
504
|
| 401 | `api_key_revoked` | The key was valid once and has since been revoked from the account page. |
|
|
@@ -517,8 +521,11 @@ Every error returns `{ error, code, doc_url }`. Switch on `code`; `error` is rea
|
|
|
517
521
|
| 429 | `rate_limit_per_minute` | The per-minute limit of the plan was reached. Retry-After gives the seconds to the next minute, and the monthly allowance is not charged. |
|
|
518
522
|
| 429 | `rate_limited` | A rate limit was reached, reported without the plan detail. |
|
|
519
523
|
| 429 | `free_tier_exhausted` | A keyless request has used up its trial allowance. |
|
|
524
|
+
| 429 | `reports_rate_limited` | Too many reports were requested this minute. Retry-After gives the seconds to the next minute. |
|
|
520
525
|
| 500 | `internal_error` | The request failed inside our service. Retry with exponential backoff. |
|
|
521
526
|
| 503 | `compute_saturated` | Heavy calculations are briefly at capacity. Send the same request again after Retry-After seconds. |
|
|
527
|
+
| 503 | `reports_busy` | Report rendering is briefly at capacity. Send the same request again after Retry-After seconds. |
|
|
528
|
+
| 503 | `report_render_timeout` | The report took too long to render. Send the same request again. |
|
|
522
529
|
| Any | `error` | A fallback for a status with no more specific code. The status and the error field carry the signal. |
|
|
523
530
|
<!-- END:ERRORS -->
|
|
524
531
|
|
|
@@ -60,6 +60,7 @@ Type `roxy.` to see all available namespaces. Type `roxy.{domain}.` in an IDE wi
|
|
|
60
60
|
| [`roxy.angel_numbers`](https://roxyapi.com/api-reference/angel-numbers) | 4 | Angel numbers API with meanings for 111, 222, 333, 444, 555, 666, 777, 888, 999, 1111, and 75+ sequences covering eve... |
|
|
61
61
|
| [`roxy.location`](https://roxyapi.com/api-reference/location-and-timezone) | 3 | Timezone and location API with city search and geocoding across 5,180,000+ cities, towns and villages in 240+ countri... |
|
|
62
62
|
| [`roxy.usage`](https://roxyapi.com/api-reference/usage) | 1 | Monitor your API usage, check rate limits, and track request consumption |
|
|
63
|
+
| [`roxy.reports`](https://roxyapi.com/api-reference/reports) | 9 | Branded reports built from the API: a natal chart and more as a print-ready PDF, self-contained HTML or Markdown, whi... |
|
|
63
64
|
| [`roxy.languages`](https://roxyapi.com/api-reference/languages) | 2 | List the response languages accepted by the `lang` query parameter on every i18n-aware endpoint |
|
|
64
65
|
<!-- END:DOMAINS -->
|
|
65
66
|
|
|
@@ -146,7 +147,7 @@ numerology = roxy.numerology.generate_numerology_chart(
|
|
|
146
147
|
### Multi-language via `lang` kwarg
|
|
147
148
|
|
|
148
149
|
<!-- BEGIN:LANGS -->
|
|
149
|
-
10 languages: `en`, `tr`, `de`, `es`, `hi`, `pt`, `fr`, `ru`, `zh-Hans`, `zh-Hant`. Defaults to `en`. Supported: `astrology`, `vedic_astrology`, `forecast`, `human_design`, `chinese_astrology`, `feng_shui`, `mesoamerican_astrology`, `vastu`, `numerology`, `kabbalah`, `tarot`, `biorhythm`, `ayurveda`, `iching`, `crystals`, `angel_numbers`, `languages`. English-only: `dreams`, `location`, `usage`.
|
|
150
|
+
10 languages: `en`, `tr`, `de`, `es`, `hi`, `pt`, `fr`, `ru`, `zh-Hans`, `zh-Hant`. Defaults to `en`. Supported: `astrology`, `vedic_astrology`, `forecast`, `human_design`, `chinese_astrology`, `feng_shui`, `mesoamerican_astrology`, `vastu`, `numerology`, `kabbalah`, `tarot`, `biorhythm`, `ayurveda`, `iching`, `crystals`, `angel_numbers`, `reports`, `languages`. English-only: `dreams`, `location`, `usage`.
|
|
150
151
|
<!-- END:LANGS -->
|
|
151
152
|
|
|
152
153
|
```python
|
|
@@ -303,6 +304,9 @@ Every error returns `{ error, code, doc_url }`. Switch on `code`; `error` is rea
|
|
|
303
304
|
| 400 | `validation_error` | A field is missing or invalid. The body lists every failing field at once in issues, each with its path and the expected shape. |
|
|
304
305
|
| 400 | `bad_request` | The request was rejected as a whole, for example a body that is not valid JSON or a date range that ends before it starts. |
|
|
305
306
|
| 400 | `date_out_of_range` | A date lies outside the span the planetary positions are served for. The error names the supported dates. |
|
|
307
|
+
| 400 | `invalid_branding` | The report branding cannot be used, for example a logo that is not a PNG, JPEG, WebP or SVG image. |
|
|
308
|
+
| 400 | `logo_fetch_failed` | The report logo could not be fetched: it must be an HTTPS URL on a public host that answers within the size limit. |
|
|
309
|
+
| 400 | `unsupported_character` | The report text holds a character no report font draws. The error names it: remove or replace it. |
|
|
306
310
|
| 401 | `api_key_required` | No API key was sent. |
|
|
307
311
|
| 401 | `invalid_api_key` | The key sent is malformed or cannot be verified. |
|
|
308
312
|
| 401 | `api_key_revoked` | The key was valid once and has since been revoked from the account page. |
|
|
@@ -325,8 +329,11 @@ Every error returns `{ error, code, doc_url }`. Switch on `code`; `error` is rea
|
|
|
325
329
|
| 429 | `rate_limit_per_minute` | The per-minute limit of the plan was reached. Retry-After gives the seconds to the next minute, and the monthly allowance is not charged. |
|
|
326
330
|
| 429 | `rate_limited` | A rate limit was reached, reported without the plan detail. |
|
|
327
331
|
| 429 | `free_tier_exhausted` | A keyless request has used up its trial allowance. |
|
|
332
|
+
| 429 | `reports_rate_limited` | Too many reports were requested this minute. Retry-After gives the seconds to the next minute. |
|
|
328
333
|
| 500 | `internal_error` | The request failed inside our service. Retry with exponential backoff. |
|
|
329
334
|
| 503 | `compute_saturated` | Heavy calculations are briefly at capacity. Send the same request again after Retry-After seconds. |
|
|
335
|
+
| 503 | `reports_busy` | Report rendering is briefly at capacity. Send the same request again after Retry-After seconds. |
|
|
336
|
+
| 503 | `report_render_timeout` | The report took too long to render. Send the same request again. |
|
|
330
337
|
| Any | `error` | A fallback for a status with no more specific code. The status and the error field carry the signal. |
|
|
331
338
|
<!-- END:ERRORS -->
|
|
332
339
|
|
|
@@ -30,6 +30,12 @@ class ErrorCode(str, Enum):
|
|
|
30
30
|
'400. The request was rejected as a whole, for example a body that is not valid JSON or a date range that ends before it starts.'
|
|
31
31
|
DATE_OUT_OF_RANGE = "date_out_of_range"
|
|
32
32
|
'400. A date lies outside the span the planetary positions are served for. The error names the supported dates.'
|
|
33
|
+
INVALID_BRANDING = "invalid_branding"
|
|
34
|
+
'400. The report branding cannot be used, for example a logo that is not a PNG, JPEG, WebP or SVG image.'
|
|
35
|
+
LOGO_FETCH_FAILED = "logo_fetch_failed"
|
|
36
|
+
'400. The report logo could not be fetched: it must be an HTTPS URL on a public host that answers within the size limit.'
|
|
37
|
+
UNSUPPORTED_CHARACTER = "unsupported_character"
|
|
38
|
+
'400. The report text holds a character no report font draws. The error names it: remove or replace it.'
|
|
33
39
|
API_KEY_REQUIRED = "api_key_required"
|
|
34
40
|
'401. No API key was sent.'
|
|
35
41
|
INVALID_API_KEY = "invalid_api_key"
|
|
@@ -74,10 +80,16 @@ class ErrorCode(str, Enum):
|
|
|
74
80
|
'429. A rate limit was reached, reported without the plan detail.'
|
|
75
81
|
FREE_TIER_EXHAUSTED = "free_tier_exhausted"
|
|
76
82
|
'429. A keyless request has used up its trial allowance.'
|
|
83
|
+
REPORTS_RATE_LIMITED = "reports_rate_limited"
|
|
84
|
+
'429. Too many reports were requested this minute. Retry-After gives the seconds to the next minute.'
|
|
77
85
|
INTERNAL_ERROR = "internal_error"
|
|
78
86
|
'500. The request failed inside our service. Retry with exponential backoff.'
|
|
79
87
|
COMPUTE_SATURATED = "compute_saturated"
|
|
80
88
|
'503. Heavy calculations are briefly at capacity. Send the same request again after Retry-After seconds.'
|
|
89
|
+
REPORTS_BUSY = "reports_busy"
|
|
90
|
+
'503. Report rendering is briefly at capacity. Send the same request again after Retry-After seconds.'
|
|
91
|
+
REPORT_RENDER_TIMEOUT = "report_render_timeout"
|
|
92
|
+
'503. The report took too long to render. Send the same request again.'
|
|
81
93
|
ERROR = "error"
|
|
82
94
|
'Any. A fallback for a status with no more specific code. The status and the error field carry the signal.'
|
|
83
95
|
|
|
@@ -817,7 +829,7 @@ class AstrologyDomain(_BaseDomain):
|
|
|
817
829
|
params["lang"] = lang
|
|
818
830
|
return await self._post_async(f"/astrology/profections", body, params=params or None)
|
|
819
831
|
|
|
820
|
-
def generate_progressions(self, *, date: str, time: str, latitude: float, longitude: float, timezone: str, node_type: str | None = None, target_date: str, lang: str | None = None) -> Any:
|
|
832
|
+
def generate_progressions(self, *, date: str, time: str, latitude: float, longitude: float, timezone: str, node_type: str | None = None, target_date: str, house_system: str | None = None, lang: str | None = None) -> Any:
|
|
821
833
|
"""Secondary progressions calculator - progressed chart, progressed Sun and Moon"""
|
|
822
834
|
body: dict[str, Any] = {}
|
|
823
835
|
body["date"] = date
|
|
@@ -828,12 +840,14 @@ class AstrologyDomain(_BaseDomain):
|
|
|
828
840
|
if node_type is not None:
|
|
829
841
|
body["nodeType"] = node_type
|
|
830
842
|
body["targetDate"] = target_date
|
|
843
|
+
if house_system is not None:
|
|
844
|
+
body["houseSystem"] = house_system
|
|
831
845
|
params: dict[str, Any] = {}
|
|
832
846
|
if lang is not None:
|
|
833
847
|
params["lang"] = lang
|
|
834
848
|
return self._post(f"/astrology/progressions", body, params=params or None)
|
|
835
849
|
|
|
836
|
-
async def generate_progressions_async(self, *, date: str, time: str, latitude: float, longitude: float, timezone: str, node_type: str | None = None, target_date: str, lang: str | None = None) -> Any:
|
|
850
|
+
async def generate_progressions_async(self, *, date: str, time: str, latitude: float, longitude: float, timezone: str, node_type: str | None = None, target_date: str, house_system: str | None = None, lang: str | None = None) -> Any:
|
|
837
851
|
"""Secondary progressions calculator - progressed chart, progressed Sun and Moon (async)"""
|
|
838
852
|
body: dict[str, Any] = {}
|
|
839
853
|
body["date"] = date
|
|
@@ -844,6 +858,8 @@ class AstrologyDomain(_BaseDomain):
|
|
|
844
858
|
if node_type is not None:
|
|
845
859
|
body["nodeType"] = node_type
|
|
846
860
|
body["targetDate"] = target_date
|
|
861
|
+
if house_system is not None:
|
|
862
|
+
body["houseSystem"] = house_system
|
|
847
863
|
params: dict[str, Any] = {}
|
|
848
864
|
if lang is not None:
|
|
849
865
|
params["lang"] = lang
|
|
@@ -5361,7 +5377,7 @@ class NumerologyDomain(_BaseDomain):
|
|
|
5361
5377
|
params["lang"] = lang
|
|
5362
5378
|
return await self._post_async(f"/numerology/karmic-debt", body, params=params or None)
|
|
5363
5379
|
|
|
5364
|
-
def generate_numerology_chart(self, *, full_name: str, year: int, month: int, day: int, current_year: int | None = None, lang: str | None = None) -> Any:
|
|
5380
|
+
def generate_numerology_chart(self, *, full_name: str, year: int, month: int, day: int, current_year: int | None = None, target_date: str | None = None, lang: str | None = None) -> Any:
|
|
5365
5381
|
"""Generate numerology chart - Complete numerology reading API"""
|
|
5366
5382
|
body: dict[str, Any] = {}
|
|
5367
5383
|
body["fullName"] = full_name
|
|
@@ -5370,12 +5386,14 @@ class NumerologyDomain(_BaseDomain):
|
|
|
5370
5386
|
body["day"] = day
|
|
5371
5387
|
if current_year is not None:
|
|
5372
5388
|
body["currentYear"] = current_year
|
|
5389
|
+
if target_date is not None:
|
|
5390
|
+
body["targetDate"] = target_date
|
|
5373
5391
|
params: dict[str, Any] = {}
|
|
5374
5392
|
if lang is not None:
|
|
5375
5393
|
params["lang"] = lang
|
|
5376
5394
|
return self._post(f"/numerology/chart", body, params=params or None)
|
|
5377
5395
|
|
|
5378
|
-
async def generate_numerology_chart_async(self, *, full_name: str, year: int, month: int, day: int, current_year: int | None = None, lang: str | None = None) -> Any:
|
|
5396
|
+
async def generate_numerology_chart_async(self, *, full_name: str, year: int, month: int, day: int, current_year: int | None = None, target_date: str | None = None, lang: str | None = None) -> Any:
|
|
5379
5397
|
"""Generate numerology chart - Complete numerology reading API (async)"""
|
|
5380
5398
|
body: dict[str, Any] = {}
|
|
5381
5399
|
body["fullName"] = full_name
|
|
@@ -5384,6 +5402,8 @@ class NumerologyDomain(_BaseDomain):
|
|
|
5384
5402
|
body["day"] = day
|
|
5385
5403
|
if current_year is not None:
|
|
5386
5404
|
body["currentYear"] = current_year
|
|
5405
|
+
if target_date is not None:
|
|
5406
|
+
body["targetDate"] = target_date
|
|
5387
5407
|
params: dict[str, Any] = {}
|
|
5388
5408
|
if lang is not None:
|
|
5389
5409
|
params["lang"] = lang
|
|
@@ -5533,7 +5553,7 @@ class KabbalahDomain(_BaseDomain):
|
|
|
5533
5553
|
params["lang"] = lang
|
|
5534
5554
|
return await self._post_async(f"/kabbalah/compatibility", body, params=params or None)
|
|
5535
5555
|
|
|
5536
|
-
def generate_birth_profile(self, *, date: str, time: str | None = None, timezone: str, angel_dating: str | None = None, year_start: str | None = None, leap_day_policy: str | None = None, after_sunset: bool | None = None, lang: str | None = None) -> Any:
|
|
5556
|
+
def generate_birth_profile(self, *, date: str, time: str | None = None, timezone: str, angel_dating: str | None = None, year_start: str | None = None, leap_day_policy: str | None = None, after_sunset: bool | None = None, target_date: str | None = None, lang: str | None = None) -> Any:
|
|
5537
5557
|
"""Generate a birth profile - Hebrew birthday and birth angel API"""
|
|
5538
5558
|
body: dict[str, Any] = {}
|
|
5539
5559
|
body["date"] = date
|
|
@@ -5548,12 +5568,14 @@ class KabbalahDomain(_BaseDomain):
|
|
|
5548
5568
|
body["leapDayPolicy"] = leap_day_policy
|
|
5549
5569
|
if after_sunset is not None:
|
|
5550
5570
|
body["afterSunset"] = after_sunset
|
|
5571
|
+
if target_date is not None:
|
|
5572
|
+
body["targetDate"] = target_date
|
|
5551
5573
|
params: dict[str, Any] = {}
|
|
5552
5574
|
if lang is not None:
|
|
5553
5575
|
params["lang"] = lang
|
|
5554
5576
|
return self._post(f"/kabbalah/birth-profile", body, params=params or None)
|
|
5555
5577
|
|
|
5556
|
-
async def generate_birth_profile_async(self, *, date: str, time: str | None = None, timezone: str, angel_dating: str | None = None, year_start: str | None = None, leap_day_policy: str | None = None, after_sunset: bool | None = None, lang: str | None = None) -> Any:
|
|
5578
|
+
async def generate_birth_profile_async(self, *, date: str, time: str | None = None, timezone: str, angel_dating: str | None = None, year_start: str | None = None, leap_day_policy: str | None = None, after_sunset: bool | None = None, target_date: str | None = None, lang: str | None = None) -> Any:
|
|
5557
5579
|
"""Generate a birth profile - Hebrew birthday and birth angel API (async)"""
|
|
5558
5580
|
body: dict[str, Any] = {}
|
|
5559
5581
|
body["date"] = date
|
|
@@ -5568,6 +5590,8 @@ class KabbalahDomain(_BaseDomain):
|
|
|
5568
5590
|
body["leapDayPolicy"] = leap_day_policy
|
|
5569
5591
|
if after_sunset is not None:
|
|
5570
5592
|
body["afterSunset"] = after_sunset
|
|
5593
|
+
if target_date is not None:
|
|
5594
|
+
body["targetDate"] = target_date
|
|
5571
5595
|
params: dict[str, Any] = {}
|
|
5572
5596
|
if lang is not None:
|
|
5573
5597
|
params["lang"] = lang
|
|
@@ -7042,6 +7066,448 @@ class UsageDomain(_BaseDomain):
|
|
|
7042
7066
|
return await self._get_async(f"/usage")
|
|
7043
7067
|
|
|
7044
7068
|
|
|
7069
|
+
class ReportsDomain(_BaseDomain):
|
|
7070
|
+
"""Branded reports built from the API: a natal chart and more as a print-ready PDF, self-contained HTML or Markdown, whi..."""
|
|
7071
|
+
|
|
7072
|
+
def generate_bazi_report(self, *, date: str, time: str, timezone: str, latitude: float | None = None, longitude: float | None = None, day_boundary: str | None = None, year_boundary: str | None = None, hour_clock: str | None = None, gender: str, year: int, format: str | None = None, branding: dict[str, Any] | None = None, page: dict[str, Any] | None = None, readings: bool | None = None, lang: str | None = None) -> Any:
|
|
7073
|
+
"""BaZi report - Branded PDF report API"""
|
|
7074
|
+
body: dict[str, Any] = {}
|
|
7075
|
+
body["date"] = date
|
|
7076
|
+
body["time"] = time
|
|
7077
|
+
body["timezone"] = timezone
|
|
7078
|
+
if latitude is not None:
|
|
7079
|
+
body["latitude"] = latitude
|
|
7080
|
+
if longitude is not None:
|
|
7081
|
+
body["longitude"] = longitude
|
|
7082
|
+
if day_boundary is not None:
|
|
7083
|
+
body["dayBoundary"] = day_boundary
|
|
7084
|
+
if year_boundary is not None:
|
|
7085
|
+
body["yearBoundary"] = year_boundary
|
|
7086
|
+
if hour_clock is not None:
|
|
7087
|
+
body["hourClock"] = hour_clock
|
|
7088
|
+
body["gender"] = gender
|
|
7089
|
+
body["year"] = year
|
|
7090
|
+
if format is not None:
|
|
7091
|
+
body["format"] = format
|
|
7092
|
+
if branding is not None:
|
|
7093
|
+
body["branding"] = branding
|
|
7094
|
+
if page is not None:
|
|
7095
|
+
body["page"] = page
|
|
7096
|
+
if readings is not None:
|
|
7097
|
+
body["readings"] = readings
|
|
7098
|
+
params: dict[str, Any] = {}
|
|
7099
|
+
if lang is not None:
|
|
7100
|
+
params["lang"] = lang
|
|
7101
|
+
return self._post(f"/reports/bazi", body, params=params or None)
|
|
7102
|
+
|
|
7103
|
+
async def generate_bazi_report_async(self, *, date: str, time: str, timezone: str, latitude: float | None = None, longitude: float | None = None, day_boundary: str | None = None, year_boundary: str | None = None, hour_clock: str | None = None, gender: str, year: int, format: str | None = None, branding: dict[str, Any] | None = None, page: dict[str, Any] | None = None, readings: bool | None = None, lang: str | None = None) -> Any:
|
|
7104
|
+
"""BaZi report - Branded PDF report API (async)"""
|
|
7105
|
+
body: dict[str, Any] = {}
|
|
7106
|
+
body["date"] = date
|
|
7107
|
+
body["time"] = time
|
|
7108
|
+
body["timezone"] = timezone
|
|
7109
|
+
if latitude is not None:
|
|
7110
|
+
body["latitude"] = latitude
|
|
7111
|
+
if longitude is not None:
|
|
7112
|
+
body["longitude"] = longitude
|
|
7113
|
+
if day_boundary is not None:
|
|
7114
|
+
body["dayBoundary"] = day_boundary
|
|
7115
|
+
if year_boundary is not None:
|
|
7116
|
+
body["yearBoundary"] = year_boundary
|
|
7117
|
+
if hour_clock is not None:
|
|
7118
|
+
body["hourClock"] = hour_clock
|
|
7119
|
+
body["gender"] = gender
|
|
7120
|
+
body["year"] = year
|
|
7121
|
+
if format is not None:
|
|
7122
|
+
body["format"] = format
|
|
7123
|
+
if branding is not None:
|
|
7124
|
+
body["branding"] = branding
|
|
7125
|
+
if page is not None:
|
|
7126
|
+
body["page"] = page
|
|
7127
|
+
if readings is not None:
|
|
7128
|
+
body["readings"] = readings
|
|
7129
|
+
params: dict[str, Any] = {}
|
|
7130
|
+
if lang is not None:
|
|
7131
|
+
params["lang"] = lang
|
|
7132
|
+
return await self._post_async(f"/reports/bazi", body, params=params or None)
|
|
7133
|
+
|
|
7134
|
+
def generate_human_design_report(self, *, date: str, time: str, timezone: str, latitude: float | None = None, longitude: float | None = None, node_type: str | None = None, format: str | None = None, branding: dict[str, Any] | None = None, page: dict[str, Any] | None = None, readings: bool | None = None, lang: str | None = None) -> Any:
|
|
7135
|
+
"""Human Design report - Branded PDF report API"""
|
|
7136
|
+
body: dict[str, Any] = {}
|
|
7137
|
+
body["date"] = date
|
|
7138
|
+
body["time"] = time
|
|
7139
|
+
body["timezone"] = timezone
|
|
7140
|
+
if latitude is not None:
|
|
7141
|
+
body["latitude"] = latitude
|
|
7142
|
+
if longitude is not None:
|
|
7143
|
+
body["longitude"] = longitude
|
|
7144
|
+
if node_type is not None:
|
|
7145
|
+
body["nodeType"] = node_type
|
|
7146
|
+
if format is not None:
|
|
7147
|
+
body["format"] = format
|
|
7148
|
+
if branding is not None:
|
|
7149
|
+
body["branding"] = branding
|
|
7150
|
+
if page is not None:
|
|
7151
|
+
body["page"] = page
|
|
7152
|
+
if readings is not None:
|
|
7153
|
+
body["readings"] = readings
|
|
7154
|
+
params: dict[str, Any] = {}
|
|
7155
|
+
if lang is not None:
|
|
7156
|
+
params["lang"] = lang
|
|
7157
|
+
return self._post(f"/reports/human-design", body, params=params or None)
|
|
7158
|
+
|
|
7159
|
+
async def generate_human_design_report_async(self, *, date: str, time: str, timezone: str, latitude: float | None = None, longitude: float | None = None, node_type: str | None = None, format: str | None = None, branding: dict[str, Any] | None = None, page: dict[str, Any] | None = None, readings: bool | None = None, lang: str | None = None) -> Any:
|
|
7160
|
+
"""Human Design report - Branded PDF report API (async)"""
|
|
7161
|
+
body: dict[str, Any] = {}
|
|
7162
|
+
body["date"] = date
|
|
7163
|
+
body["time"] = time
|
|
7164
|
+
body["timezone"] = timezone
|
|
7165
|
+
if latitude is not None:
|
|
7166
|
+
body["latitude"] = latitude
|
|
7167
|
+
if longitude is not None:
|
|
7168
|
+
body["longitude"] = longitude
|
|
7169
|
+
if node_type is not None:
|
|
7170
|
+
body["nodeType"] = node_type
|
|
7171
|
+
if format is not None:
|
|
7172
|
+
body["format"] = format
|
|
7173
|
+
if branding is not None:
|
|
7174
|
+
body["branding"] = branding
|
|
7175
|
+
if page is not None:
|
|
7176
|
+
body["page"] = page
|
|
7177
|
+
if readings is not None:
|
|
7178
|
+
body["readings"] = readings
|
|
7179
|
+
params: dict[str, Any] = {}
|
|
7180
|
+
if lang is not None:
|
|
7181
|
+
params["lang"] = lang
|
|
7182
|
+
return await self._post_async(f"/reports/human-design", body, params=params or None)
|
|
7183
|
+
|
|
7184
|
+
def generate_kundli_report(self, *, date: str, time: str, latitude: float, longitude: float, timezone: str | None = None, ayanamsa: str | None = None, ayanamsa_value: float | None = None, format: str | None = None, branding: dict[str, Any] | None = None, page: dict[str, Any] | None = None, readings: bool | None = None, lang: str | None = None) -> Any:
|
|
7185
|
+
"""Kundli report - Branded PDF report API"""
|
|
7186
|
+
body: dict[str, Any] = {}
|
|
7187
|
+
body["date"] = date
|
|
7188
|
+
body["time"] = time
|
|
7189
|
+
body["latitude"] = latitude
|
|
7190
|
+
body["longitude"] = longitude
|
|
7191
|
+
if timezone is not None:
|
|
7192
|
+
body["timezone"] = timezone
|
|
7193
|
+
if ayanamsa is not None:
|
|
7194
|
+
body["ayanamsa"] = ayanamsa
|
|
7195
|
+
if ayanamsa_value is not None:
|
|
7196
|
+
body["ayanamsaValue"] = ayanamsa_value
|
|
7197
|
+
if format is not None:
|
|
7198
|
+
body["format"] = format
|
|
7199
|
+
if branding is not None:
|
|
7200
|
+
body["branding"] = branding
|
|
7201
|
+
if page is not None:
|
|
7202
|
+
body["page"] = page
|
|
7203
|
+
if readings is not None:
|
|
7204
|
+
body["readings"] = readings
|
|
7205
|
+
params: dict[str, Any] = {}
|
|
7206
|
+
if lang is not None:
|
|
7207
|
+
params["lang"] = lang
|
|
7208
|
+
return self._post(f"/reports/kundli", body, params=params or None)
|
|
7209
|
+
|
|
7210
|
+
async def generate_kundli_report_async(self, *, date: str, time: str, latitude: float, longitude: float, timezone: str | None = None, ayanamsa: str | None = None, ayanamsa_value: float | None = None, format: str | None = None, branding: dict[str, Any] | None = None, page: dict[str, Any] | None = None, readings: bool | None = None, lang: str | None = None) -> Any:
|
|
7211
|
+
"""Kundli report - Branded PDF report API (async)"""
|
|
7212
|
+
body: dict[str, Any] = {}
|
|
7213
|
+
body["date"] = date
|
|
7214
|
+
body["time"] = time
|
|
7215
|
+
body["latitude"] = latitude
|
|
7216
|
+
body["longitude"] = longitude
|
|
7217
|
+
if timezone is not None:
|
|
7218
|
+
body["timezone"] = timezone
|
|
7219
|
+
if ayanamsa is not None:
|
|
7220
|
+
body["ayanamsa"] = ayanamsa
|
|
7221
|
+
if ayanamsa_value is not None:
|
|
7222
|
+
body["ayanamsaValue"] = ayanamsa_value
|
|
7223
|
+
if format is not None:
|
|
7224
|
+
body["format"] = format
|
|
7225
|
+
if branding is not None:
|
|
7226
|
+
body["branding"] = branding
|
|
7227
|
+
if page is not None:
|
|
7228
|
+
body["page"] = page
|
|
7229
|
+
if readings is not None:
|
|
7230
|
+
body["readings"] = readings
|
|
7231
|
+
params: dict[str, Any] = {}
|
|
7232
|
+
if lang is not None:
|
|
7233
|
+
params["lang"] = lang
|
|
7234
|
+
return await self._post_async(f"/reports/kundli", body, params=params or None)
|
|
7235
|
+
|
|
7236
|
+
def generate_matchmaking_report(self, *, person1: dict[str, Any], person2: dict[str, Any], ayanamsa: str | None = None, ayanamsa_value: float | None = None, format: str | None = None, branding: dict[str, Any] | None = None, page: dict[str, Any] | None = None, readings: bool | None = None, lang: str | None = None) -> Any:
|
|
7237
|
+
"""Kundli matching report - Branded PDF report API"""
|
|
7238
|
+
body: dict[str, Any] = {}
|
|
7239
|
+
body["person1"] = person1
|
|
7240
|
+
body["person2"] = person2
|
|
7241
|
+
if ayanamsa is not None:
|
|
7242
|
+
body["ayanamsa"] = ayanamsa
|
|
7243
|
+
if ayanamsa_value is not None:
|
|
7244
|
+
body["ayanamsaValue"] = ayanamsa_value
|
|
7245
|
+
if format is not None:
|
|
7246
|
+
body["format"] = format
|
|
7247
|
+
if branding is not None:
|
|
7248
|
+
body["branding"] = branding
|
|
7249
|
+
if page is not None:
|
|
7250
|
+
body["page"] = page
|
|
7251
|
+
if readings is not None:
|
|
7252
|
+
body["readings"] = readings
|
|
7253
|
+
params: dict[str, Any] = {}
|
|
7254
|
+
if lang is not None:
|
|
7255
|
+
params["lang"] = lang
|
|
7256
|
+
return self._post(f"/reports/matchmaking", body, params=params or None)
|
|
7257
|
+
|
|
7258
|
+
async def generate_matchmaking_report_async(self, *, person1: dict[str, Any], person2: dict[str, Any], ayanamsa: str | None = None, ayanamsa_value: float | None = None, format: str | None = None, branding: dict[str, Any] | None = None, page: dict[str, Any] | None = None, readings: bool | None = None, lang: str | None = None) -> Any:
|
|
7259
|
+
"""Kundli matching report - Branded PDF report API (async)"""
|
|
7260
|
+
body: dict[str, Any] = {}
|
|
7261
|
+
body["person1"] = person1
|
|
7262
|
+
body["person2"] = person2
|
|
7263
|
+
if ayanamsa is not None:
|
|
7264
|
+
body["ayanamsa"] = ayanamsa
|
|
7265
|
+
if ayanamsa_value is not None:
|
|
7266
|
+
body["ayanamsaValue"] = ayanamsa_value
|
|
7267
|
+
if format is not None:
|
|
7268
|
+
body["format"] = format
|
|
7269
|
+
if branding is not None:
|
|
7270
|
+
body["branding"] = branding
|
|
7271
|
+
if page is not None:
|
|
7272
|
+
body["page"] = page
|
|
7273
|
+
if readings is not None:
|
|
7274
|
+
body["readings"] = readings
|
|
7275
|
+
params: dict[str, Any] = {}
|
|
7276
|
+
if lang is not None:
|
|
7277
|
+
params["lang"] = lang
|
|
7278
|
+
return await self._post_async(f"/reports/matchmaking", body, params=params or None)
|
|
7279
|
+
|
|
7280
|
+
def generate_natal_report(self, *, date: str, time: str, latitude: float, longitude: float, timezone: str, node_type: str | None = None, house_system: str | None = None, format: str | None = None, branding: dict[str, Any] | None = None, page: dict[str, Any] | None = None, readings: bool | None = None, lang: str | None = None) -> Any:
|
|
7281
|
+
"""Natal chart report - Branded PDF report API"""
|
|
7282
|
+
body: dict[str, Any] = {}
|
|
7283
|
+
body["date"] = date
|
|
7284
|
+
body["time"] = time
|
|
7285
|
+
body["latitude"] = latitude
|
|
7286
|
+
body["longitude"] = longitude
|
|
7287
|
+
body["timezone"] = timezone
|
|
7288
|
+
if node_type is not None:
|
|
7289
|
+
body["nodeType"] = node_type
|
|
7290
|
+
if house_system is not None:
|
|
7291
|
+
body["houseSystem"] = house_system
|
|
7292
|
+
if format is not None:
|
|
7293
|
+
body["format"] = format
|
|
7294
|
+
if branding is not None:
|
|
7295
|
+
body["branding"] = branding
|
|
7296
|
+
if page is not None:
|
|
7297
|
+
body["page"] = page
|
|
7298
|
+
if readings is not None:
|
|
7299
|
+
body["readings"] = readings
|
|
7300
|
+
params: dict[str, Any] = {}
|
|
7301
|
+
if lang is not None:
|
|
7302
|
+
params["lang"] = lang
|
|
7303
|
+
return self._post(f"/reports/natal", body, params=params or None)
|
|
7304
|
+
|
|
7305
|
+
async def generate_natal_report_async(self, *, date: str, time: str, latitude: float, longitude: float, timezone: str, node_type: str | None = None, house_system: str | None = None, format: str | None = None, branding: dict[str, Any] | None = None, page: dict[str, Any] | None = None, readings: bool | None = None, lang: str | None = None) -> Any:
|
|
7306
|
+
"""Natal chart report - Branded PDF report API (async)"""
|
|
7307
|
+
body: dict[str, Any] = {}
|
|
7308
|
+
body["date"] = date
|
|
7309
|
+
body["time"] = time
|
|
7310
|
+
body["latitude"] = latitude
|
|
7311
|
+
body["longitude"] = longitude
|
|
7312
|
+
body["timezone"] = timezone
|
|
7313
|
+
if node_type is not None:
|
|
7314
|
+
body["nodeType"] = node_type
|
|
7315
|
+
if house_system is not None:
|
|
7316
|
+
body["houseSystem"] = house_system
|
|
7317
|
+
if format is not None:
|
|
7318
|
+
body["format"] = format
|
|
7319
|
+
if branding is not None:
|
|
7320
|
+
body["branding"] = branding
|
|
7321
|
+
if page is not None:
|
|
7322
|
+
body["page"] = page
|
|
7323
|
+
if readings is not None:
|
|
7324
|
+
body["readings"] = readings
|
|
7325
|
+
params: dict[str, Any] = {}
|
|
7326
|
+
if lang is not None:
|
|
7327
|
+
params["lang"] = lang
|
|
7328
|
+
return await self._post_async(f"/reports/natal", body, params=params or None)
|
|
7329
|
+
|
|
7330
|
+
def generate_numerology_report(self, *, full_name: str, year: int, month: int, day: int, current_year: int | None = None, target_date: str | None = None, format: str | None = None, branding: dict[str, Any] | None = None, page: dict[str, Any] | None = None, readings: bool | None = None, lang: str | None = None) -> Any:
|
|
7331
|
+
"""Numerology report - Branded PDF report API"""
|
|
7332
|
+
body: dict[str, Any] = {}
|
|
7333
|
+
body["fullName"] = full_name
|
|
7334
|
+
body["year"] = year
|
|
7335
|
+
body["month"] = month
|
|
7336
|
+
body["day"] = day
|
|
7337
|
+
if current_year is not None:
|
|
7338
|
+
body["currentYear"] = current_year
|
|
7339
|
+
if target_date is not None:
|
|
7340
|
+
body["targetDate"] = target_date
|
|
7341
|
+
if format is not None:
|
|
7342
|
+
body["format"] = format
|
|
7343
|
+
if branding is not None:
|
|
7344
|
+
body["branding"] = branding
|
|
7345
|
+
if page is not None:
|
|
7346
|
+
body["page"] = page
|
|
7347
|
+
if readings is not None:
|
|
7348
|
+
body["readings"] = readings
|
|
7349
|
+
params: dict[str, Any] = {}
|
|
7350
|
+
if lang is not None:
|
|
7351
|
+
params["lang"] = lang
|
|
7352
|
+
return self._post(f"/reports/numerology", body, params=params or None)
|
|
7353
|
+
|
|
7354
|
+
async def generate_numerology_report_async(self, *, full_name: str, year: int, month: int, day: int, current_year: int | None = None, target_date: str | None = None, format: str | None = None, branding: dict[str, Any] | None = None, page: dict[str, Any] | None = None, readings: bool | None = None, lang: str | None = None) -> Any:
|
|
7355
|
+
"""Numerology report - Branded PDF report API (async)"""
|
|
7356
|
+
body: dict[str, Any] = {}
|
|
7357
|
+
body["fullName"] = full_name
|
|
7358
|
+
body["year"] = year
|
|
7359
|
+
body["month"] = month
|
|
7360
|
+
body["day"] = day
|
|
7361
|
+
if current_year is not None:
|
|
7362
|
+
body["currentYear"] = current_year
|
|
7363
|
+
if target_date is not None:
|
|
7364
|
+
body["targetDate"] = target_date
|
|
7365
|
+
if format is not None:
|
|
7366
|
+
body["format"] = format
|
|
7367
|
+
if branding is not None:
|
|
7368
|
+
body["branding"] = branding
|
|
7369
|
+
if page is not None:
|
|
7370
|
+
body["page"] = page
|
|
7371
|
+
if readings is not None:
|
|
7372
|
+
body["readings"] = readings
|
|
7373
|
+
params: dict[str, Any] = {}
|
|
7374
|
+
if lang is not None:
|
|
7375
|
+
params["lang"] = lang
|
|
7376
|
+
return await self._post_async(f"/reports/numerology", body, params=params or None)
|
|
7377
|
+
|
|
7378
|
+
def generate_synastry_report(self, *, person1: dict[str, Any], person2: dict[str, Any], house_system: str | None = None, format: str | None = None, branding: dict[str, Any] | None = None, page: dict[str, Any] | None = None, readings: bool | None = None, lang: str | None = None) -> Any:
|
|
7379
|
+
"""Synastry report - Branded PDF report API"""
|
|
7380
|
+
body: dict[str, Any] = {}
|
|
7381
|
+
body["person1"] = person1
|
|
7382
|
+
body["person2"] = person2
|
|
7383
|
+
if house_system is not None:
|
|
7384
|
+
body["houseSystem"] = house_system
|
|
7385
|
+
if format is not None:
|
|
7386
|
+
body["format"] = format
|
|
7387
|
+
if branding is not None:
|
|
7388
|
+
body["branding"] = branding
|
|
7389
|
+
if page is not None:
|
|
7390
|
+
body["page"] = page
|
|
7391
|
+
if readings is not None:
|
|
7392
|
+
body["readings"] = readings
|
|
7393
|
+
params: dict[str, Any] = {}
|
|
7394
|
+
if lang is not None:
|
|
7395
|
+
params["lang"] = lang
|
|
7396
|
+
return self._post(f"/reports/synastry", body, params=params or None)
|
|
7397
|
+
|
|
7398
|
+
async def generate_synastry_report_async(self, *, person1: dict[str, Any], person2: dict[str, Any], house_system: str | None = None, format: str | None = None, branding: dict[str, Any] | None = None, page: dict[str, Any] | None = None, readings: bool | None = None, lang: str | None = None) -> Any:
|
|
7399
|
+
"""Synastry report - Branded PDF report API (async)"""
|
|
7400
|
+
body: dict[str, Any] = {}
|
|
7401
|
+
body["person1"] = person1
|
|
7402
|
+
body["person2"] = person2
|
|
7403
|
+
if house_system is not None:
|
|
7404
|
+
body["houseSystem"] = house_system
|
|
7405
|
+
if format is not None:
|
|
7406
|
+
body["format"] = format
|
|
7407
|
+
if branding is not None:
|
|
7408
|
+
body["branding"] = branding
|
|
7409
|
+
if page is not None:
|
|
7410
|
+
body["page"] = page
|
|
7411
|
+
if readings is not None:
|
|
7412
|
+
body["readings"] = readings
|
|
7413
|
+
params: dict[str, Any] = {}
|
|
7414
|
+
if lang is not None:
|
|
7415
|
+
params["lang"] = lang
|
|
7416
|
+
return await self._post_async(f"/reports/synastry", body, params=params or None)
|
|
7417
|
+
|
|
7418
|
+
def generate_tarot_report(self, *, spread: str | None = None, question: str | None = None, seed: str | None = None, format: str | None = None, branding: dict[str, Any] | None = None, page: dict[str, Any] | None = None, readings: bool | None = None, lang: str | None = None) -> Any:
|
|
7419
|
+
"""Tarot reading report - Branded PDF report API"""
|
|
7420
|
+
body: dict[str, Any] = {}
|
|
7421
|
+
if spread is not None:
|
|
7422
|
+
body["spread"] = spread
|
|
7423
|
+
if question is not None:
|
|
7424
|
+
body["question"] = question
|
|
7425
|
+
if seed is not None:
|
|
7426
|
+
body["seed"] = seed
|
|
7427
|
+
if format is not None:
|
|
7428
|
+
body["format"] = format
|
|
7429
|
+
if branding is not None:
|
|
7430
|
+
body["branding"] = branding
|
|
7431
|
+
if page is not None:
|
|
7432
|
+
body["page"] = page
|
|
7433
|
+
if readings is not None:
|
|
7434
|
+
body["readings"] = readings
|
|
7435
|
+
params: dict[str, Any] = {}
|
|
7436
|
+
if lang is not None:
|
|
7437
|
+
params["lang"] = lang
|
|
7438
|
+
return self._post(f"/reports/tarot", body, params=params or None)
|
|
7439
|
+
|
|
7440
|
+
async def generate_tarot_report_async(self, *, spread: str | None = None, question: str | None = None, seed: str | None = None, format: str | None = None, branding: dict[str, Any] | None = None, page: dict[str, Any] | None = None, readings: bool | None = None, lang: str | None = None) -> Any:
|
|
7441
|
+
"""Tarot reading report - Branded PDF report API (async)"""
|
|
7442
|
+
body: dict[str, Any] = {}
|
|
7443
|
+
if spread is not None:
|
|
7444
|
+
body["spread"] = spread
|
|
7445
|
+
if question is not None:
|
|
7446
|
+
body["question"] = question
|
|
7447
|
+
if seed is not None:
|
|
7448
|
+
body["seed"] = seed
|
|
7449
|
+
if format is not None:
|
|
7450
|
+
body["format"] = format
|
|
7451
|
+
if branding is not None:
|
|
7452
|
+
body["branding"] = branding
|
|
7453
|
+
if page is not None:
|
|
7454
|
+
body["page"] = page
|
|
7455
|
+
if readings is not None:
|
|
7456
|
+
body["readings"] = readings
|
|
7457
|
+
params: dict[str, Any] = {}
|
|
7458
|
+
if lang is not None:
|
|
7459
|
+
params["lang"] = lang
|
|
7460
|
+
return await self._post_async(f"/reports/tarot", body, params=params or None)
|
|
7461
|
+
|
|
7462
|
+
def generate_yearly_forecast_report(self, *, date: str, time: str, year: int, latitude: float, longitude: float, timezone: str, house_system: str | None = None, format: str | None = None, branding: dict[str, Any] | None = None, page: dict[str, Any] | None = None, readings: bool | None = None, lang: str | None = None) -> Any:
|
|
7463
|
+
"""Yearly forecast report - Branded PDF report API"""
|
|
7464
|
+
body: dict[str, Any] = {}
|
|
7465
|
+
body["date"] = date
|
|
7466
|
+
body["time"] = time
|
|
7467
|
+
body["year"] = year
|
|
7468
|
+
body["latitude"] = latitude
|
|
7469
|
+
body["longitude"] = longitude
|
|
7470
|
+
body["timezone"] = timezone
|
|
7471
|
+
if house_system is not None:
|
|
7472
|
+
body["houseSystem"] = house_system
|
|
7473
|
+
if format is not None:
|
|
7474
|
+
body["format"] = format
|
|
7475
|
+
if branding is not None:
|
|
7476
|
+
body["branding"] = branding
|
|
7477
|
+
if page is not None:
|
|
7478
|
+
body["page"] = page
|
|
7479
|
+
if readings is not None:
|
|
7480
|
+
body["readings"] = readings
|
|
7481
|
+
params: dict[str, Any] = {}
|
|
7482
|
+
if lang is not None:
|
|
7483
|
+
params["lang"] = lang
|
|
7484
|
+
return self._post(f"/reports/yearly-forecast", body, params=params or None)
|
|
7485
|
+
|
|
7486
|
+
async def generate_yearly_forecast_report_async(self, *, date: str, time: str, year: int, latitude: float, longitude: float, timezone: str, house_system: str | None = None, format: str | None = None, branding: dict[str, Any] | None = None, page: dict[str, Any] | None = None, readings: bool | None = None, lang: str | None = None) -> Any:
|
|
7487
|
+
"""Yearly forecast report - Branded PDF report API (async)"""
|
|
7488
|
+
body: dict[str, Any] = {}
|
|
7489
|
+
body["date"] = date
|
|
7490
|
+
body["time"] = time
|
|
7491
|
+
body["year"] = year
|
|
7492
|
+
body["latitude"] = latitude
|
|
7493
|
+
body["longitude"] = longitude
|
|
7494
|
+
body["timezone"] = timezone
|
|
7495
|
+
if house_system is not None:
|
|
7496
|
+
body["houseSystem"] = house_system
|
|
7497
|
+
if format is not None:
|
|
7498
|
+
body["format"] = format
|
|
7499
|
+
if branding is not None:
|
|
7500
|
+
body["branding"] = branding
|
|
7501
|
+
if page is not None:
|
|
7502
|
+
body["page"] = page
|
|
7503
|
+
if readings is not None:
|
|
7504
|
+
body["readings"] = readings
|
|
7505
|
+
params: dict[str, Any] = {}
|
|
7506
|
+
if lang is not None:
|
|
7507
|
+
params["lang"] = lang
|
|
7508
|
+
return await self._post_async(f"/reports/yearly-forecast", body, params=params or None)
|
|
7509
|
+
|
|
7510
|
+
|
|
7045
7511
|
class LanguagesDomain(_BaseDomain):
|
|
7046
7512
|
"""List the response languages accepted by the `lang` query parameter on every i18n-aware endpoint"""
|
|
7047
7513
|
|
|
@@ -7114,6 +7580,7 @@ class Roxy:
|
|
|
7114
7580
|
self.angel_numbers = AngelNumbersDomain(self._client, self._async_client, retry)
|
|
7115
7581
|
self.location = LocationDomain(self._client, self._async_client, retry)
|
|
7116
7582
|
self.usage = UsageDomain(self._client, self._async_client, retry)
|
|
7583
|
+
self.reports = ReportsDomain(self._client, self._async_client, retry)
|
|
7117
7584
|
self.languages = LanguagesDomain(self._client, self._async_client, retry)
|
|
7118
7585
|
|
|
7119
7586
|
def close(self) -> None:
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
VERSION = "1.3.0"
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
VERSION = "1.2.1"
|
|
File without changes
|
|
File without changes
|
|
File without changes
|