lago-python-client 1.26.0__tar.gz → 1.28.1__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.
Files changed (139) hide show
  1. {lago_python_client-1.26.0 → lago_python_client-1.28.1}/PKG-INFO +2 -2
  2. {lago_python_client-1.26.0 → lago_python_client-1.28.1}/README.md +1 -1
  3. lago_python_client-1.28.1/lago_python_client/billing_entities/clients.py +24 -0
  4. {lago_python_client-1.26.0 → lago_python_client-1.28.1}/lago_python_client/client.py +5 -0
  5. {lago_python_client-1.26.0 → lago_python_client-1.28.1}/lago_python_client/models/__init__.py +6 -0
  6. lago_python_client-1.28.1/lago_python_client/models/billing_entity.py +96 -0
  7. {lago_python_client-1.26.0 → lago_python_client-1.28.1}/lago_python_client/models/tax.py +1 -1
  8. lago_python_client-1.28.1/lago_python_client/version.py +1 -0
  9. {lago_python_client-1.26.0 → lago_python_client-1.28.1}/lago_python_client.egg-info/PKG-INFO +2 -2
  10. {lago_python_client-1.26.0 → lago_python_client-1.28.1}/lago_python_client.egg-info/SOURCES.txt +8 -0
  11. lago_python_client-1.28.1/tests/__init__.py +0 -0
  12. lago_python_client-1.28.1/tests/test_billing_entity_client.py +201 -0
  13. lago_python_client-1.26.0/lago_python_client/version.py +0 -1
  14. {lago_python_client-1.26.0 → lago_python_client-1.28.1}/LICENSE +0 -0
  15. {lago_python_client-1.26.0 → lago_python_client-1.28.1}/lago_python_client/__init__.py +0 -0
  16. {lago_python_client-1.26.0 → lago_python_client-1.28.1}/lago_python_client/add_ons/__init__.py +0 -0
  17. {lago_python_client-1.26.0 → lago_python_client-1.28.1}/lago_python_client/add_ons/clients.py +0 -0
  18. {lago_python_client-1.26.0 → lago_python_client-1.28.1}/lago_python_client/base_client.py +0 -0
  19. {lago_python_client-1.26.0 → lago_python_client-1.28.1}/lago_python_client/base_model.py +0 -0
  20. {lago_python_client-1.26.0 → lago_python_client-1.28.1}/lago_python_client/billable_metrics/__init__.py +0 -0
  21. {lago_python_client-1.26.0 → lago_python_client-1.28.1}/lago_python_client/billable_metrics/clients.py +0 -0
  22. {lago_python_client-1.26.0/lago_python_client/coupons → lago_python_client-1.28.1/lago_python_client/billing_entities}/__init__.py +0 -0
  23. {lago_python_client-1.26.0/lago_python_client/credit_notes → lago_python_client-1.28.1/lago_python_client/coupons}/__init__.py +0 -0
  24. {lago_python_client-1.26.0 → lago_python_client-1.28.1}/lago_python_client/coupons/clients.py +0 -0
  25. {lago_python_client-1.26.0/lago_python_client/customers → lago_python_client-1.28.1/lago_python_client/credit_notes}/__init__.py +0 -0
  26. {lago_python_client-1.26.0 → lago_python_client-1.28.1}/lago_python_client/credit_notes/clients.py +0 -0
  27. {lago_python_client-1.26.0/lago_python_client/events → lago_python_client-1.28.1/lago_python_client/customers}/__init__.py +0 -0
  28. {lago_python_client-1.26.0 → lago_python_client-1.28.1}/lago_python_client/customers/clients.py +0 -0
  29. {lago_python_client-1.26.0/lago_python_client/fees → lago_python_client-1.28.1/lago_python_client/events}/__init__.py +0 -0
  30. {lago_python_client-1.26.0 → lago_python_client-1.28.1}/lago_python_client/events/clients.py +0 -0
  31. {lago_python_client-1.26.0 → lago_python_client-1.28.1}/lago_python_client/exceptions.py +0 -0
  32. {lago_python_client-1.26.0/lago_python_client/gross_revenues → lago_python_client-1.28.1/lago_python_client/fees}/__init__.py +0 -0
  33. {lago_python_client-1.26.0 → lago_python_client-1.28.1}/lago_python_client/fees/clients.py +0 -0
  34. {lago_python_client-1.26.0 → lago_python_client-1.28.1}/lago_python_client/functools_ext.py +0 -0
  35. {lago_python_client-1.26.0/lago_python_client/invoice_collections → lago_python_client-1.28.1/lago_python_client/gross_revenues}/__init__.py +0 -0
  36. {lago_python_client-1.26.0 → lago_python_client-1.28.1}/lago_python_client/gross_revenues/clients.py +0 -0
  37. {lago_python_client-1.26.0/lago_python_client/invoiced_usages → lago_python_client-1.28.1/lago_python_client/invoice_collections}/__init__.py +0 -0
  38. {lago_python_client-1.26.0 → lago_python_client-1.28.1}/lago_python_client/invoice_collections/clients.py +0 -0
  39. {lago_python_client-1.26.0/lago_python_client/invoices → lago_python_client-1.28.1/lago_python_client/invoiced_usages}/__init__.py +0 -0
  40. {lago_python_client-1.26.0 → lago_python_client-1.28.1}/lago_python_client/invoiced_usages/clients.py +0 -0
  41. {lago_python_client-1.26.0/lago_python_client/mrrs → lago_python_client-1.28.1/lago_python_client/invoices}/__init__.py +0 -0
  42. {lago_python_client-1.26.0 → lago_python_client-1.28.1}/lago_python_client/invoices/clients.py +0 -0
  43. {lago_python_client-1.26.0 → lago_python_client-1.28.1}/lago_python_client/mixins.py +0 -0
  44. {lago_python_client-1.26.0 → lago_python_client-1.28.1}/lago_python_client/models/add_on.py +0 -0
  45. {lago_python_client-1.26.0 → lago_python_client-1.28.1}/lago_python_client/models/applied_coupon.py +0 -0
  46. {lago_python_client-1.26.0 → lago_python_client-1.28.1}/lago_python_client/models/billable_metric.py +0 -0
  47. {lago_python_client-1.26.0 → lago_python_client-1.28.1}/lago_python_client/models/billing_period.py +0 -0
  48. {lago_python_client-1.26.0 → lago_python_client-1.28.1}/lago_python_client/models/charge.py +0 -0
  49. {lago_python_client-1.26.0 → lago_python_client-1.28.1}/lago_python_client/models/coupon.py +0 -0
  50. {lago_python_client-1.26.0 → lago_python_client-1.28.1}/lago_python_client/models/credit.py +0 -0
  51. {lago_python_client-1.26.0 → lago_python_client-1.28.1}/lago_python_client/models/credit_note.py +0 -0
  52. {lago_python_client-1.26.0 → lago_python_client-1.28.1}/lago_python_client/models/customer.py +0 -0
  53. {lago_python_client-1.26.0 → lago_python_client-1.28.1}/lago_python_client/models/customer_usage.py +0 -0
  54. {lago_python_client-1.26.0 → lago_python_client-1.28.1}/lago_python_client/models/error_detail.py +0 -0
  55. {lago_python_client-1.26.0 → lago_python_client-1.28.1}/lago_python_client/models/event.py +0 -0
  56. {lago_python_client-1.26.0 → lago_python_client-1.28.1}/lago_python_client/models/fee.py +0 -0
  57. {lago_python_client-1.26.0 → lago_python_client-1.28.1}/lago_python_client/models/gross_revenue.py +0 -0
  58. {lago_python_client-1.26.0 → lago_python_client-1.28.1}/lago_python_client/models/invoice.py +0 -0
  59. {lago_python_client-1.26.0 → lago_python_client-1.28.1}/lago_python_client/models/invoice_collection.py +0 -0
  60. {lago_python_client-1.26.0 → lago_python_client-1.28.1}/lago_python_client/models/invoice_item.py +0 -0
  61. {lago_python_client-1.26.0 → lago_python_client-1.28.1}/lago_python_client/models/invoiced_usage.py +0 -0
  62. {lago_python_client-1.26.0 → lago_python_client-1.28.1}/lago_python_client/models/lifetime_usage.py +0 -0
  63. {lago_python_client-1.26.0 → lago_python_client-1.28.1}/lago_python_client/models/minimum_commitment.py +0 -0
  64. {lago_python_client-1.26.0 → lago_python_client-1.28.1}/lago_python_client/models/mrr.py +0 -0
  65. {lago_python_client-1.26.0 → lago_python_client-1.28.1}/lago_python_client/models/organization.py +0 -0
  66. {lago_python_client-1.26.0 → lago_python_client-1.28.1}/lago_python_client/models/overdue_balance.py +0 -0
  67. {lago_python_client-1.26.0 → lago_python_client-1.28.1}/lago_python_client/models/payment.py +0 -0
  68. {lago_python_client-1.26.0 → lago_python_client-1.28.1}/lago_python_client/models/payment_receipt.py +0 -0
  69. {lago_python_client-1.26.0 → lago_python_client-1.28.1}/lago_python_client/models/payment_request.py +0 -0
  70. {lago_python_client-1.26.0 → lago_python_client-1.28.1}/lago_python_client/models/plan.py +0 -0
  71. {lago_python_client-1.26.0 → lago_python_client-1.28.1}/lago_python_client/models/subscription.py +0 -0
  72. {lago_python_client-1.26.0 → lago_python_client-1.28.1}/lago_python_client/models/usage_threshold.py +0 -0
  73. {lago_python_client-1.26.0 → lago_python_client-1.28.1}/lago_python_client/models/wallet.py +0 -0
  74. {lago_python_client-1.26.0 → lago_python_client-1.28.1}/lago_python_client/models/wallet_transaction.py +0 -0
  75. {lago_python_client-1.26.0 → lago_python_client-1.28.1}/lago_python_client/models/webhook_endpoint.py +0 -0
  76. {lago_python_client-1.26.0/lago_python_client/organizations → lago_python_client-1.28.1/lago_python_client/mrrs}/__init__.py +0 -0
  77. {lago_python_client-1.26.0 → lago_python_client-1.28.1}/lago_python_client/mrrs/clients.py +0 -0
  78. {lago_python_client-1.26.0/lago_python_client/overdue_balances → lago_python_client-1.28.1/lago_python_client/organizations}/__init__.py +0 -0
  79. {lago_python_client-1.26.0 → lago_python_client-1.28.1}/lago_python_client/organizations/clients.py +0 -0
  80. {lago_python_client-1.26.0/lago_python_client/payment_receipts → lago_python_client-1.28.1/lago_python_client/overdue_balances}/__init__.py +0 -0
  81. {lago_python_client-1.26.0 → lago_python_client-1.28.1}/lago_python_client/overdue_balances/clients.py +0 -0
  82. {lago_python_client-1.26.0/lago_python_client/payment_requests → lago_python_client-1.28.1/lago_python_client/payment_receipts}/__init__.py +0 -0
  83. {lago_python_client-1.26.0 → lago_python_client-1.28.1}/lago_python_client/payment_receipts/clients.py +0 -0
  84. {lago_python_client-1.26.0/lago_python_client/payments → lago_python_client-1.28.1/lago_python_client/payment_requests}/__init__.py +0 -0
  85. {lago_python_client-1.26.0 → lago_python_client-1.28.1}/lago_python_client/payment_requests/clients.py +0 -0
  86. {lago_python_client-1.26.0/lago_python_client/plans → lago_python_client-1.28.1/lago_python_client/payments}/__init__.py +0 -0
  87. {lago_python_client-1.26.0 → lago_python_client-1.28.1}/lago_python_client/payments/clients.py +0 -0
  88. {lago_python_client-1.26.0/lago_python_client/services → lago_python_client-1.28.1/lago_python_client/plans}/__init__.py +0 -0
  89. {lago_python_client-1.26.0 → lago_python_client-1.28.1}/lago_python_client/plans/clients.py +0 -0
  90. {lago_python_client-1.26.0 → lago_python_client-1.28.1}/lago_python_client/py.typed +0 -0
  91. {lago_python_client-1.26.0/lago_python_client/subscriptions → lago_python_client-1.28.1/lago_python_client/services}/__init__.py +0 -0
  92. {lago_python_client-1.26.0 → lago_python_client-1.28.1}/lago_python_client/services/json.py +0 -0
  93. {lago_python_client-1.26.0 → lago_python_client-1.28.1}/lago_python_client/services/request.py +0 -0
  94. {lago_python_client-1.26.0 → lago_python_client-1.28.1}/lago_python_client/services/response.py +0 -0
  95. {lago_python_client-1.26.0/lago_python_client/taxes → lago_python_client-1.28.1/lago_python_client/subscriptions}/__init__.py +0 -0
  96. {lago_python_client-1.26.0 → lago_python_client-1.28.1}/lago_python_client/subscriptions/clients.py +0 -0
  97. {lago_python_client-1.26.0/lago_python_client/wallets → lago_python_client-1.28.1/lago_python_client/taxes}/__init__.py +0 -0
  98. {lago_python_client-1.26.0 → lago_python_client-1.28.1}/lago_python_client/taxes/clients.py +0 -0
  99. {lago_python_client-1.26.0/lago_python_client/webhook_endpoints → lago_python_client-1.28.1/lago_python_client/wallets}/__init__.py +0 -0
  100. {lago_python_client-1.26.0 → lago_python_client-1.28.1}/lago_python_client/wallets/clients.py +0 -0
  101. {lago_python_client-1.26.0/lago_python_client/webhooks → lago_python_client-1.28.1/lago_python_client/webhook_endpoints}/__init__.py +0 -0
  102. {lago_python_client-1.26.0 → lago_python_client-1.28.1}/lago_python_client/webhook_endpoints/clients.py +0 -0
  103. {lago_python_client-1.26.0/tests → lago_python_client-1.28.1/lago_python_client/webhooks}/__init__.py +0 -0
  104. {lago_python_client-1.26.0 → lago_python_client-1.28.1}/lago_python_client/webhooks/clients.py +0 -0
  105. {lago_python_client-1.26.0 → lago_python_client-1.28.1}/lago_python_client.egg-info/dependency_links.txt +0 -0
  106. {lago_python_client-1.26.0 → lago_python_client-1.28.1}/lago_python_client.egg-info/requires.txt +0 -0
  107. {lago_python_client-1.26.0 → lago_python_client-1.28.1}/lago_python_client.egg-info/top_level.txt +0 -0
  108. {lago_python_client-1.26.0 → lago_python_client-1.28.1}/pyproject.toml +0 -0
  109. {lago_python_client-1.26.0 → lago_python_client-1.28.1}/setup.cfg +0 -0
  110. {lago_python_client-1.26.0 → lago_python_client-1.28.1}/tests/test_add_on_client.py +0 -0
  111. {lago_python_client-1.26.0 → lago_python_client-1.28.1}/tests/test_applied_coupon_client.py +0 -0
  112. {lago_python_client-1.26.0 → lago_python_client-1.28.1}/tests/test_billable_metric_client.py +0 -0
  113. {lago_python_client-1.26.0 → lago_python_client-1.28.1}/tests/test_client.py +0 -0
  114. {lago_python_client-1.26.0 → lago_python_client-1.28.1}/tests/test_coupon_client.py +0 -0
  115. {lago_python_client-1.26.0 → lago_python_client-1.28.1}/tests/test_credit_note_client.py +0 -0
  116. {lago_python_client-1.26.0 → lago_python_client-1.28.1}/tests/test_customer_client.py +0 -0
  117. {lago_python_client-1.26.0 → lago_python_client-1.28.1}/tests/test_event_client.py +0 -0
  118. {lago_python_client-1.26.0 → lago_python_client-1.28.1}/tests/test_fee_client.py +0 -0
  119. {lago_python_client-1.26.0 → lago_python_client-1.28.1}/tests/test_functools_ext.py +0 -0
  120. {lago_python_client-1.26.0 → lago_python_client-1.28.1}/tests/test_gross_revenue_client.py +0 -0
  121. {lago_python_client-1.26.0 → lago_python_client-1.28.1}/tests/test_invoice_client.py +0 -0
  122. {lago_python_client-1.26.0 → lago_python_client-1.28.1}/tests/test_invoice_collection_client.py +0 -0
  123. {lago_python_client-1.26.0 → lago_python_client-1.28.1}/tests/test_invoiced_usage_client.py +0 -0
  124. {lago_python_client-1.26.0 → lago_python_client-1.28.1}/tests/test_json_services.py +0 -0
  125. {lago_python_client-1.26.0 → lago_python_client-1.28.1}/tests/test_mrr_client.py +0 -0
  126. {lago_python_client-1.26.0 → lago_python_client-1.28.1}/tests/test_organization_client.py +0 -0
  127. {lago_python_client-1.26.0 → lago_python_client-1.28.1}/tests/test_overdue_balance_client.py +0 -0
  128. {lago_python_client-1.26.0 → lago_python_client-1.28.1}/tests/test_payment_client.py +0 -0
  129. {lago_python_client-1.26.0 → lago_python_client-1.28.1}/tests/test_payment_receipt_client.py +0 -0
  130. {lago_python_client-1.26.0 → lago_python_client-1.28.1}/tests/test_payment_request_client.py +0 -0
  131. {lago_python_client-1.26.0 → lago_python_client-1.28.1}/tests/test_plan_client.py +0 -0
  132. {lago_python_client-1.26.0 → lago_python_client-1.28.1}/tests/test_request_services.py +0 -0
  133. {lago_python_client-1.26.0 → lago_python_client-1.28.1}/tests/test_response_services.py +0 -0
  134. {lago_python_client-1.26.0 → lago_python_client-1.28.1}/tests/test_subscription_client.py +0 -0
  135. {lago_python_client-1.26.0 → lago_python_client-1.28.1}/tests/test_tax_client.py +0 -0
  136. {lago_python_client-1.26.0 → lago_python_client-1.28.1}/tests/test_wallet_client.py +0 -0
  137. {lago_python_client-1.26.0 → lago_python_client-1.28.1}/tests/test_wallet_transaction_client.py +0 -0
  138. {lago_python_client-1.26.0 → lago_python_client-1.28.1}/tests/test_webhook_client.py +0 -0
  139. {lago_python_client-1.26.0 → lago_python_client-1.28.1}/tests/test_webhook_endpoint_client.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: lago-python-client
