diff --git a/chargebee/main.py b/chargebee/main.py index e1a941c..1de797d 100644 --- a/chargebee/main.py +++ b/chargebee/main.py @@ -142,6 +142,8 @@ def __init__( self.PersonalizedOffer = chargebee.PersonalizedOffer(self.env) self.Plan = chargebee.Plan(self.env) self.PortalSession = chargebee.PortalSession(self.env) + self.Preference = chargebee.Preference(self.env) + self.PreferenceDefinition = chargebee.PreferenceDefinition(self.env) self.PriceVariant = chargebee.PriceVariant(self.env) self.PricingPageSession = chargebee.PricingPageSession(self.env) self.PromotionalCredit = chargebee.PromotionalCredit(self.env) diff --git a/chargebee/models/__init__.py b/chargebee/models/__init__.py index fe5f2d6..5545cbe 100644 --- a/chargebee/models/__init__.py +++ b/chargebee/models/__init__.py @@ -1,4 +1,5 @@ from chargebee.models.enums import ( + AccessMode, AccountHolderType, AccountReceivablesHandling, AccountType, @@ -54,6 +55,7 @@ NotifyReferralSystem, OfflinePaymentMethod, OnEvent, + Operand, Operation, OperationType, PauseOption, @@ -76,6 +78,7 @@ RetryEngine, Role, ScheduleType, + SettingGroup, Source, Status, TaxExemptReason, @@ -298,6 +301,10 @@ from chargebee.models.portal_session.operations import PortalSession +from chargebee.models.preference.operations import Preference + +from chargebee.models.preference_definition.operations import PreferenceDefinition + from chargebee.models.price_variant.operations import PriceVariant from chargebee.models.pricing_page_session.operations import PricingPageSession diff --git a/chargebee/models/enums.py b/chargebee/models/enums.py index 3679ac4..0cc226a 100644 --- a/chargebee/models/enums.py +++ b/chargebee/models/enums.py @@ -1,6 +1,14 @@ from enum import Enum +class AccessMode(Enum): + READ_WRITE = "read_write" + READ_ONLY = "read_only" + + def __str__(self): + return self.value + + class AccountHolderType(Enum): INDIVIDUAL = "individual" COMPANY = "company" @@ -1266,6 +1274,13 @@ def __str__(self): return self.value +class Operand(Enum): + REQUEST_SOURCE = "request_source" + + def __str__(self): + return self.value + + class Operation(Enum): CREATE = "create" UPDATE = "update" @@ -1598,6 +1613,15 @@ def __str__(self): return self.value +class SettingGroup(Enum): + CONTRACT_TERMS = "contract_terms" + SUB_CANCELATION = "sub_cancelation" + BILLING_RULES = "billing_rules" + + def __str__(self): + return self.value + + class Source(Enum): ADMIN_CONSOLE = "admin_console" API = "api" diff --git a/chargebee/models/preference/__init__.py b/chargebee/models/preference/__init__.py new file mode 100644 index 0000000..f08829a --- /dev/null +++ b/chargebee/models/preference/__init__.py @@ -0,0 +1,2 @@ +from .operations import Preference +from .responses import PreferenceResponse diff --git a/chargebee/models/preference/operations.py b/chargebee/models/preference/operations.py new file mode 100644 index 0000000..52cd224 --- /dev/null +++ b/chargebee/models/preference/operations.py @@ -0,0 +1,77 @@ +from .responses import * +from chargebee import request, environment +from typing import TypedDict, Required, NotRequired, Dict, List, Any, cast +from chargebee.filters import Filters + +@dataclass +class Preference: + + env: environment.Environment + + class Variant(TypedDict): + value: Required[str] + allow_override_in_interface: NotRequired[bool] + allow_override_in_api: NotRequired[bool] + criteria: NotRequired[List[Criteria]] + + class UpsertPreferenceParams(TypedDict): + id: Required[str] + value: Required[str] + allow_override_in_interface: NotRequired[bool] + allow_override_in_api: NotRequired[bool] + variants: NotRequired[List[Dict[Any, Any]]] + + + class ListParams(TypedDict): + setting_group: Required[Filters.EnumFilter] + + class UpsertParams(TypedDict): + preferences: NotRequired[List["Preference.UpsertPreferenceParams"]] + + def list(self, params: ListParams, headers=None) -> ListResponse: + jsonKeys = { + + } + options = { + + } + return request.send_list_request( + "get", + request.uri_path("preferences"), + self.env, + cast(Dict[Any, Any], params), + headers, + ListResponse, + None, + False, + jsonKeys, + options, + resource="preference", + operation="list", + ) + + def upsert(self, params: UpsertParams, headers=None) -> UpsertResponse: + jsonKeys = { + + "variants": 1, + + } + options = { + + "isIdempotent": True, + + } + return request.send( + "post", + request.uri_path("preferences"), + self.env, + cast(Dict[Any, Any], params), + headers, + UpsertResponse, + None, + False, + jsonKeys, + options, + resource="preference", + operation="upsert", + ) \ No newline at end of file diff --git a/chargebee/models/preference/responses.py b/chargebee/models/preference/responses.py new file mode 100644 index 0000000..56c5529 --- /dev/null +++ b/chargebee/models/preference/responses.py @@ -0,0 +1,45 @@ +from dataclasses import dataclass +from chargebee.model import Model +from typing import Dict, List, Any +from chargebee.response import Response + +@dataclass +class Criteria(Model): + raw_data: Dict[Any, Any] = None + operand: str = None + operator: str = None + values: List[str] = None + + +@dataclass +class VariantResponse(Model): + raw_data: Dict[Any, Any] = None + value: str = None + allow_override_in_interface: bool = None + allow_override_in_api: bool = None + criteria: List[Criteria] = None + + +@dataclass +class PreferenceResponse(Model): + raw_data: Dict[Any, Any] = None + id: str = None + setting_group: str = None + value: str = None + allow_override_in_interface: bool = None + allow_override_in_api: bool = None + variants: List[VariantResponse] = None + created_at: int = None + updated_at: int = None + + +@dataclass +class ListResponse(Response): + + preference: PreferenceResponse + +@dataclass +class UpsertResponse(Response): + is_idempotency_replayed: bool + preference: PreferenceResponse + diff --git a/chargebee/models/preference_definition/__init__.py b/chargebee/models/preference_definition/__init__.py new file mode 100644 index 0000000..5cb8dae --- /dev/null +++ b/chargebee/models/preference_definition/__init__.py @@ -0,0 +1,2 @@ +from .operations import PreferenceDefinition +from .responses import PreferenceDefinitionResponse diff --git a/chargebee/models/preference_definition/operations.py b/chargebee/models/preference_definition/operations.py new file mode 100644 index 0000000..349ff2c --- /dev/null +++ b/chargebee/models/preference_definition/operations.py @@ -0,0 +1,67 @@ +from .responses import * +from chargebee import request, environment +from typing import TypedDict, Required, NotRequired, Dict, List, Any, cast +from enum import Enum +from chargebee.filters import Filters +from chargebee.models import enums + +@dataclass +class PreferenceDefinition: + + env: environment.Environment + class ApplicabilityOperator(Enum): + AND = "and" + OR = "or" + + def __str__(self): + return self.value + + class Operator(Enum): + IS = "is" + IN = "in" + + def __str__(self): + return self.value + class VariantCriteriaAllowedOperator(Enum): + IS = "is" + IN = "in" + + def __str__(self): + return self.value + + class Applicability(TypedDict): + setting: NotRequired[str] + operator: NotRequired["PreferenceDefinition.Operator"] + values: NotRequired[List[str]] + + class VariantCriteria(TypedDict): + operand: NotRequired[enums.Operand] + allowed_operator: NotRequired["PreferenceDefinition.VariantCriteriaAllowedOperator"] + value_schema: NotRequired[ValueSchema] + + + + class ListDefinitionsParams(TypedDict): + setting_group: Required[Filters.EnumFilter] + + def list_definitions(self, params: ListDefinitionsParams, headers=None) -> ListDefinitionsResponse: + jsonKeys = { + + } + options = { + + } + return request.send( + "get", + request.uri_path("preferences", "definitions"), + self.env, + cast(Dict[Any, Any], params), + headers, + ListDefinitionsResponse, + None, + False, + jsonKeys, + options, + resource="preferenceDefinition", + operation="listDefinitions", + ) \ No newline at end of file diff --git a/chargebee/models/preference_definition/responses.py b/chargebee/models/preference_definition/responses.py new file mode 100644 index 0000000..f84a306 --- /dev/null +++ b/chargebee/models/preference_definition/responses.py @@ -0,0 +1,74 @@ +from dataclasses import dataclass +from chargebee.model import Model +from typing import Dict, List, Any +from chargebee.response import Response + +@dataclass +class AllowedValueResponse(Model): + raw_data: Dict[Any, Any] = None + value: str = None + description: str = None + + +@dataclass +class ValueSchemaItemsResponse(Model): + raw_data: Dict[Any, Any] = None + type: str = None + allowed_values: List[AllowedValueResponse] = None + + +@dataclass +class ValueSchema(Model): + raw_data: Dict[Any, Any] = None + type: str = None + min_value: int = None + max_value: int = None + max_chars: int = None + allowed_values: List[AllowedValueResponse] = None + items: ValueSchemaItemsResponse = None + + +ValueSchemaResponse = ValueSchema + + +@dataclass +class ApplicabilityResponse(Model): + raw_data: Dict[Any, Any] = None + setting: str = None + operator: str = None + values: List[str] = None + + +@dataclass +class VariantCriteriaResponse(Model): + raw_data: Dict[Any, Any] = None + operand: str = None + allowed_operator: str = None + value_schema: ValueSchema = None + + +@dataclass +class PreferenceDefinitionResponse(Model): + raw_data: Dict[Any, Any] = None + id: str = None + setting_group: str = None + main_group: str = None + sub_group: str = None + description: str = None + doc_link: str = None + access_mode: str = None + overridable_in_interface: bool = None + overridable_in_api: bool = None + applicability_operator: str = None + is_namespace: bool = None + key_internal_name: str = None + applicability: List[ApplicabilityResponse] = None + value_schema: ValueSchemaResponse = None + variant_criteria: List[VariantCriteriaResponse] = None + + +@dataclass +class ListDefinitionsResponse(Response): + + preference_definition: PreferenceDefinitionResponse +