From 7c793a00c9499dcfeeae2aaeb0a73fde91c91002 Mon Sep 17 00:00:00 2001 From: sdi Date: Tue, 19 Aug 2025 00:03:37 +0300 Subject: [PATCH 1/6] add more account attributes --- yeti_switch_api/orm/__init__.py | 1 + yeti_switch_api/orm/account.py | 50 ++++++++++++++++++++++++- yeti_switch_api/orm/invoice_template.py | 10 +++++ yeti_switch_api/orm/orm_client.py | 2 + yeti_switch_api/orm/package_counter.py | 3 +- 5 files changed, 64 insertions(+), 2 deletions(-) create mode 100644 yeti_switch_api/orm/invoice_template.py diff --git a/yeti_switch_api/orm/__init__.py b/yeti_switch_api/orm/__init__.py index ea35075..7485f32 100644 --- a/yeti_switch_api/orm/__init__.py +++ b/yeti_switch_api/orm/__init__.py @@ -3,6 +3,7 @@ from .contact import Contact # noqa: F401 from .account import Account # noqa: F401 from .invoice import Invoice # noqa: F401 +from .invoice_template import InvoiceTemplate # noqa: F401 from .invoice_originated_destination import InvoiceOriginatedDestination # noqa: F401 from .invoice_originated_network import InvoiceOriginatedNetwork # noqa: F401 from .invoice_terminated_destination import InvoiceTerminatedDestination # noqa: F401 diff --git a/yeti_switch_api/orm/account.py b/yeti_switch_api/orm/account.py index 5af40dd..af747fa 100644 --- a/yeti_switch_api/orm/account.py +++ b/yeti_switch_api/orm/account.py @@ -9,10 +9,58 @@ class Meta: contractor = RelationField("contractor") timezone = RelationField("timezone") + external-id = AttributeField("external-id") + uuid = AttributeField("uuid") + name = AttributeField("name") balance = AttributeField("balance") min_balance = AttributeField("min-balance") max_balance = AttributeField("max-balance") + vat = AttributeField("vat") + balance_low_threshold = AttributeField("balance-low-threshold") + balance_high_threshold = AttributeField("balance-high-threshold") + send_balance_notifications_to = AttributeField("send-balance-notifications-to") + + destination_rate_limit = AttributeField("destination-rate-limit") + max_call_duration = AttributeField("max-call-duration") + origination_capacity = AttributeField("origination-capacity") + termination_capacity = AttributeField("termination-capacity") + total_capacity = AttributeField("total-capacity") + + invoice_template = RelationField("invoice-template") + invoice_period = AttributeField("invoice-period-id") + send_invoices_to = AttributeField("send-invoices-to") + + INVOICE_PERIOD_DAILY = 1 + INVOICE_PERIOD_WEEKLY = 2 + INVOICE_PERIOD_BIWEEKLY = 3 + INVOICE_PERIOD_MONTHLY = 4 + INVOICE_PERIOD_BIWEEKLY_SPLIT = 5 + INVOICE_PERIOD_WEEKLY_SPLIT = 6 def creatable_fields(self): - return ["name", "contractor", "timezone", "min-balance", "max-balance"] + return [ + "external-id", + "uuid", + "name", + "contractor", + "timezone", + "invoice-template", + "min-balance", + "max-balance", + "vat", + "balance-low-threshold", + "balance-high-threshold", + "send-balance-notifications-to" + "destination-rate-limit", + "max-call-duration", + "origination-capacity", + "termination-capacity", + "total-capacity", + "invoice-period-id", + "send-invoices-to" + ] + + def updatable_fields(self): + return self.creatable_fields() + diff --git a/yeti_switch_api/orm/invoice_template.py b/yeti_switch_api/orm/invoice_template.py new file mode 100644 index 0000000..df28e73 --- /dev/null +++ b/yeti_switch_api/orm/invoice_template.py @@ -0,0 +1,10 @@ +from .base_model import BaseModel, AttributeField, RelationField # noqa: F401 + + +class InvoiceTemplate(BaseModel): + class Meta: + path = "invoice-template" + type = "invoice-template" + + name = AttributeField("name") + filename = AttributeField("filename") diff --git a/yeti_switch_api/orm/orm_client.py b/yeti_switch_api/orm/orm_client.py index 6e638a2..2629c80 100644 --- a/yeti_switch_api/orm/orm_client.py +++ b/yeti_switch_api/orm/orm_client.py @@ -6,6 +6,7 @@ from .contact import Contact from .account import Account from .invoice import Invoice +from .invoice_template import InvoiceTemplate from .invoice_originated_destination import InvoiceOriginatedDestination from .invoice_originated_network import InvoiceOriginatedNetwork from .invoice_terminated_destination import InvoiceTerminatedDestination @@ -49,6 +50,7 @@ def __register_models(cls): cls.__register_model(Contact) cls.__register_model(Account) cls.__register_model(Invoice) + cls.__register_model(InvoiceTemplate) cls.__register_model(InvoiceOriginatedDestination) cls.__register_model(InvoiceOriginatedNetwork) cls.__register_model(InvoiceTerminatedDestination) diff --git a/yeti_switch_api/orm/package_counter.py b/yeti_switch_api/orm/package_counter.py index b7c7723..6ee2a0c 100644 --- a/yeti_switch_api/orm/package_counter.py +++ b/yeti_switch_api/orm/package_counter.py @@ -8,7 +8,8 @@ class Meta: duration = AttributeField("duration") exclude = AttributeField("exclude") prefix = AttributeField("prefix") - service_id = AttributeField("service-id") account = RelationField("account") service = RelationField("service") + + From f9979ecd085955e44ddaf798b3287d3e5ebbdb75 Mon Sep 17 00:00:00 2001 From: sdi Date: Tue, 19 Aug 2025 00:21:00 +0300 Subject: [PATCH 2/6] add more account attributes --- yeti_switch_api/orm/customers_auth.py | 8 +++++ yeti_switch_api/orm/numberlist.py | 43 +++++++++++++++++++++++- yeti_switch_api/orm/numberlist_item.py | 46 +++++++++++++++++++++----- 3 files changed, 87 insertions(+), 10 deletions(-) diff --git a/yeti_switch_api/orm/customers_auth.py b/yeti_switch_api/orm/customers_auth.py index a8660d8..91de97e 100644 --- a/yeti_switch_api/orm/customers_auth.py +++ b/yeti_switch_api/orm/customers_auth.py @@ -21,6 +21,9 @@ class Meta: dst_prefix = AttributeField("dst-prefix") x_yeti_auth = AttributeField("x-yeti-auth") + tag_action = RelationField("tag-action") + tag_action_value = AttributeField("tag-action-value") + def creatable_fields(self): return [ "name", @@ -37,4 +40,9 @@ def creatable_fields(self): "src-prefix", "dst-prefix", "x-yeti-auth", + "tag-action", + "tag-action-value" ] + + def updatable_fields(self): + return self.creatable_fields() diff --git a/yeti_switch_api/orm/numberlist.py b/yeti_switch_api/orm/numberlist.py index 682aaa9..10d1e94 100644 --- a/yeti_switch_api/orm/numberlist.py +++ b/yeti_switch_api/orm/numberlist.py @@ -7,6 +7,47 @@ class Meta: type = "numberlists" name = AttributeField("name") - default_action_id = AttributeField("action-id") + default_action = AttributeField("default-action-id") DEFAULT_ACTION_REJECT = 1 DEFAULT_ACTION_ACCEPT = 2 + + mode = AttributeField("mode-id") + MODE_STRICT = 1 + MODE_PREFIX = 2 + MODE_RANDOM = 3 + + default_src_rewrite_rule = AttributeField("default-src-rewrite-rule") + default_src_rewrite_result = AttributeField("default-src-rewrite-result") + defer_src_rewrite = AttributeField("defer-src-rewrite") + default_dst_rewrite_rule = AttributeField("default-dst-rewrite-rule") + default_dst_rewrite_result = AttributeField("default-dst-rewrite-result") + defer_dst_rewrite = AttributeField("defer-dst-rewrite") + + external_id = AttributeField("external-id") + external_type = AttributeField("external-type") + + tag_action = RelationField("tag-action") + tag_action_value = AttributeField("tag-action-value") + + created_at = AttributeField("created-at") + updated_at = AttributeField("updated-at") + + def creatable_fields(self): + return [ + "name" + "default-action-id", + "tag-action", + "tag-action-value", + "mode-id", + "default-src-rewrite-rule", + "default-src-rewrite-result", + "defer-src-rewrite", + "default-dst-rewrite-rule", + "default-dst-rewrite-result", + "defer-dst-rewrite", + "external-id", + "external-type" + ] + + def updatable_fields(self): + return self.creatable_fields() diff --git a/yeti_switch_api/orm/numberlist_item.py b/yeti_switch_api/orm/numberlist_item.py index f1c26c6..12c90d4 100644 --- a/yeti_switch_api/orm/numberlist_item.py +++ b/yeti_switch_api/orm/numberlist_item.py @@ -6,16 +6,44 @@ class Meta: path = "numberlist-items" type = "numberlist-items" - key = AttributeField("key") - number_min_length = AttributeField("number_min_length") - number_max_length = AttributeField("number_max_length") - src_rewrite_rule = AttributeField("src_rewrite_rule") - src_rewrite_result = AttributeField("src_rewrite_result") - dst_rewrite_rule = AttributeField("dst_rewrite_rule") - dst_rewrite_result = AttributeField("dst_rewrite_result") - created_at = AttributeField("created_at") - updated_at = AttributeField("updated_at") numberlist = RelationField("numberlist") + key = AttributeField("key") + number_min_length = AttributeField("number-min-length") + number_max_length = AttributeField("number-max-length") + src_rewrite_rule = AttributeField("src-rewrite-rule") + src_rewrite_result = AttributeField("src-rewrite-result") + defer_src_rewrite = AttributeField("defer-src-rewrite") + + dst_rewrite_rule = AttributeField("dst-rewrite-rule") + dst_rewrite_result = AttributeField("dst-rewrite-result") + defer_dst_rewrite = AttributeField("defer-dst-rewrite") + + created_at = AttributeField("created-at") + updated_at = AttributeField("updated-at") + action_id = AttributeField("action-id") ACTION_REJECT = 1 ACTION_ACCEPT = 2 + + tag_action = RelationField("tag-action") + tag_action_value = AttributeField("tag-action-value") + + def creatable_fields(self): + return [ + "numberlist" + "key", + "number-min-length", + "number-max-length", + "src-rewrite-rule", + "src-rewrite-result", + "defer-src-rewrite" + "dst-rewrite-rule", + "dst-rewrite-result", + "defer-dst-rewrite", + "action-id", + "tag-action", + "tag-action-value" + ] + + def updatable_fields(self): + return self.creatable_fields() From 845237c0f77ff152f40cf5656a91577b584ca548 Mon Sep 17 00:00:00 2001 From: sdi Date: Tue, 19 Aug 2025 23:56:57 +0300 Subject: [PATCH 3/6] fixes --- yeti_switch_api/orm/account.py | 2 +- yeti_switch_api/orm/package_counter.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/yeti_switch_api/orm/account.py b/yeti_switch_api/orm/account.py index af747fa..763985f 100644 --- a/yeti_switch_api/orm/account.py +++ b/yeti_switch_api/orm/account.py @@ -9,7 +9,7 @@ class Meta: contractor = RelationField("contractor") timezone = RelationField("timezone") - external-id = AttributeField("external-id") + external_id = AttributeField("external-id") uuid = AttributeField("uuid") name = AttributeField("name") diff --git a/yeti_switch_api/orm/package_counter.py b/yeti_switch_api/orm/package_counter.py index 6ee2a0c..53dab67 100644 --- a/yeti_switch_api/orm/package_counter.py +++ b/yeti_switch_api/orm/package_counter.py @@ -1,5 +1,6 @@ from .base_model import BaseModel, AttributeField, RelationField + class PackageCounter(BaseModel): class Meta: path = "package-counters" @@ -12,4 +13,3 @@ class Meta: account = RelationField("account") service = RelationField("service") - From 8864fde32063848a1cafec42e21eb1e95c87a2af Mon Sep 17 00:00:00 2001 From: sdi Date: Wed, 20 Aug 2025 00:05:10 +0300 Subject: [PATCH 4/6] fixes --- yeti_switch_api/orm/account.py | 1 - yeti_switch_api/orm/numberlist.py | 8 ++++---- yeti_switch_api/orm/numberlist_item.py | 1 - yeti_switch_api/orm/package_counter.py | 1 - 4 files changed, 4 insertions(+), 7 deletions(-) diff --git a/yeti_switch_api/orm/account.py b/yeti_switch_api/orm/account.py index 763985f..569e6ae 100644 --- a/yeti_switch_api/orm/account.py +++ b/yeti_switch_api/orm/account.py @@ -63,4 +63,3 @@ def creatable_fields(self): def updatable_fields(self): return self.creatable_fields() - diff --git a/yeti_switch_api/orm/numberlist.py b/yeti_switch_api/orm/numberlist.py index 10d1e94..1fdf06b 100644 --- a/yeti_switch_api/orm/numberlist.py +++ b/yeti_switch_api/orm/numberlist.py @@ -1,4 +1,4 @@ -from .base_model import BaseModel, AttributeField +from .base_model import BaseModel, AttributeField, RelationField class Numberlist(BaseModel): @@ -6,6 +6,9 @@ class Meta: path = "numberlists" type = "numberlists" + external_id = AttributeField("external-id") + external_type = AttributeField("external-type") + name = AttributeField("name") default_action = AttributeField("default-action-id") DEFAULT_ACTION_REJECT = 1 @@ -23,9 +26,6 @@ class Meta: default_dst_rewrite_result = AttributeField("default-dst-rewrite-result") defer_dst_rewrite = AttributeField("defer-dst-rewrite") - external_id = AttributeField("external-id") - external_type = AttributeField("external-type") - tag_action = RelationField("tag-action") tag_action_value = AttributeField("tag-action-value") diff --git a/yeti_switch_api/orm/numberlist_item.py b/yeti_switch_api/orm/numberlist_item.py index 12c90d4..3da66ba 100644 --- a/yeti_switch_api/orm/numberlist_item.py +++ b/yeti_switch_api/orm/numberlist_item.py @@ -24,7 +24,6 @@ class Meta: action_id = AttributeField("action-id") ACTION_REJECT = 1 ACTION_ACCEPT = 2 - tag_action = RelationField("tag-action") tag_action_value = AttributeField("tag-action-value") diff --git a/yeti_switch_api/orm/package_counter.py b/yeti_switch_api/orm/package_counter.py index 53dab67..ab5469e 100644 --- a/yeti_switch_api/orm/package_counter.py +++ b/yeti_switch_api/orm/package_counter.py @@ -12,4 +12,3 @@ class Meta: account = RelationField("account") service = RelationField("service") - From ec5491537d681f7c90562bdecec64434e937d34d Mon Sep 17 00:00:00 2001 From: sdi Date: Wed, 20 Aug 2025 00:09:01 +0300 Subject: [PATCH 5/6] fixes --- yeti_switch_api/orm/account.py | 38 +++++++++++++------------- yeti_switch_api/orm/customers_auth.py | 2 +- yeti_switch_api/orm/numberlist.py | 4 +-- yeti_switch_api/orm/numberlist_item.py | 6 ++-- 4 files changed, 25 insertions(+), 25 deletions(-) diff --git a/yeti_switch_api/orm/account.py b/yeti_switch_api/orm/account.py index 569e6ae..0aca58c 100644 --- a/yeti_switch_api/orm/account.py +++ b/yeti_switch_api/orm/account.py @@ -40,25 +40,25 @@ class Meta: def creatable_fields(self): return [ - "external-id", - "uuid", - "name", - "contractor", - "timezone", - "invoice-template", - "min-balance", - "max-balance", - "vat", - "balance-low-threshold", - "balance-high-threshold", - "send-balance-notifications-to" - "destination-rate-limit", - "max-call-duration", - "origination-capacity", - "termination-capacity", - "total-capacity", - "invoice-period-id", - "send-invoices-to" + "external-id", + "uuid", + "name", + "contractor", + "timezone", + "invoice-template", + "min-balance", + "max-balance", + "vat", + "balance-low-threshold", + "balance-high-threshold", + "send-balance-notifications-to", + "destination-rate-limit", + "max-call-duration", + "origination-capacity", + "termination-capacity", + "total-capacity", + "invoice-period-id", + "send-invoices-to", ] def updatable_fields(self): diff --git a/yeti_switch_api/orm/customers_auth.py b/yeti_switch_api/orm/customers_auth.py index 91de97e..6232af9 100644 --- a/yeti_switch_api/orm/customers_auth.py +++ b/yeti_switch_api/orm/customers_auth.py @@ -41,7 +41,7 @@ def creatable_fields(self): "dst-prefix", "x-yeti-auth", "tag-action", - "tag-action-value" + "tag-action-value", ] def updatable_fields(self): diff --git a/yeti_switch_api/orm/numberlist.py b/yeti_switch_api/orm/numberlist.py index 1fdf06b..3663ab5 100644 --- a/yeti_switch_api/orm/numberlist.py +++ b/yeti_switch_api/orm/numberlist.py @@ -34,7 +34,7 @@ class Meta: def creatable_fields(self): return [ - "name" + "name", "default-action-id", "tag-action", "tag-action-value", @@ -46,7 +46,7 @@ def creatable_fields(self): "default-dst-rewrite-result", "defer-dst-rewrite", "external-id", - "external-type" + "external-type", ] def updatable_fields(self): diff --git a/yeti_switch_api/orm/numberlist_item.py b/yeti_switch_api/orm/numberlist_item.py index 3da66ba..f4781fc 100644 --- a/yeti_switch_api/orm/numberlist_item.py +++ b/yeti_switch_api/orm/numberlist_item.py @@ -29,19 +29,19 @@ class Meta: def creatable_fields(self): return [ - "numberlist" + "numberlist", "key", "number-min-length", "number-max-length", "src-rewrite-rule", "src-rewrite-result", - "defer-src-rewrite" + "defer-src-rewrite", "dst-rewrite-rule", "dst-rewrite-result", "defer-dst-rewrite", "action-id", "tag-action", - "tag-action-value" + "tag-action-value", ] def updatable_fields(self): From 6cd27c5d9e09f6257c29473adf963bb22bff17d5 Mon Sep 17 00:00:00 2001 From: sdi Date: Wed, 20 Aug 2025 00:10:34 +0300 Subject: [PATCH 6/6] fixes --- examples/package_counters.py | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/examples/package_counters.py b/examples/package_counters.py index 6f9cfab..c92711c 100644 --- a/examples/package_counters.py +++ b/examples/package_counters.py @@ -4,10 +4,7 @@ USERNAME = "admin" PASSWORD = "111111" -config = { - "API_ROOT": API_ROOT, - "AUTH_CREDS": {"login": USERNAME, "password": PASSWORD} -} +config = {"API_ROOT": API_ROOT, "AUTH_CREDS": {"login": USERNAME, "password": PASSWORD}} # Initialize ORM client (registers models) OrmClient(config)