roxy-sdk 1.2.2__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.2 → roxy_sdk-1.3.0}/PKG-INFO +9 -2
- {roxy_sdk-1.2.2 → roxy_sdk-1.3.0}/README.md +8 -1
- {roxy_sdk-1.2.2 → roxy_sdk-1.3.0}/pyproject.toml +1 -1
- {roxy_sdk-1.2.2 → roxy_sdk-1.3.0}/pyproject.toml.orig +1 -1
- {roxy_sdk-1.2.2 → roxy_sdk-1.3.0}/src/roxy_sdk/AGENTS.md +8 -1
- {roxy_sdk-1.2.2 → roxy_sdk-1.3.0}/src/roxy_sdk/factory.py +455 -0
- roxy_sdk-1.3.0/src/roxy_sdk/version.py +1 -0
- roxy_sdk-1.2.2/src/roxy_sdk/version.py +0 -1
- {roxy_sdk-1.2.2 → roxy_sdk-1.3.0}/LICENSE +0 -0
- {roxy_sdk-1.2.2 → roxy_sdk-1.3.0}/src/roxy_sdk/__init__.py +0 -0
- {roxy_sdk-1.2.2 → 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
|
|
|
@@ -7054,6 +7066,448 @@ class UsageDomain(_BaseDomain):
|
|
|
7054
7066
|
return await self._get_async(f"/usage")
|
|
7055
7067
|
|
|
7056
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
|
+
|
|
7057
7511
|
class LanguagesDomain(_BaseDomain):
|
|
7058
7512
|
"""List the response languages accepted by the `lang` query parameter on every i18n-aware endpoint"""
|
|
7059
7513
|
|
|
@@ -7126,6 +7580,7 @@ class Roxy:
|
|
|
7126
7580
|
self.angel_numbers = AngelNumbersDomain(self._client, self._async_client, retry)
|
|
7127
7581
|
self.location = LocationDomain(self._client, self._async_client, retry)
|
|
7128
7582
|
self.usage = UsageDomain(self._client, self._async_client, retry)
|
|
7583
|
+
self.reports = ReportsDomain(self._client, self._async_client, retry)
|
|
7129
7584
|
self.languages = LanguagesDomain(self._client, self._async_client, retry)
|
|
7130
7585
|
|
|
7131
7586
|
def close(self) -> None:
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
VERSION = "1.3.0"
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
VERSION = "1.2.2"
|
|
File without changes
|
|
File without changes
|
|
File without changes
|