Skip to content

Commit f7b5bf1

Browse files
authored
Merge pull request #31 from remnawave:development
Improve error handling in API requests
2 parents 95a93d7 + e429a51 commit f7b5bf1

File tree

6 files changed

+32
-9
lines changed

6 files changed

+32
-9
lines changed

pyproject.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
[project]
22
name = "remnawave"
3-
version = "2.3.2"
3+
version = "2.3.2rc1"
44
description = "A Python SDK for interacting with the Remnawave API v2.3.2."
55
authors = [
66
{name = "Artem",email = "dev@forestsnet.com"}

remnawave/models/__init__.py

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -207,6 +207,9 @@
207207
SubscriptionSettingsResponseDto,
208208
UpdateSubscriptionSettingsRequestDto,
209209
UpdateSubscriptionSettingsResponseDto,
210+
CustomRemarksDto,
211+
HwidSettingsDto,
212+
# Backward compatibility aliases
210213
CustomRemarks,
211214
HwidSettings,
212215
)
@@ -492,6 +495,9 @@
492495
"GetSubscriptionSettingsResponseDto",
493496
"SubscriptionSettingsResponseDto",
494497
"UpdateSubscriptionSettingsRequestDto",
498+
"CustomRemarksDto",
499+
"HwidSettingsDto",
500+
# Backward compatibility aliases
495501
"CustomRemarks",
496502
"HwidSettings",
497503
"UpdateSubscriptionSettingsResponseDto",

remnawave/models/external_squads.py

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
from uuid import UUID
55

66
from pydantic import BaseModel, Field
7+
from remnawave.models import CustomRemarksDto, HwidSettingsDto
78

89

910
class TemplateType(StrEnum):
@@ -54,6 +55,8 @@ class ExternalSquadDto(BaseModel):
5455
subscription_settings: Optional[ExternalSquadSubscriptionSettingsDto] = Field(None, alias="subscriptionSettings")
5556
host_overrides: Optional[ExternalSquadHostOverridesDto] = Field(None, alias="hostOverrides")
5657
response_headers: Optional[Dict[str, str]] = Field(None, alias="responseHeaders")
58+
hwid_settings: Optional[HwidSettingsDto] = Field(None, alias="hwidSettings")
59+
custom_remarks: Optional[CustomRemarksDto] = Field(None, alias="customRemarks")
5760
created_at: datetime = Field(alias="createdAt")
5861
updated_at: datetime = Field(alias="updatedAt")
5962

@@ -87,6 +90,8 @@ class UpdateExternalSquadRequestDto(BaseModel):
8790
templates: Optional[List[ExternalSquadTemplateDto]] = None
8891
subscription_settings: Optional[ExternalSquadSubscriptionSettingsDto] = Field(None, serialization_alias="subscriptionSettings")
8992
host_overrides: Optional[ExternalSquadHostOverridesDto] = Field(None, serialization_alias="hostOverrides")
93+
hwid_settings: Optional[HwidSettingsDto] = Field(None, alias="hwidSettings")
94+
custom_remarks: Optional[CustomRemarksDto] = Field(None, alias="customRemarks")
9095
response_headers: Optional[Dict[str, str]] = Field(None, serialization_alias="responseHeaders")
9196

9297

remnawave/models/subscriptions_settings.py

Lines changed: 11 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,7 @@ class ResponseRules(BaseModel):
5555
rules: List[ResponseRule]
5656

5757

58-
class CustomRemarks(BaseModel):
58+
class CustomRemarksDto(BaseModel):
5959
"""Custom remarks for different user states"""
6060
expired_users: List[str] = Field(alias="expiredUsers", min_length=1)
6161
limited_users: List[str] = Field(alias="limitedUsers", min_length=1)
@@ -64,7 +64,7 @@ class CustomRemarks(BaseModel):
6464
empty_internal_squads: List[str] = Field(alias="emptyInternalSquads", min_length=1)
6565

6666

