跳转到主要内容

Python价格包

项目描述

Build Status Github Repo Pypi Version Pypi License Pypi Wheel Pypi Versions

维护者

Joe Black | me@joeblack.nyc | github

简介

具有CLDR支持的地区感知格式化和货币兑换的价格类和工具。由于它建立在ZCA上,因此易于扩展/定制。

在项目的ZCML中定义您的自定义货币和交换,您就成功了。

安装

pip3 install pricing

用法

基本

>>> from pricing import Price
... Price('2.22', 'USD')
EUR 2.22

>>> Price('2.34223434', 'BTC')
BTC 2.34223434

>>> m = Price(2, 'USD')
... m.amount
Decimal('2')
... m.currency
'USD'

>>> m = Price('2.22', 'EUR')
... m / 2
EUR 1.11
>>> m + Price('7.77', 'EUR')
EUR 9.99

格式化

>>> m = Price('1234.567', 'EUR')
... str(m)
'EUR 1,234.57'

>>> m.format()
'€1,234.57'

支付URI

创建BIP21和EIP681兼容的支付URI。

>>> from pricing.uris import BIP21PaymentURI
... BIP21PaymentURI(
... 'bitcoin',
... address='19kxPokCjD6tUU3sHaLZgEQBkRsCTBt3jj',
... amount='4.32345').to_uri()
'bitcoin:19kxPokCjD6tUU3sHaLZgEQBkRsCTBt3jj?amount=4.32345'
>>> from pricing.uris import EIP681PaymentURI
... EIP681PaymentURI(
... 'ethereum',
... address='077a7506b69e37e4f6852577190f04a35df9a36c',
... value='4.32345').to_uri()
'ethereum:0x077a7506b69e37e4f6852577190f04a35df9a36c?value=4.32345'

货币兑换

货币兑换通过“安装”实现IExchangeBackend接口的后端类来实现。

XPrice

您可以使用 money.XPrice(Price 的子类),在添加、减法和除法操作(+、+=、-、-=、/、//)中自动进行货币转换。这在汇总具有不同货币的大量货币对象时非常有用。最左侧对象的货币具有优先级。

from pricing import XPrice

# Register backend and rates as above...
a = XPrice(1, 'AAA')
b = XPrice(1, 'BBB')

assert sum([a, b]) == XPrice('1.25', 'AAA')

扩展和定制

您可以使用 ZCML 来配置自定义的货币格式和汇率,创建一个名为 currency.zcml 的新文件,并按照以下示例进行配置。

<configure
    xmlns:zope="http://namespaces.zope.org/zope"
    xmlns="http://namespaces.zope.org/currency">

    <zope:include package="pricing" file="currency-meta.zcml" />

    <currency default="USD">
        <currencyFormat
            name="bitcoin"
            code="BTC"
            symbol="₿"
            format="¤#,##0.########"
            currency_digits="false"
            decimal_quantization="true" />
        <currencyFormat
            name="litecoin"
            code="LTC"
            symbol="Ł"
            format="¤#,##0.########"
            currency_digits="false"
            decimal_quantization="true" />
        <currencyFormat
            name="ether"
            code="ETH"
            symbol="Ξ"
            format="¤#,##0.##################"
            currency_digits="false"
            decimal_quantization="true" />

        <exchange
            component="pricing.exchange.Exchange"
            backend="pricing.exchange.CoinBaseBackend"
            base="USD" />
    </currency>

</configure>

然后,在您的 configure.zcml 文件中包含 currency.zcml

<include file="currency.zcml" />

字段

包括基于 zope.schemaattrs 的类的自定义字段。请参阅 money.fields

异常

PriceException(Exception)

所有异常的基类。

CurrencyMismatch(PriceException, ValueError)

当混合不同货币时抛出,例如 Price(2, 'EUR') + Price(2, 'USD')。必须首先将价格对象转换为相同的货币,或者可以使用 XPrice 进行自动转换。

InvalidOperandType(PriceException, TypeError)

当尝试无效操作时抛出,例如在货币对象之间进行乘法。

ExchangeError(PriceException)

汇率异常的基类。

ExchangeBackendNotInstalled(ExchangeError)

如果尝试转换,但没有可用的后端,则抛出。

ExchangeRateNotFound(ExchangeError)

已安装的后端未能提供源货币和目标货币之间适当的汇率。

层次结构

  • PriceException

    • CurrencyMismatch

    • InvalidOperandType

    • ExchangeError

      • ExchangeBackendNotInstalled

      • ExchangeRateNotFound

更改

项目详情


下载文件

下载适合您平台的文件。如果您不确定选择哪个,请了解更多关于 安装包 的信息。

源代码分布

pricing-1.0.1.tar.gz (24.2 kB 查看散列)

上传时间 源代码

构建分布

pricing-1.0.1-py3-none-any.whl (29.3 kB 查看散列)

上传时间 Python 3

由以下支持

AWS AWS 云计算和安全赞助商 Datadog Datadog 监控 Fastly Fastly CDN Google Google 下载分析 Microsoft Microsoft PSF赞助商 Pingdom Pingdom 监控 Sentry Sentry 错误记录 StatusPage StatusPage 状态页面