Skip to content

Commit

Permalink
Release 0.2.9
Browse files Browse the repository at this point in the history
  • Loading branch information
fern-api[bot] committed Aug 8, 2023
1 parent 5c93e98 commit cdd6f69
Show file tree
Hide file tree
Showing 17 changed files with 138 additions and 58 deletions.
4 changes: 2 additions & 2 deletions pyproject.toml
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
[tool.poetry]
name = "mercoa"
version = "v0.2.8"
version = "v0.2.9"
description = ""
readme = "README.md"
authors = []
Expand All @@ -10,8 +10,8 @@ packages = [

[tool.poetry.dependencies]
python = "^3.7"
pydantic = "^1.9.2"
httpx = "0.23.3"
pydantic = "^1.9.2"

[tool.poetry.dev-dependencies]
mypy = "0.971"
Expand Down
4 changes: 2 additions & 2 deletions src/mercoa/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -75,13 +75,13 @@
FindInvoiceResponse,
FindNotificationResponse,
FullName,
GlobalNotificationConfigurationRequest,
IdentifierList,
IdentifierList_RolesList,
IdentifierList_UserList,
IndividualGovernmentId,
IndividualProfileRequest,
IndividualProfileResponse,
InvoiceFailureType,
InvoiceId,
InvoiceLineItemRequest,
InvoiceLineItemResponse,
Expand Down Expand Up @@ -247,13 +247,13 @@
"FindInvoiceResponse",
"FindNotificationResponse",
"FullName",
"GlobalNotificationConfigurationRequest",
"IdentifierList",
"IdentifierList_RolesList",
"IdentifierList_UserList",
"IndividualGovernmentId",
"IndividualProfileRequest",
"IndividualProfileResponse",
"InvoiceFailureType",
"InvoiceId",
"InvoiceLineItemRequest",
"InvoiceLineItemResponse",
Expand Down
4 changes: 2 additions & 2 deletions src/mercoa/resources/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -95,6 +95,7 @@
CommentResponse,
DocumentResponse,
FindInvoiceResponse,
InvoiceFailureType,
InvoiceId,
InvoiceLineItemRequest,
InvoiceLineItemResponse,
Expand All @@ -114,7 +115,6 @@
EmailSenderProvider,
EmailSenderRequest,
EmailSenderResponse,
GlobalNotificationConfigurationRequest,
InvoiceNotificationConfigurationRequest,
InvoiceNotificationConfigurationResponse,
NotificationConfigurationRequest,
Expand Down Expand Up @@ -252,13 +252,13 @@
"FindInvoiceResponse",
"FindNotificationResponse",
"FullName",
"GlobalNotificationConfigurationRequest",
"IdentifierList",
"IdentifierList_RolesList",
"IdentifierList_UserList",
"IndividualGovernmentId",
"IndividualProfileRequest",
"IndividualProfileResponse",
"InvoiceFailureType",
"InvoiceId",
"InvoiceLineItemRequest",
"InvoiceLineItemResponse",
Expand Down
17 changes: 17 additions & 0 deletions src/mercoa/resources/entity/resources/invoice/client.py
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@
from ....commons.errors.unauthorized import Unauthorized
from ....commons.types.order_direction import OrderDirection
from ....entity_types.types.entity_id import EntityId
from ....entity_types.types.entity_user_id import EntityUserId
from ....invoice_types.types.find_invoice_response import FindInvoiceResponse
from ....invoice_types.types.invoice_id import InvoiceId
from ....invoice_types.types.invoice_metrics_response import InvoiceMetricsResponse
Expand All @@ -41,6 +42,8 @@ def find(
limit: typing.Optional[int] = None,
starting_after: typing.Optional[InvoiceId] = None,
search: typing.Optional[str] = None,
vendor_id: typing.Union[typing.Optional[EntityId], typing.List[EntityId]],
approver_id: typing.Union[typing.Optional[EntityUserId], typing.List[EntityUserId]],
status: typing.Union[typing.Optional[InvoiceStatus], typing.List[InvoiceStatus]],
) -> FindInvoiceResponse:
_response = httpx.request(
Expand All @@ -54,6 +57,8 @@ def find(
"limit": limit,
"startingAfter": starting_after,
"search": search,
"vendorId": vendor_id,
"approverId": approver_id,
"status": status,
},
headers=remove_none_from_headers(
Expand Down Expand Up @@ -81,6 +86,8 @@ def metrics(
entity_id: EntityId,
*,
search: typing.Optional[str] = None,
vendor_id: typing.Union[typing.Optional[EntityId], typing.List[EntityId]],
approver_id: typing.Union[typing.Optional[EntityUserId], typing.List[EntityUserId]],
status: typing.Union[typing.Optional[InvoiceStatus], typing.List[InvoiceStatus]],
due_date_start: typing.Optional[dt.datetime] = None,
due_date_end: typing.Optional[dt.datetime] = None,
Expand All @@ -93,6 +100,8 @@ def metrics(
urllib.parse.urljoin(f"{self._environment.value}/", f"entity/{entity_id}/invoice-metrics"),
params={
"search": search,
"vendorId": vendor_id,
"approverId": approver_id,
"status": status,
"dueDateStart": serialize_datetime(due_date_start) if due_date_start is not None else None,
"dueDateEnd": serialize_datetime(due_date_end) if due_date_end is not None else None,
Expand Down Expand Up @@ -137,6 +146,8 @@ async def find(
limit: typing.Optional[int] = None,
starting_after: typing.Optional[InvoiceId] = None,
search: typing.Optional[str] = None,
vendor_id: typing.Union[typing.Optional[EntityId], typing.List[EntityId]],
approver_id: typing.Union[typing.Optional[EntityUserId], typing.List[EntityUserId]],
status: typing.Union[typing.Optional[InvoiceStatus], typing.List[InvoiceStatus]],
) -> FindInvoiceResponse:
async with httpx.AsyncClient() as _client:
Expand All @@ -151,6 +162,8 @@ async def find(
"limit": limit,
"startingAfter": starting_after,
"search": search,
"vendorId": vendor_id,
"approverId": approver_id,
"status": status,
},
headers=remove_none_from_headers(
Expand Down Expand Up @@ -178,6 +191,8 @@ async def metrics(
entity_id: EntityId,
*,
search: typing.Optional[str] = None,
vendor_id: typing.Union[typing.Optional[EntityId], typing.List[EntityId]],
approver_id: typing.Union[typing.Optional[EntityUserId], typing.List[EntityUserId]],
status: typing.Union[typing.Optional[InvoiceStatus], typing.List[InvoiceStatus]],
due_date_start: typing.Optional[dt.datetime] = None,
due_date_end: typing.Optional[dt.datetime] = None,
Expand All @@ -191,6 +206,8 @@ async def metrics(
urllib.parse.urljoin(f"{self._environment.value}/", f"entity/{entity_id}/invoice-metrics"),
params={
"search": search,
"vendorId": vendor_id,
"approverId": approver_id,
"status": status,
"dueDateStart": serialize_datetime(due_date_start) if due_date_start is not None else None,
"dueDateEnd": serialize_datetime(due_date_end) if due_date_end is not None else None,
Expand Down
17 changes: 13 additions & 4 deletions src/mercoa/resources/invoice/client.py
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@
from ..commons.errors.unauthorized import Unauthorized
from ..commons.types.order_direction import OrderDirection
from ..entity_types.types.entity_id import EntityId
from ..entity_types.types.entity_user_id import EntityUserId
from ..invoice_types.types.find_invoice_response import FindInvoiceResponse
from ..invoice_types.types.invoice_id import InvoiceId
from ..invoice_types.types.invoice_order_by_field import InvoiceOrderByField
Expand All @@ -40,28 +41,32 @@ def __init__(self, *, environment: MercoaEnvironment = MercoaEnvironment.PRODUCT
def find(
self,
*,
entity_ids: typing.Union[typing.Optional[EntityId], typing.List[EntityId]],
entity_id: typing.Union[typing.Optional[EntityId], typing.List[EntityId]],
start_date: typing.Optional[dt.datetime] = None,
end_date: typing.Optional[dt.datetime] = None,
order_by: typing.Optional[InvoiceOrderByField] = None,
order_direction: typing.Optional[OrderDirection] = None,
limit: typing.Optional[int] = None,
starting_after: typing.Optional[InvoiceId] = None,
search: typing.Optional[str] = None,
vendor_id: typing.Union[typing.Optional[EntityId], typing.List[EntityId]],
approver_id: typing.Union[typing.Optional[EntityUserId], typing.List[EntityUserId]],
status: typing.Union[typing.Optional[InvoiceStatus], typing.List[InvoiceStatus]],
) -> FindInvoiceResponse:
_response = httpx.request(
"GET",
urllib.parse.urljoin(f"{self._environment.value}/", "invoices"),
params={
"entityIds": entity_ids,
"entityId": entity_id,
"startDate": serialize_datetime(start_date) if start_date is not None else None,
"endDate": serialize_datetime(end_date) if end_date is not None else None,
"orderBy": order_by,
"orderDirection": order_direction,
"limit": limit,
"startingAfter": starting_after,
"search": search,
"vendorId": vendor_id,
"approverId": approver_id,
"status": status,
},
headers=remove_none_from_headers(
Expand Down Expand Up @@ -218,29 +223,33 @@ def __init__(self, *, environment: MercoaEnvironment = MercoaEnvironment.PRODUCT
async def find(
self,
*,
entity_ids: typing.Union[typing.Optional[EntityId], typing.List[EntityId]],
entity_id: typing.Union[typing.Optional[EntityId], typing.List[EntityId]],
start_date: typing.Optional[dt.datetime] = None,
end_date: typing.Optional[dt.datetime] = None,
order_by: typing.Optional[InvoiceOrderByField] = None,
order_direction: typing.Optional[OrderDirection] = None,
limit: typing.Optional[int] = None,
starting_after: typing.Optional[InvoiceId] = None,
search: typing.Optional[str] = None,
vendor_id: typing.Union[typing.Optional[EntityId], typing.List[EntityId]],
approver_id: typing.Union[typing.Optional[EntityUserId], typing.List[EntityUserId]],
status: typing.Union[typing.Optional[InvoiceStatus], typing.List[InvoiceStatus]],
) -> FindInvoiceResponse:
async with httpx.AsyncClient() as _client:
_response = await _client.request(
"GET",
urllib.parse.urljoin(f"{self._environment.value}/", "invoices"),
params={
"entityIds": entity_ids,
"entityId": entity_id,
"startDate": serialize_datetime(start_date) if start_date is not None else None,
"endDate": serialize_datetime(end_date) if end_date is not None else None,
"orderBy": order_by,
"orderDirection": order_direction,
"limit": limit,
"startingAfter": starting_after,
"search": search,
"vendorId": vendor_id,
"approverId": approver_id,
"status": status,
},
headers=remove_none_from_headers(
Expand Down
2 changes: 2 additions & 0 deletions src/mercoa/resources/invoice_types/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@
CommentResponse,
DocumentResponse,
FindInvoiceResponse,
InvoiceFailureType,
InvoiceId,
InvoiceLineItemRequest,
InvoiceLineItemResponse,
Expand All @@ -34,6 +35,7 @@
"CommentResponse",
"DocumentResponse",
"FindInvoiceResponse",
"InvoiceFailureType",
"InvoiceId",
"InvoiceLineItemRequest",
"InvoiceLineItemResponse",
Expand Down
2 changes: 2 additions & 0 deletions src/mercoa/resources/invoice_types/types/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@
from .comment_response import CommentResponse
from .document_response import DocumentResponse
from .find_invoice_response import FindInvoiceResponse
from .invoice_failure_type import InvoiceFailureType
from .invoice_id import InvoiceId
from .invoice_line_item_request import InvoiceLineItemRequest
from .invoice_line_item_response import InvoiceLineItemResponse
Expand All @@ -32,6 +33,7 @@
"CommentResponse",
"DocumentResponse",
"FindInvoiceResponse",
"InvoiceFailureType",
"InvoiceId",
"InvoiceLineItemRequest",
"InvoiceLineItemResponse",
Expand Down
33 changes: 33 additions & 0 deletions src/mercoa/resources/invoice_types/types/invoice_failure_type.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
# This file was auto-generated by Fern from our API Definition.

import enum
import typing

T_Result = typing.TypeVar("T_Result")


class InvoiceFailureType(str, enum.Enum):
SOURCE_PAYMENT_ERROR = "SOURCE_PAYMENT_ERROR"
DESTINATION_PAYMENT_ERROR = "DESTINATION_PAYMENT_ERROR"
REJECTED_HIGH_RISK = "REJECTED_HIGH_RISK"
INSUFFICIENT_FUNDS = "INSUFFICIENT_FUNDS"
PROCESSING_ERROR = "PROCESSING_ERROR"

def visit(
self,
source_payment_error: typing.Callable[[], T_Result],
destination_payment_error: typing.Callable[[], T_Result],
rejected_high_risk: typing.Callable[[], T_Result],
insufficient_funds: typing.Callable[[], T_Result],
processing_error: typing.Callable[[], T_Result],
) -> T_Result:
if self is InvoiceFailureType.SOURCE_PAYMENT_ERROR:
return source_payment_error()
if self is InvoiceFailureType.DESTINATION_PAYMENT_ERROR:
return destination_payment_error()
if self is InvoiceFailureType.REJECTED_HIGH_RISK:
return rejected_high_risk()
if self is InvoiceFailureType.INSUFFICIENT_FUNDS:
return insufficient_funds()
if self is InvoiceFailureType.PROCESSING_ERROR:
return processing_error()
5 changes: 5 additions & 0 deletions src/mercoa/resources/invoice_types/types/invoice_response.py
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@
from ...transaction.types.transaction_response import TransactionResponse
from .approval_slot import ApprovalSlot
from .comment_response import CommentResponse
from .invoice_failure_type import InvoiceFailureType
from .invoice_id import InvoiceId
from .invoice_line_item_response import InvoiceLineItemResponse
from .invoice_status import InvoiceStatus
Expand Down Expand Up @@ -59,6 +60,10 @@ class InvoiceResponse(pydantic.BaseModel):
created_by: typing.Optional[EntityUserResponse] = pydantic.Field(
alias="createdBy", description=("Entity user who created this invoice.\n")
)
failure_type: typing.Optional[InvoiceFailureType] = pydantic.Field(
alias="failureType",
description=("If the invoice failed to be paid, this field will be populated with the type of failure.\n"),
)
processed_at: typing.Optional[dt.datetime] = pydantic.Field(alias="processedAt")
created_at: dt.datetime = pydantic.Field(alias="createdAt")
updated_at: dt.datetime = pydantic.Field(alias="updatedAt")
Expand Down
4 changes: 4 additions & 0 deletions src/mercoa/resources/invoice_types/types/invoice_status.py
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@ class InvoiceStatus(str, enum.Enum):
ARCHIVED = "ARCHIVED"
REFUSED = "REFUSED"
CANCELED = "CANCELED"
FAILED = "FAILED"

def visit(
self,
Expand All @@ -28,6 +29,7 @@ def visit(
archived: typing.Callable[[], T_Result],
refused: typing.Callable[[], T_Result],
canceled: typing.Callable[[], T_Result],
failed: typing.Callable[[], T_Result],
) -> T_Result:
if self is InvoiceStatus.DRAFT:
return draft()
Expand All @@ -47,3 +49,5 @@ def visit(
return refused()
if self is InvoiceStatus.CANCELED:
return canceled()
if self is InvoiceStatus.FAILED:
return failed()
10 changes: 1 addition & 9 deletions src/mercoa/resources/organization/client.py
Original file line number Diff line number Diff line change
Expand Up @@ -39,17 +39,11 @@ def get(
payment_methods: typing.Optional[bool] = None,
email_provider: typing.Optional[bool] = None,
color_scheme: typing.Optional[bool] = None,
notification_configuration: typing.Optional[bool] = None,
) -> OrganizationResponse:
_response = httpx.request(
"GET",
urllib.parse.urljoin(f"{self._environment.value}/", "organization"),
params={
"paymentMethods": payment_methods,
"emailProvider": email_provider,
"colorScheme": color_scheme,
"notificationConfiguration": notification_configuration,
},
params={"paymentMethods": payment_methods, "emailProvider": email_provider, "colorScheme": color_scheme},
headers=remove_none_from_headers(
{"Authorization": f"Bearer {self._token}" if self._token is not None else None}
),
Expand Down Expand Up @@ -140,7 +134,6 @@ async def get(
payment_methods: typing.Optional[bool] = None,
email_provider: typing.Optional[bool] = None,
color_scheme: typing.Optional[bool] = None,
notification_configuration: typing.Optional[bool] = None,
) -> OrganizationResponse:
async with httpx.AsyncClient() as _client:
_response = await _client.request(
Expand All @@ -150,7 +143,6 @@ async def get(
"paymentMethods": payment_methods,
"emailProvider": email_provider,
"colorScheme": color_scheme,
"notificationConfiguration": notification_configuration,
},
headers=remove_none_from_headers(
{"Authorization": f"Bearer {self._token}" if self._token is not None else None}
Expand Down
Loading

0 comments on commit cdd6f69

Please sign in to comment.