67-
class HwidSettings(BaseModel):
67+
class HwidSettingsDto(BaseModel):
6868
"""HWID (Hardware ID) settings"""
6969
enabled: bool
7070
fallback_device_limit: int = Field(alias="fallbackDeviceLimit")
@@ -82,15 +82,15 @@ class SubscriptionSettingsResponseDto(BaseModel):
8282
serve_json_at_base_subscription: bool = Field(alias="serveJsonAtBaseSubscription")
8383
show_custom_remarks: bool = Field(alias="isShowCustomRemarks")
8484

85-
custom_remarks: CustomRemarks = Field(alias="customRemarks")
85+
custom_remarks: CustomRemarksDto = Field(alias="customRemarks")
8686

8787
happ_announce: Optional[str] = Field(None, alias="happAnnounce")
8888
happ_routing: Optional[str] = Field(None, alias="happRouting")
8989
custom_response_headers: Optional[Dict[str, str]] = Field(None, alias="customResponseHeaders")
9090
randomize_hosts: bool = Field(alias="randomizeHosts")
9191
response_rules: Optional[ResponseRules] = Field(None, alias="responseRules")
9292

93-
hwid_settings: Optional[HwidSettings] = Field(None, alias="hwidSettings")
93+
hwid_settings: Optional[HwidSettingsDto] = Field(None, alias="hwidSettings")
9494

9595
created_at: datetime = Field(alias="createdAt")
9696
updated_at: datetime = Field(alias="updatedAt")
@@ -118,7 +118,7 @@ class UpdateSubscriptionSettingsRequestDto(BaseModel):
118118
)
119119
is_show_custom_remarks: Optional[bool] = Field(None, serialization_alias="isShowCustomRemarks")
120120

121-
custom_remarks: Optional[CustomRemarks] = Field(None, serialization_alias="customRemarks")
121+
custom_remarks: Optional[CustomRemarksDto] = Field(None, serialization_alias="customRemarks")
122122

123123
happ_announce: Optional[Annotated[str, StringConstraints(max_length=200)]] = Field(
124124
None, serialization_alias="happAnnounce"
@@ -130,4 +130,9 @@ class UpdateSubscriptionSettingsRequestDto(BaseModel):
130130
randomize_hosts: Optional[bool] = Field(None, serialization_alias="randomizeHosts")
131131
response_rules: Optional[ResponseRules] = Field(None, serialization_alias="responseRules")
132132

133-
hwid_settings: Optional[HwidSettings] = Field(None, serialization_alias="hwidSettings")
133+
hwid_settings: Optional[HwidSettingsDto] = Field(None, serialization_alias="hwidSettings")
134+
135+
136+
# Backward compatibility aliases
137+
CustomRemarks = CustomRemarksDto
138+
HwidSettings = HwidSettingsDto

remnawave/models/users.py

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
from datetime import datetime
2-
from typing import Annotated, List, Optional
2+
from typing import Annotated, List, Literal, Optional
33
from uuid import UUID
44

55
from pydantic import (
@@ -177,6 +177,13 @@ def happ(self) -> HappCrypto:
177177
"""Generate Happ Crypto Link"""
178178
crypto_link = create_happ_crypto_link(self.subscription_url)
179179
return HappCrypto(cryptoLink=crypto_link)
180+
181+
def happ_with_version(self, version: Literal["v3", "v4"] = "v4") -> HappCrypto:
182+
return self._generate_happ(version=version)
183+
184+
def _generate_happ(self, version):
185+
crypto_link = create_happ_crypto_link(content=self.subscription_url, method=version)
186+
return HappCrypto(cryptoLink=crypto_link)
180187

181188

182189
class RevokeUserRequestDto(BaseModel):

remnawave/utils/happ_crypt.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,6 @@ def create_happ_crypto_link(content: str, method: Literal["v3", "v4"] = "v4") ->
5252
content.encode("utf-8"), padding.PKCS1v15() # RSA_PKCS1_PADDING
5353
)
5454

55-
return "happ://crypt{" + method.lower().replace("v", "") + "/" + base64.b64encode(encrypted).decode()
55+
return "happ://crypt" + method.lower().replace("v", "") + "/" + base64.b64encode(encrypted).decode()
5656
except Exception:
5757
return ""

0 commit comments

Comments
 (0)