From 94168b2b7bad5e487e1d29586eb83094968eab8d Mon Sep 17 00:00:00 2001 From: h3yAlias Date: Sat, 26 Jul 2025 17:57:03 +0300 Subject: [PATCH 1/5] feat(mvp): added support for token settings in py sdk --- src/rushdb/client.py | 10 ++++++++++ src/rushdb/utils/token_prefix.py | 30 ++++++++++++++++++++++++++++++ 2 files changed, 40 insertions(+) create mode 100644 src/rushdb/utils/token_prefix.py diff --git a/src/rushdb/client.py b/src/rushdb/client.py index 9bc07a0..1efd2e6 100644 --- a/src/rushdb/client.py +++ b/src/rushdb/client.py @@ -11,6 +11,7 @@ import urllib.request from typing import Any, Dict, Optional +from .utils.token_prefix import extract_mixed_properties_from_token from .api.labels import LabelsAPI from .api.properties import PropertiesAPI from .api.records import RecordsAPI @@ -102,6 +103,15 @@ def __init__(self, api_key: str, base_url: Optional[str] = None): ... base_url="https://my-rushdb.company.com/api/v1" ... ) """ + settings, raw_key = extract_mixed_properties_from_token(api_key) + + self.server_settings = { + 'customDB': settings['customDB'], + 'managedDB': settings['managedDB'], + 'selfHosted': settings['selfHosted'], + 'canceled': settings['canceled'], + 'plan_type': settings['planType'], + } if settings else None self.base_url = (base_url or self.DEFAULT_BASE_URL).rstrip("/") self.api_key = api_key self.records = RecordsAPI(self) diff --git a/src/rushdb/utils/token_prefix.py b/src/rushdb/utils/token_prefix.py new file mode 100644 index 0000000..d91c32c --- /dev/null +++ b/src/rushdb/utils/token_prefix.py @@ -0,0 +1,30 @@ +import re +from typing import Dict, Optional, Tuple + +PlanPrefix = { + 'initial': 'in', + 'extended': 'ex', + 'fullFeatured': 'ff', +} + +def extract_mixed_properties_from_token( + prefixed_token: str +) -> Tuple[Optional[Dict[str, bool]], str]: + matched = re.match(r'^([a-z]{2})_([01]{4}\d*)_(.+)$', prefixed_token) + if not matched: + return None, prefixed_token + + prefix, bits, raw = matched.groups() + plan = next((p for p, plan in PlanPrefix.items() if plan == prefix), None) + if plan is None: + return None, prefixed_token + + b_custom, b_managed, b_self, b_canceled = bits[:4] + settings = { + 'planType': plan, + 'customDB': b_custom == '1', + 'managedDB': b_managed == '1', + 'selfHosted': b_self == '1', + 'canceled': b_canceled== '1', + } + return settings, raw \ No newline at end of file From bab3a8f1813dc2ba62ef42495a3c5c1a12c1c512 Mon Sep 17 00:00:00 2001 From: h3yAlias Date: Sat, 26 Jul 2025 18:28:16 +0300 Subject: [PATCH 2/5] chore(mvp): linters && types --- src/rushdb/client.py | 20 ++++++++++++-------- src/rushdb/utils/token_prefix.py | 25 +++++++++++++------------ 2 files changed, 25 insertions(+), 20 deletions(-) diff --git a/src/rushdb/client.py b/src/rushdb/client.py index 1efd2e6..436a71b 100644 --- a/src/rushdb/client.py +++ b/src/rushdb/client.py @@ -11,12 +11,12 @@ import urllib.request from typing import Any, Dict, Optional -from .utils.token_prefix import extract_mixed_properties_from_token from .api.labels import LabelsAPI from .api.properties import PropertiesAPI from .api.records import RecordsAPI from .api.transactions import TransactionsAPI from .common import RushDBError +from .utils.token_prefix import extract_mixed_properties_from_token class RushDB: @@ -105,13 +105,17 @@ def __init__(self, api_key: str, base_url: Optional[str] = None): """ settings, raw_key = extract_mixed_properties_from_token(api_key) - self.server_settings = { - 'customDB': settings['customDB'], - 'managedDB': settings['managedDB'], - 'selfHosted': settings['selfHosted'], - 'canceled': settings['canceled'], - 'plan_type': settings['planType'], - } if settings else None + self.server_settings = ( + { + "customDB": settings["customDB"], + "managedDB": settings["managedDB"], + "selfHosted": settings["selfHosted"], + "canceled": settings["canceled"], + "plan_type": settings["planType"], + } + if settings + else None + ) self.base_url = (base_url or self.DEFAULT_BASE_URL).rstrip("/") self.api_key = api_key self.records = RecordsAPI(self) diff --git a/src/rushdb/utils/token_prefix.py b/src/rushdb/utils/token_prefix.py index d91c32c..fcb47f3 100644 --- a/src/rushdb/utils/token_prefix.py +++ b/src/rushdb/utils/token_prefix.py @@ -2,15 +2,16 @@ from typing import Dict, Optional, Tuple PlanPrefix = { - 'initial': 'in', - 'extended': 'ex', - 'fullFeatured': 'ff', + "initial": "in", + "extended": "ex", + "fullFeatured": "ff", } + def extract_mixed_properties_from_token( - prefixed_token: str + prefixed_token: str, ) -> Tuple[Optional[Dict[str, bool]], str]: - matched = re.match(r'^([a-z]{2})_([01]{4}\d*)_(.+)$', prefixed_token) + matched = re.match(r"^([a-z]{2})_([01]{4}\d*)_(.+)$", prefixed_token) if not matched: return None, prefixed_token @@ -19,12 +20,12 @@ def extract_mixed_properties_from_token( if plan is None: return None, prefixed_token - b_custom, b_managed, b_self, b_canceled = bits[:4] + b_custom, b_managed, b_self, b_canceled = tuple(bits[:4]) settings = { - 'planType': plan, - 'customDB': b_custom == '1', - 'managedDB': b_managed == '1', - 'selfHosted': b_self == '1', - 'canceled': b_canceled== '1', + "planType": plan, + "customDB": b_custom == "1", + "managedDB": b_managed == "1", + "selfHosted": b_self == "1", + "canceled": b_canceled == "1", } - return settings, raw \ No newline at end of file + return settings, raw From 2df235f12a810ec7717cd76a5c3e35db8ffd8c23 Mon Sep 17 00:00:00 2001 From: h3yAlias Date: Sat, 26 Jul 2025 19:12:12 +0300 Subject: [PATCH 3/5] fix(mvp): removed canceled prop --- src/rushdb/client.py | 1 - src/rushdb/utils/token_prefix.py | 3 +-- 2 files changed, 1 insertion(+), 3 deletions(-) diff --git a/src/rushdb/client.py b/src/rushdb/client.py index 436a71b..415f575 100644 --- a/src/rushdb/client.py +++ b/src/rushdb/client.py @@ -110,7 +110,6 @@ def __init__(self, api_key: str, base_url: Optional[str] = None): "customDB": settings["customDB"], "managedDB": settings["managedDB"], "selfHosted": settings["selfHosted"], - "canceled": settings["canceled"], "plan_type": settings["planType"], } if settings diff --git a/src/rushdb/utils/token_prefix.py b/src/rushdb/utils/token_prefix.py index fcb47f3..41201b6 100644 --- a/src/rushdb/utils/token_prefix.py +++ b/src/rushdb/utils/token_prefix.py @@ -20,12 +20,11 @@ def extract_mixed_properties_from_token( if plan is None: return None, prefixed_token - b_custom, b_managed, b_self, b_canceled = tuple(bits[:4]) + b_custom, b_managed, b_self = tuple(bits[:4]) settings = { "planType": plan, "customDB": b_custom == "1", "managedDB": b_managed == "1", "selfHosted": b_self == "1", - "canceled": b_canceled == "1", } return settings, raw From ae09c7d6e5f025f74c67d760109c8dcccc89e145 Mon Sep 17 00:00:00 2001 From: h3yAlias Date: Sat, 26 Jul 2025 19:12:42 +0300 Subject: [PATCH 4/5] chore(mvp): updated version --- pyproject.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pyproject.toml b/pyproject.toml index 6c1da0d..e67ae17 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [project] name = "rushdb" -version = "1.9.0" +version = "1.10.0" description = "RushDB Python SDK" authors = [ {name = "RushDB Team", email = "hi@rushdb.com"} From 2cdc1f52e301bc0b1abebafe2d6bf883a49c98e6 Mon Sep 17 00:00:00 2001 From: h3yAlias Date: Sun, 27 Jul 2025 15:06:50 +0300 Subject: [PATCH 5/5] chore(mvp): removed extra bit --- src/rushdb/utils/token_prefix.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/rushdb/utils/token_prefix.py b/src/rushdb/utils/token_prefix.py index 41201b6..9a870c5 100644 --- a/src/rushdb/utils/token_prefix.py +++ b/src/rushdb/utils/token_prefix.py @@ -20,7 +20,7 @@ def extract_mixed_properties_from_token( if plan is None: return None, prefixed_token - b_custom, b_managed, b_self = tuple(bits[:4]) + b_custom, b_managed, b_self = tuple(bits[:3]) settings = { "planType": plan, "customDB": b_custom == "1", pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy