Avalara Tax Python SDK。
项目描述
Avalara AvaTax Python SDK
这个GitHub存储库是Avalara世界级税务服务AvaTax的Python SDK。它使用AvaTax REST v2 API,这是一个完全的REST实现,提供了一个用于所有AvaTax功能的单一客户端。有关AvaTax REST v2的更多信息,请访问Avalara开发者网络或查看在线Swagger文档。
安装
使用pip简单安装。 pip install Avalara
或者
- 将此存储库克隆到您的本地机器。
$ git clone https://github.com/avadev/AvaTax-REST-V2-Python-SDK.git
- 下载后,进入
AvaTax-REST-V2-Python-SDK
目录。
$ cd AvaTax-REST-V2-Python-SDK
- 使用Python 3开始一个新的虚拟环境并激活它。
AvaTax-REST-V2-Python-SDK $ python3 -m venv ENV
AvaTax-REST-V2-Python-SDK $ source ENV/bin/activate
- pip 将此包以及测试的额外包安装到您的虚拟环境中。
(ENV) AvaTax-REST-V2-Python-SDK $ pip install -e .
(ENV) AvaTax-REST-V2-Python-SDK $ pip install -e .[testing]
用法
创建一个事务
从avalara模块导入AvataxClient
首先需要将AvataxClient构造函数模块导入到您的命名空间或Python脚本中。
from avalara import AvataxClient
现在我们已准备好构建一个客户端对象
创建一个新的AvaTaxClient对象
client = AvataxClient('my test app',
'ver 0.0',
'my test machine',
'sandbox')
客户端构造函数接受四个字符串参数,依次为:app_name(必需)
、app_version(必需)
、machine_name(可选)
和environment(必需)
。app_name、app_version、machine_name将用于构建与该客户端每次调用相关的客户端头。它将包含在响应对象中,以帮助您跟踪API调用。环境变量environment
可以是"sandbox"
或production
,它们对应于AvaTax服务的两个不同环境。如果您是普通用户或免费试用用户,请使用"production"
。如果您没有账户,您可以在我们的开发者网站上注册一个免费试用账户,这将也是一个生产账户。如果您希望获得沙箱账户,请联系您的客户账户经理
ping服务
现在我们有了客户端对象,我们可以ping AvaTax REST V2服务器以确保连接性。
response = client.ping()
# to view respnse text
print(response.text())
# to view json version of the response
print(response.json())
# to view the status code
print(response.status_code())
# to view the raw response
print(response.raw())
请注意,使用此SDK进行的所有REST调用的响应都将是一个请求对象,其中包含状态码、响应文本、原始json和其他有关响应的信息。
将凭据添加到您的客户端对象
与ping不同,我们REST V2 API中的大多数方法都需要您进行身份验证,以便将您提供的信息与您的账户相关联。要了解是否需要身份验证,请访问我们的API参考页面。要在当前客户端对象上添加凭据
client = client.add_credentials('USERNAME/ACCOUNT_ID', 'PASSWORD/LICENSE_KEY')
add_credential
方法将哈希您的用户名/密码,或账户ID/许可证密钥对,并将其附加到您客户端对象发出的每个调用中,这意味着您只需为每个您准备使用的客户端添加一次凭据。
要验证您已添加有效的凭据,只需再次调用ping方法即可,这次在响应文本中您应该看到"authenticated": true
。
使用客户端对象创建交易
现在我们的客户端对象已进行身份验证,我们可以调用create_transaction方法,它调用CreateTransaction API
transaction_response = client.create_transaction(tax_document)
print(transaction_response.text())
tax_document = {
'addresses': {'SingleLocation': {'city': 'Irvine',
'country': 'US',
'line1': '123 Main Street',
'postalCode': '92615',
'region': 'CA'}},
'commit': False,
'companyCode': 'DEFAULT',
'currencyCode': 'USD',
'customerCode': 'ABC',
'date': '2017-04-12',
'description': 'Yarn',
'lines': [{'amount': 100,
'description': 'Yarn',
'itemCode': 'Y0001',
'number': '1',
'quantity': 1,
'taxCode': 'PS081282'}],
'purchaseOrderNo': '2017-04-12-001',
'type': 'SalesInvoice'}
create_transaction方法接受一个模型,在Python中是字典类型对象。您将填写以包含所有交易信息。在这种情况下,我们使用TransactionModel有关其他AvaTax API使用的模型信息,请访问我们的信息页面此处
使用其他方法
与其他语言中的SDK一样,Python SDK包括AvaTax REST V2 API提供的所有方法。要找到与特定API端点对应的方法,只需访问此代码页面。要了解如何将我们的REST API集成到您的系统中,请访问我们的开发者指南,其中包含有关使用我们API提供的强大功能的信息。
使用交易构建器
我们意识到必须格式化TransactionModel可能很复杂且耗时,因此我们创建了一个名为Transaction Builder的工具来帮助您组合交易模型,并创建它!首先将交易构建器构造函数导入您的命名空间:from avalara.transaction_builder import TransactionBuilder
然后,让我们创建一个交易构建器对象
tb = TransactionBuilder(client, "DEFAULT", "SalesInvoice", "ABC")
构建器需要四个必需参数,依次为
- 客户端对象
- 公司名称(通过AvaTax门户创建或通过调用CreateCompany API)
- 交易类型,可选完整列表。
- 客户代码,一个唯一代码,用于标识请求此交易的客户。
现在您可以自由地向该对象添加交易细节,使用方法如with_address
、with_line
、with_parameter
等。有关可用的交易构建器方法和它们接受的参数的完整列表,请访问代码页面。最后,您可以在构建器对象上调用create
方法,这将使用您迄今为止构建的交易模型调用CreateTransaction API,并返回响应。
设置测试凭证
如果您想运行集成和单元测试,您必须将一对凭证存储在当前环境中。将以下内容添加到您环境的activate
文件中,并重新启动bash。或者,您可以直接使用export
。
export SANDBOX_USERNAME='your_sandbox_username'
export SANDBOX_PASSWORD='your_sandbox_password'
# OR
SANDBOX_ACCOUNTID='your_sandbox_account_id'
SANDBOX_LICENSEKEY='your_sandbox_license_key'
注意:仅应使用沙盒凭证进行测试,因为测试用例将在帐户上提交/调整/作废虚拟交易以验证功能。
日志记录
日志记录使用标准的Python日志框架实现。
- 所有来自
AvataxClient
类的相关方法都使用了ava_log
装饰器。(这是通过在类级别使用另一个装饰器decorate_all_methods
实现的) ava_log
装饰器收集相关请求数据、响应数据(用于仪表化)以及异常情况下的错误数据。- 已将
AvataxClient
构造函数修改为可选参数is_log_req_resp_allowed
(默认为False),以控制日志条目是否应包含请求和响应对象。 - SDK消费者代码还可以设置
AvataxClient
的logger属性,以使用已配置的logger实例。例如:
from logging import config
# configure logging using file config or dictConfig
# or by setting basicConfig (this is default in case no logger is set)
config.fileConfig("logger_config.conf")
logger = logging.getLogger()
# set logger property
client.logger = logger
问题或建议
Avalara非常重视用户的反馈,我们希望确保每位使用我们服务的客户都能获得最佳体验。如果您对此SDK或AvaTax有任何疑问,请在我们开发者关系论坛上发布您的问题/建议,我们将及时回复您。如果您想为此SDK做出贡献,请从仓库分叉并从分叉版本提交pull request。我们很高兴审查您的贡献,并在所有检查都通过的情况下合并它们!
原始贡献者
项目详情
avalara-24.8.2.tar.gz的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | eabe8780421a499a9b98f7dafe68b48d450d15bfaedb778aab6c525d21937434 |
|
MD5 | 2a4aeff851fc12da2abef0e91c638ef6 |
|
BLAKE2b-256 | 999c0c2761b65cce67c0683dfb197ae95bf1dc2c663cade57a205c89665241ad |