3
- Version: 1.26.0
3
+ Version: 1.28.1
4
4
  Summary: Lago Python API Client
5
5
  Home-page: https://github.com/getlago/lago-python-client
6
6
  Author: Lovro Colic
@@ -65,7 +65,7 @@ Check the [lago API reference](https://doc.getlago.com/docs/api/intro)
65
65
 
66
66
  ```bash
67
67
  python -m pip install --upgrade pip setuptools wheel
68
- python -m pip install .[test]
68
+ python -m pip install '.[test]'
69
69
  ```
70
70
 
71
71
  ### Run tests
@@ -32,7 +32,7 @@ Check the [lago API reference](https://doc.getlago.com/docs/api/intro)
32
32
 
33
33
  ```bash
34
34
  python -m pip install --upgrade pip setuptools wheel
35
- python -m pip install .[test]
35
+ python -m pip install '.[test]'
36
36
  ```
37
37
 
38
38
  ### Run tests
@@ -0,0 +1,24 @@
1
+ from typing import ClassVar, Type
2
+
3
+ from ..base_client import BaseClient
4
+ from ..mixins import (
5
+ CreateCommandMixin,
6
+ FindAllCommandMixin,
7
+ FindCommandMixin,
8
+ UpdateCommandMixin,
9
+ )
10
+ from ..models.billing_entity import (
11
+ BillingEntityResponse,
12
+ )
13
+
14
+
15
+ class BillingEntityClient(
16
+ CreateCommandMixin[BillingEntityResponse],
17
+ FindAllCommandMixin[BillingEntityResponse],
18
+ FindCommandMixin[BillingEntityResponse],
19
+ UpdateCommandMixin[BillingEntityResponse],
20
+ BaseClient,
21
+ ):
22
+ API_RESOURCE: ClassVar[str] = "billing_entities"
23
+ RESPONSE_MODEL: ClassVar[Type[BillingEntityResponse]] = BillingEntityResponse
24
+ ROOT_NAME: ClassVar[str] = "billing_entity"
@@ -2,6 +2,7 @@ from urllib.parse import urljoin
2
2
 
3
3
  from .add_ons.clients import AddOnClient
4
4
  from .billable_metrics.clients import BillableMetricClient
5
+ from .billing_entities.clients import BillingEntityClient
5
6
  from .coupons.clients import AppliedCouponClient, CouponClient
6
7
  from .credit_notes.clients import CreditNoteClient
7
8
  from .customers.clients import CustomerClient
@@ -68,6 +69,10 @@ class Client:
68
69
  def billable_metrics(self) -> BillableMetricClient:
69
70
  return BillableMetricClient(self.base_api_url, self.api_key)
70
71
 
72
+ @callable_cached_property
73
+ def billing_entities(self) -> BillingEntityClient:
74
+ return BillingEntityClient(self.base_api_url, self.api_key)
75
+
71
76
  @callable_cached_property
72
77
  def coupons(self) -> CouponClient:
73
78
  return CouponClient(self.base_api_url, self.api_key)
@@ -7,6 +7,12 @@ from .billable_metric import (
7
7
  BillableMetricEvaluateExpression as BillableMetricEvaluateExpression,
8
8
  BillableMetricEvaluateExpressionResponse as BillableMetricEvaluateExpressionResponse,
9
9
  )
10
+ from .billing_entity import (
11
+ BillingEntity as BillingEntity,
12
+ BillingEntityUpdate as BillingEntityUpdate,
13
+ BillingEntityResponse as BillingEntityResponse,
14
+ BillingEntityBillingConfiguration as BillingEntityBillingConfiguration,
15
+ )
10
16
  from .billing_period import (
11
17
  BillingPeriodResponse as BillingPeriodResponse,
12
18
  BillingPeriodsResponse as BillingPeriodsResponse,
@@ -0,0 +1,96 @@
1
+ from typing import Optional, List
2
+ from ..base_model import BaseModel, BaseResponseModel
3
+ from .tax import TaxesResponse
4
+ from datetime import datetime
5
+
6
+
7
+ class BillingEntityBillingConfiguration(BaseModel):
8
+ invoice_footer: Optional[str]
9
+ invoice_grace_period: Optional[int]
10
+ document_locale: Optional[str]
11
+
12
+
13
+ class BillingEntity(BaseModel):
14
+ code: str
15
+ name: str
16
+ address_line1: Optional[str]
17
+ address_line2: Optional[str]
18
+ city: Optional[str]
19
+ state: Optional[str]
20
+ zipcode: Optional[str]
21
+ country: Optional[str]
22
+ email: Optional[str]
23
+ phone: Optional[str]
24
+ default_currency: Optional[str]
25
+ timezone: Optional[str]
26
+ document_numbering: Optional[str]
27
+ document_number_prefix: Optional[str]
28
+ finalize_zero_amount_invoice: Optional[bool]
29
+ net_payment_term: Optional[int]
30
+ eu_tax_management: Optional[bool]
31
+ logo_url: Optional[str]
32
+ legal_name: Optional[str]
33
+ legal_number: Optional[str]
34
+ tax_identification_number: Optional[str]
35
+ email_settings: Optional[List[str]]
36
+ billing_configuration: Optional[BillingEntityBillingConfiguration]
37
+
38
+
39
+ class BillingEntityUpdate(BaseModel):
40
+ name: str
41
+ address_line1: Optional[str]
42
+ address_line2: Optional[str]
43
+ city: Optional[str]
44
+ state: Optional[str]
45
+ zipcode: Optional[str]
46
+ country: Optional[str]
47
+ email: Optional[str]
48
+ phone: Optional[str]
49
+ default_currency: Optional[str]
50
+ timezone: Optional[str]
51
+ document_numbering: Optional[str]
52
+ document_number_prefix: Optional[str]
53
+ finalize_zero_amount_invoice: Optional[bool]
54
+ net_payment_term: Optional[int]
55
+ eu_tax_management: Optional[bool]
56
+ logo_url: Optional[str]
57
+ legal_name: Optional[str]
58
+ legal_number: Optional[str]
59
+ tax_identification_number: Optional[str]
60
+ tax_codes: Optional[List[str]]
61
+ email_settings: Optional[List[str]]
62
+ billing_configuration: Optional[BillingEntityBillingConfiguration]
63
+
64
+
65
+ class BillingEntityResponse(BaseResponseModel):
66
+ lago_id: str
67
+ code: str
68
+ name: str
69
+ address_line1: Optional[str]
70
+ address_line2: Optional[str]
71
+ city: Optional[str]
72
+ state: Optional[str]
73
+ zipcode: Optional[str]
74
+ country: Optional[str]
75
+ email: Optional[str]
76
+ phone: Optional[str]
77
+ default_currency: Optional[str]
78
+ timezone: Optional[str]
79
+ document_numbering: Optional[str]
80
+ document_number_prefix: Optional[str]
81
+ finalize_zero_amount_invoice: Optional[bool]
82
+ net_payment_term: Optional[int]
83
+ eu_tax_management: Optional[bool]
84
+ logo_url: Optional[str]
85
+ legal_name: Optional[str]
86
+ legal_number: Optional[str]
87
+ tax_identification_number: Optional[str]
88
+ is_default: bool
89
+ logo_url: Optional[str]
90
+ document_locale: Optional[str]
91
+ invoice_footer: Optional[str]
92
+ invoice_grace_period: Optional[int]
93
+ email_settings: Optional[List[str]]
94
+ taxes: Optional[TaxesResponse]
95
+ created_at: datetime
96
+ updated_at: datetime
@@ -23,7 +23,7 @@ class TaxResponse(BaseResponseModel):
23
23
  code: str
24
24
  rate: float
25
25
  description: Optional[str]
26
- applied_to_organization: bool
26
+ applied_to_organization: Optional[bool]
27
27
  created_at: str
28
28
 
29
29
 
@@ -0,0 +1 @@
1
+ LAGO_VERSION = "1.28.1"
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: lago-python-client
3
- Version: 1.26.0
3
+ Version: 1.28.1
4
4
  Summary: Lago Python API Client
5
5
  Home-page: https://github.com/getlago/lago-python-client
6
6
  Author: Lovro Colic
@@ -65,7 +65,7 @@ Check the [lago API reference](https://doc.getlago.com/docs/api/intro)
65
65
 
66
66
  ```bash
67
67
  python -m pip install --upgrade pip setuptools wheel
68
- python -m pip install .[test]
68
+ python -m pip install '.[test]'
69
69
  ```
70
70
 
71
71
  ### Run tests
@@ -15,6 +15,8 @@ setup.cfg
15
15
  ./lago_python_client/add_ons/clients.py
16
16
  ./lago_python_client/billable_metrics/__init__.py
17
17
  ./lago_python_client/billable_metrics/clients.py
18
+ ./lago_python_client/billing_entities/__init__.py
19
+ ./lago_python_client/billing_entities/clients.py
18
20
  ./lago_python_client/coupons/__init__.py
19
21
  ./lago_python_client/coupons/clients.py
20
22
  ./lago_python_client/credit_notes/__init__.py
@@ -37,6 +39,7 @@ setup.cfg
37
39
  ./lago_python_client/models/add_on.py
38
40
  ./lago_python_client/models/applied_coupon.py
39
41
  ./lago_python_client/models/billable_metric.py
42
+ ./lago_python_client/models/billing_entity.py
40
43
  ./lago_python_client/models/billing_period.py
41
44
  ./lago_python_client/models/charge.py
42
45
  ./lago_python_client/models/coupon.py
@@ -99,6 +102,7 @@ setup.cfg
99
102
  ./tests/test_add_on_client.py
100
103
  ./tests/test_applied_coupon_client.py
101
104
  ./tests/test_billable_metric_client.py
105
+ ./tests/test_billing_entity_client.py
102
106
  ./tests/test_client.py
103
107
  ./tests/test_coupon_client.py
104
108
  ./tests/test_credit_note_client.py
@@ -144,6 +148,8 @@ lago_python_client/add_ons/__init__.py
144
148
  lago_python_client/add_ons/clients.py
145
149
  lago_python_client/billable_metrics/__init__.py
146
150
  lago_python_client/billable_metrics/clients.py
151
+ lago_python_client/billing_entities/__init__.py
152
+ lago_python_client/billing_entities/clients.py
147
153
  lago_python_client/coupons/__init__.py
148
154
  lago_python_client/coupons/clients.py
149
155
  lago_python_client/credit_notes/__init__.py
@@ -166,6 +172,7 @@ lago_python_client/models/__init__.py
166
172
  lago_python_client/models/add_on.py
167
173
  lago_python_client/models/applied_coupon.py
168
174
  lago_python_client/models/billable_metric.py
175
+ lago_python_client/models/billing_entity.py
169
176
  lago_python_client/models/billing_period.py
170
177
  lago_python_client/models/charge.py
171
178
  lago_python_client/models/coupon.py
@@ -228,6 +235,7 @@ tests/__init__.py
228
235
  tests/test_add_on_client.py
229
236
  tests/test_applied_coupon_client.py
230
237
  tests/test_billable_metric_client.py
238
+ tests/test_billing_entity_client.py
231
239
  tests/test_client.py
232
240
  tests/test_coupon_client.py
233
241
  tests/test_credit_note_client.py
File without changes
@@ -0,0 +1,201 @@
1
+ import os
2
+
3
+ import pytest
4
+ from pytest_httpx import HTTPXMock
5
+
6
+ from lago_python_client.client import Client
7
+ from lago_python_client.exceptions import LagoApiError
8
+ from lago_python_client.models import BillingEntity, BillingEntityUpdate, BillingEntityBillingConfiguration
9
+
10
+
11
+ def mock_response(mock="billing_entity"):
12
+ this_dir = os.path.dirname(os.path.abspath(__file__))
13
+ my_data_path = os.path.join(this_dir, "fixtures/" + mock + ".json")
14
+
15
+ with open(my_data_path, "rb") as billing_entity_response:
16
+ return billing_entity_response.read()
17
+
18
+
19
+ def create_billing_entity_input():
20
+ return BillingEntity(
21
+ name="Test Company",
22
+ code="test-company",
23
+ address_line1="123 Test Street",
24
+ address_line2="Suite 100",
25
+ city="Test City",
26
+ state="TS",
27
+ zipcode="12345",
28
+ country="US",
29
+ email="test@company.com",
30
+ phone="+1234567890",
31
+ default_currency="USD",
32
+ timezone="UTC",
33
+ document_numbering="per_customer",
34
+ document_number_prefix="TEST-",
35
+ finalize_zero_amount_invoice=True,
36
+ net_payment_term=30,
37
+ eu_tax_management=False,
38
+ logo="=base64 encoded file",
39
+ legal_name="Test Company Legal Name",
40
+ legal_number="123456789",
41
+ tax_identification_number="TAX123456",
42
+ email_settings=["invoice.finalized", "payment_receipt.created"],
43
+ billing_configuration=BillingEntityBillingConfiguration(
44
+ invoice_footer="Thank you for your business",
45
+ invoice_grace_period=3,
46
+ document_locale="en",
47
+ ),
48
+ )
49
+
50
+
51
+ def update_billing_entity_input():
52
+ return BillingEntityUpdate(
53
+ name="Updated Company Name",
54
+ address_line1="456 Test Avenue",
55
+ address_line2="Suite 200",
56
+ city="Updated City",
57
+ state="Greater Paris",
58
+ zipcode="54321",
59
+ country="FR",
60
+ email="updated@company.com",
61
+ phone="+1987654321",
62
+ default_currency="EUR",
63
+ timezone="UTC",
64
+ document_numbering="per_billing_entity",
65
+ document_number_prefix="UPD-",
66
+ finalize_zero_amount_invoice=True,
67
+ net_payment_term=15,
68
+ eu_tax_management=True,
69
+ logo="=base 64 encoded file",
70
+ legal_name="Updated Company Legal Name",
71
+ legal_number="987654321",
72
+ tax_identification_number="TAX654321",
73
+ tax_codes=["VAT-01", "VAT-25"],
74
+ email_settings=["invoice.finalized"],
75
+ billing_configuration=BillingEntityBillingConfiguration(
76
+ invoice_footer="Updated footer",
77
+ invoice_grace_period=5,
78
+ document_locale="fr",
79
+ ),
80
+ )
81
+
82
+
83
+ def test_valid_create_billing_entity_request(httpx_mock: HTTPXMock):
84
+ client = Client(api_key="886fe239-927d-4072-ab72-6dd345e8dd0d")
85
+
86
+ httpx_mock.add_response(
87
+ method="POST",
88
+ url="https://api.getlago.com/api/v1/billing_entities",
89
+ content=mock_response(),
90
+ )
91
+ response = client.billing_entities.create(create_billing_entity_input())
92
+
93
+ assert response is not None
94
+ assert response.lago_id == "123e4567-e89b-12d3-a456-426614174000"
95
+ assert response.code == "test-company"
96
+
97
+
98
+ def test_invalid_create_billing_entity_request(httpx_mock: HTTPXMock):
99
+ client = Client(api_key="invalid")
100
+
101
+ httpx_mock.add_response(
102
+ method="POST",
103
+ url="https://api.getlago.com/api/v1/billing_entities",
104
+ status_code=401,
105
+ content=b"",
106
+ )
107
+
108
+ with pytest.raises(LagoApiError):
109
+ client.billing_entities.create(create_billing_entity_input())
110
+
111
+
112
+ def test_valid_find_billing_entity_request(httpx_mock: HTTPXMock):
113
+ client = Client(api_key="886fe239-927d-4072-ab72-6dd345e8dd0d")
114
+
115
+ httpx_mock.add_response(
116
+ method="GET",
117
+ url="https://api.getlago.com/api/v1/billing_entities/test-company",
118
+ content=mock_response(),
119
+ )
120
+ response = client.billing_entities.find("test-company")
121
+
122
+ assert response is not None
123
+ assert response.lago_id == "123e4567-e89b-12d3-a456-426614174000"
124
+ assert response.code == "test-company"
125
+
126
+
127
+ def test_invalid_find_billing_entity_request(httpx_mock: HTTPXMock):
128
+ client = Client(api_key="886fe239-927d-4072-ab72-6dd345e8dd0d")
129
+
130
+ httpx_mock.add_response(
131
+ method="GET",
132
+ url="https://api.getlago.com/api/v1/billing_entities/invalid-code",
133
+ status_code=404,
134
+ content=b"",
135
+ )
136
+
137
+ with pytest.raises(LagoApiError):
138
+ client.billing_entities.find("invalid-code")
139
+
140
+
141
+ def test_valid_find_all_billing_entities_request(httpx_mock: HTTPXMock):
142
+ client = Client(api_key="886fe239-927d-4072-ab72-6dd345e8dd0d")
143
+
144
+ httpx_mock.add_response(
145
+ method="GET",
146
+ url="https://api.getlago.com/api/v1/billing_entities",
147
+ content=mock_response("billing_entity_index"),
148
+ )
149
+ response = client.billing_entities.find_all()
150
+
151
+ assert len(response["billing_entities"]) == 2
152
+ assert response["meta"]["current_page"] == 1
153
+
154
+ assert response["billing_entities"][0].lago_id == "123e4567-e89b-12d3-a456-426614174000"
155
+ assert response["billing_entities"][0].code == "test-company-1"
156
+ assert response["billing_entities"][1].lago_id == "123e4567-e89b-12d3-a456-426614174001"
157
+ assert response["billing_entities"][1].code == "test-company-2"
158
+
159
+
160
+ def test_invalid_find_all_billing_entities_request(httpx_mock: HTTPXMock):
161
+ client = Client(api_key="invalid")
162
+
163
+ httpx_mock.add_response(
164
+ method="GET",
165
+ url="https://api.getlago.com/api/v1/billing_entities",
166
+ status_code=401,
167
+ content=b"",
168
+ )
169
+
170
+ with pytest.raises(LagoApiError):
171
+ client.billing_entities.find_all()
172
+
173
+
174
+ def test_valid_update_billing_entity_request(httpx_mock: HTTPXMock):
175
+ client = Client(api_key="886fe239-927d-4072-ab72-6dd345e8dd0d")
176
+ billing_entity_code = "test-company"
177
+
178
+ httpx_mock.add_response(
179
+ method="PUT",
180
+ url="https://api.getlago.com/api/v1/billing_entities/" + billing_entity_code,
181
+ content=mock_response(),
182
+ )
183
+ response = client.billing_entities.update(update_billing_entity_input(), billing_entity_code)
184
+
185
+ assert response.lago_id == "123e4567-e89b-12d3-a456-426614174000"
186
+ assert response.code == "test-company"
187
+
188
+
189
+ def test_invalid_update_billing_entity_request(httpx_mock: HTTPXMock):
190
+ client = Client(api_key="invalid")
191
+ billing_entity_code = "test-company"
192
+
193
+ httpx_mock.add_response(
194
+ method="PUT",
195
+ url="https://api.getlago.com/api/v1/billing_entities/" + billing_entity_code,
196
+ status_code=401,
197
+ content=b"",
198
+ )
199
+
200
+ with pytest.raises(LagoApiError):
201
+ client.billing_entities.update(update_billing_entity_input(), billing_entity_code)
@@ -1 +0,0 @@
1
- LAGO_VERSION = "1.26.0"