From 4b28856e2df259b6acf5018aa69d0b79fb1cdda4 Mon Sep 17 00:00:00 2001 From: CoprDistGit Date: Tue, 11 Apr 2023 23:26:12 +0000 Subject: automatic import of python-dwollav2 --- .gitignore | 1 + python-dwollav2.spec | 770 +++++++++++++++++++++++++++++++++++++++++++++++++++ sources | 1 + 3 files changed, 772 insertions(+) create mode 100644 python-dwollav2.spec create mode 100644 sources diff --git a/.gitignore b/.gitignore index e69de29..d983a15 100644 --- a/.gitignore +++ b/.gitignore @@ -0,0 +1 @@ +/dwollav2-2.2.1.tar.gz diff --git a/python-dwollav2.spec b/python-dwollav2.spec new file mode 100644 index 0000000..7ef9821 --- /dev/null +++ b/python-dwollav2.spec @@ -0,0 +1,770 @@ +%global _empty_manifest_terminate_build 0 +Name: python-dwollav2 +Version: 2.2.1 +Release: 1 +Summary: Official Dwolla V2 API client +License: MIT +URL: https://docsv2.dwolla.com +Source0: https://mirrors.nju.edu.cn/pypi/web/packages/8f/86/85719d0a2aceaa4058b73d94c1e946440ca25d55078da958908218b0235a/dwollav2-2.2.1.tar.gz +BuildArch: noarch + +Requires: python3-requests +Requires: python3-future + +%description +# DwollaV2 + +Dwolla V2 Python client. + +[API Documentation](https://docsv2.dwolla.com) + +## Installation + +`dwollav2` is available on [PyPi](https://pypi.python.org/pypi/dwollav2), and therefore can be installed automagically via [pip](https://pip.pypa.io/en/stable/installing/). + +``` +pip install dwollav2 +``` + +## `dwollav2.Client` + +### Basic usage + +Create a client using your application's consumer key and secret found on the applications page +([Sandbox][apsandbox], [Production][approd]). + +[apsandbox]: https://dashboard-sandbox.dwolla.com/applications +[approd]: https://dashboard.dwolla.com/applications + +```python +client = dwollav2.Client( + key = os.environ['DWOLLA_APP_KEY'], + secret = os.environ['DWOLLA_APP_SECRET'], + environment = 'sandbox', # defaults to 'production' + requests = {'timeout': 0.001} +) +``` + +### Configure an `on_grant` callback (optional) + +An `on_grant` callback is useful for storing new tokens when they are granted. The `on_grant` +callback is called with the `Token` that was just granted by the server. + +```python +client = dwollav2.Client( + key = os.environ['DWOLLA_APP_KEY'], + secret = os.environ['DWOLLA_APP_SECRET'], + on_grant = lambda t: save(t) +) +``` + +It is highly recommended that you encrypt any token data you store. + +### Integrations Authorization + +Check out our [Integrations Authorization Guide](https://developers.dwolla.com/integrations/authorization). + +## `Token` + +Tokens can be used to make requests to the Dwolla V2 API. + +### Application tokens + +Application access tokens are used to authenticate against the API on behalf of a consumer application. Application tokens can be used to access resources in the API that either belong to the application itself (`webhooks`, `events`, `webhook-subscriptions`) or the partner Account that owns the consumer application (`accounts`, `customers`, `funding-sources`, etc.). Application tokens are obtained by using the [`client_credentials`][client_credentials] OAuth grant type: + +[client_credentials]: https://tools.ietf.org/html/rfc6749#section-4.4 + +```python +application_token = client.Auth.client() +``` + +_Application tokens do not include a `refresh_token`. When an application token expires, generate +a new one using `client.Auth.client()`._ + +### Initializing pre-existing tokens: + +`Token`s can be initialized with the following attributes: + +```python +client.Token(access_token = '...', + expires_in = 123) +``` + +## Requests + +`Token`s can make requests using the `#get`, `#post`, and `#delete` methods. + +```python +# GET api.dwolla.com/resource?foo=bar +token.get('resource', foo = 'bar') + +# POST api.dwolla.com/resource {"foo":"bar"} +token.post('resource', foo = 'bar') + +# POST api.dwolla.com/resource multipart/form-data foo=... +token.post('resource', foo = ('mclovin.jpg', open('mclovin.jpg', 'rb'), 'image/jpeg')) + +# PUT api.dwolla.com/resource {"foo":"bar"} +token.put('resource', foo = 'bar') + +# DELETE api.dwolla.com/resource +token.delete('resource') +``` + +#### Setting headers + +To set additional headers on a request you can pass a `dict` of headers as the 3rd argument. + +For example: + +```python +token.post('customers', { 'firstName': 'John', 'lastName': 'Doe', 'email': 'jd@doe.com' }, + { 'Idempotency-Key': 'a52fcf63-0730-41c3-96e8-7147b5d1fb01' }) +``` + +## Responses + +Requests return a `Response`. + +```python +res = token.get('/') + +res.status +# => 200 + +res.headers +# => {'server'=>'cloudflare-nginx', 'date'=>'Mon, 28 Mar 2016 15:30:23 GMT', 'content-type'=>'application/vnd.dwolla.v1.hal+json; charset=UTF-8', 'content-length'=>'150', 'connection'=>'close', 'set-cookie'=>'__cfduid=d9dcd0f586c166d36cbd45b992bdaa11b1459179023; expires=Tue, 28-Mar-17 15:30:23 GMT; path=/; domain=.dwolla.com; HttpOnly', 'x-request-id'=>'69a4e612-5dae-4c52-a6a0-2f921e34a88a', 'cf-ray'=>'28ac1f81875941e3-MSP'} + +res.body['_links']['events']['href'] +# => 'https://api-sandbox.dwolla.com/events' +``` + +## Errors + +If the server returns an error, a `dwollav2.Error` (or one of its subclasses) will be raised. +`dwollav2.Error`s are similar to `Response`s. + +```python +try: + token.get('/not-found') +except dwollav2.NotFoundError as e: + e.status + # => 404 + + e.headers + # => {"server"=>"cloudflare-nginx", "date"=>"Mon, 28 Mar 2016 15:35:32 GMT", "content-type"=>"application/vnd.dwolla.v1.hal+json; profile=\"http://nocarrier.co.uk/profiles/vnd.error/\"; charset=UTF-8", "content-length"=>"69", "connection"=>"close", "set-cookie"=>"__cfduid=da1478bfdf3e56275cd8a6a741866ccce1459179332; expires=Tue, 28-Mar-17 15:35:32 GMT; path=/; domain=.dwolla.com; HttpOnly", "access-control-allow-origin"=>"*", "x-request-id"=>"667fca74-b53d-43db-bddd-50426a011881", "cf-ray"=>"28ac270abca64207-MSP"} + + e.body.code + # => "NotFound" +except dwollav2.Error: + # ... +``` + +### `dwollav2.Error` subclasses: + +_See https://docsv2.dwolla.com/#errors for more info._ + +- `dwollav2.AccessDeniedError` +- `dwollav2.InvalidCredentialsError` +- `dwollav2.NotFoundError` +- `dwollav2.BadRequestError` +- `dwollav2.InvalidGrantError` +- `dwollav2.RequestTimeoutError` +- `dwollav2.ExpiredAccessTokenError` +- `dwollav2.InvalidRequestError` +- `dwollav2.ServerError` +- `dwollav2.ForbiddenError` +- `dwollav2.InvalidResourceStateError` +- `dwollav2.TemporarilyUnavailableError` +- `dwollav2.InvalidAccessTokenError` +- `dwollav2.InvalidScopeError` +- `dwollav2.UnauthorizedClientError` +- `dwollav2.InvalidAccountStatusError` +- `dwollav2.InvalidScopesError` +- `dwollav2.UnsupportedGrantTypeError` +- `dwollav2.InvalidApplicationStatusError` +- `dwollav2.InvalidVersionError` +- `dwollav2.UnsupportedResponseTypeError` +- `dwollav2.InvalidClientError` +- `dwollav2.MethodNotAllowedError` +- `dwollav2.ValidationError` +- `dwollav2.TooManyRequestsError` +- `dwollav2.ConflictError` + +## Development + +After checking out the repo, run `pip install -r requirements.txt` to install dependencies. +Then, run `python setup.py test` to run the tests. + +To install this gem onto your local machine, run `pip install -e .`. + +## Contributing + +Bug reports and pull requests are welcome on GitHub at https://github.com/Dwolla/dwolla-v2-python. + +## License + +The package is available as open source under the terms of the [MIT License](https://github.com/Dwolla/dwolla-v2-python). + +## Changelog + +- **2.2.1** + - Add extra check in URL's to ensure they are clean. [#36](https://github.com/Dwolla/dwolla-v2-python/pull/36). +- **2.2.0** + - Update JSON request bodies to serialize via `simplejson` so datatypes like `Decimal` still + serialize like they did pre `2.0.0` +- **2.1.0** + - Do not share `requests.session()` across instances of `dwollav2.Client` +- **2.0.0** + - JSON request bodies now contain sorted keys to ensure the same request body for a given set of + arguments, no matter the order they are passed to `dwolla.post`. This ensures the + [`Idempotency-Key`][] header will work as intended without additional effort by developers. + - **NOTE**: Because this change alters the formatting of JSON request bodies, we are releasing it + as a major new version. The request body of a request made with `1.6.0` will not match the + request body of the same request made in `2.0.0`. This will nullify the effect of the + [`Idempotency-Key`][] header when upgrading, so please take this into account. + If you have any questions please [reach out to us](https://discuss.dwolla.com/)! + There are no other changes since `1.6.0`. +- **1.6.0** Allow configuration of `requests` options on `dwollav2.Client`. +- **1.5.0** Add integrations auth functionality +- **1.4.0** ~~Pass kwargs from `get`, `post`, and `delete` methods to underlying requests methods.~~ (Removed in v1.6) +- **1.3.0** Change token URLs, update dependencies. +- **1.2.4** Create a new session for each Token. +- **1.2.3** Check if IOBase when checking to see if something is a file. +- **1.2.2** Strip domain from URLs provided to token.\* methods. +- **1.2.1** Update sandbox URLs from uat => sandbox. +- **1.2.0** Refer to Client id as key. +- **1.1.8** Support `verified_account` and `dwolla_landing` auth flags +- **1.1.7** Use session over connections for [performance improvement](http://docs.python-requests.org/en/master/user/advanced/#session-objects) ([#8](https://github.com/Dwolla/dwolla-v2-python/pull/8) - Thanks @bfeeser!) +- **1.1.5** Fix file upload bug when using with Python 2 ([#6](https://github.com/Dwolla/dwolla-v2-python/issues/6)) +- **1.1.2** Add `TooManyRequestsError` and `ConflictError` +- **1.1.1** Add MANIFEST.in +- **1.1.0** Support per-request headers + +[`idempotency-key`]: https://docs.dwolla.com/#idempotency-key + + + + +%package -n python3-dwollav2 +Summary: Official Dwolla V2 API client +Provides: python-dwollav2 +BuildRequires: python3-devel +BuildRequires: python3-setuptools +BuildRequires: python3-pip +%description -n python3-dwollav2 +# DwollaV2 + +Dwolla V2 Python client. + +[API Documentation](https://docsv2.dwolla.com) + +## Installation + +`dwollav2` is available on [PyPi](https://pypi.python.org/pypi/dwollav2), and therefore can be installed automagically via [pip](https://pip.pypa.io/en/stable/installing/). + +``` +pip install dwollav2 +``` + +## `dwollav2.Client` + +### Basic usage + +Create a client using your application's consumer key and secret found on the applications page +([Sandbox][apsandbox], [Production][approd]). + +[apsandbox]: https://dashboard-sandbox.dwolla.com/applications +[approd]: https://dashboard.dwolla.com/applications + +```python +client = dwollav2.Client( + key = os.environ['DWOLLA_APP_KEY'], + secret = os.environ['DWOLLA_APP_SECRET'], + environment = 'sandbox', # defaults to 'production' + requests = {'timeout': 0.001} +) +``` + +### Configure an `on_grant` callback (optional) + +An `on_grant` callback is useful for storing new tokens when they are granted. The `on_grant` +callback is called with the `Token` that was just granted by the server. + +```python +client = dwollav2.Client( + key = os.environ['DWOLLA_APP_KEY'], + secret = os.environ['DWOLLA_APP_SECRET'], + on_grant = lambda t: save(t) +) +``` + +It is highly recommended that you encrypt any token data you store. + +### Integrations Authorization + +Check out our [Integrations Authorization Guide](https://developers.dwolla.com/integrations/authorization). + +## `Token` + +Tokens can be used to make requests to the Dwolla V2 API. + +### Application tokens + +Application access tokens are used to authenticate against the API on behalf of a consumer application. Application tokens can be used to access resources in the API that either belong to the application itself (`webhooks`, `events`, `webhook-subscriptions`) or the partner Account that owns the consumer application (`accounts`, `customers`, `funding-sources`, etc.). Application tokens are obtained by using the [`client_credentials`][client_credentials] OAuth grant type: + +[client_credentials]: https://tools.ietf.org/html/rfc6749#section-4.4 + +```python +application_token = client.Auth.client() +``` + +_Application tokens do not include a `refresh_token`. When an application token expires, generate +a new one using `client.Auth.client()`._ + +### Initializing pre-existing tokens: + +`Token`s can be initialized with the following attributes: + +```python +client.Token(access_token = '...', + expires_in = 123) +``` + +## Requests + +`Token`s can make requests using the `#get`, `#post`, and `#delete` methods. + +```python +# GET api.dwolla.com/resource?foo=bar +token.get('resource', foo = 'bar') + +# POST api.dwolla.com/resource {"foo":"bar"} +token.post('resource', foo = 'bar') + +# POST api.dwolla.com/resource multipart/form-data foo=... +token.post('resource', foo = ('mclovin.jpg', open('mclovin.jpg', 'rb'), 'image/jpeg')) + +# PUT api.dwolla.com/resource {"foo":"bar"} +token.put('resource', foo = 'bar') + +# DELETE api.dwolla.com/resource +token.delete('resource') +``` + +#### Setting headers + +To set additional headers on a request you can pass a `dict` of headers as the 3rd argument. + +For example: + +```python +token.post('customers', { 'firstName': 'John', 'lastName': 'Doe', 'email': 'jd@doe.com' }, + { 'Idempotency-Key': 'a52fcf63-0730-41c3-96e8-7147b5d1fb01' }) +``` + +## Responses + +Requests return a `Response`. + +```python +res = token.get('/') + +res.status +# => 200 + +res.headers +# => {'server'=>'cloudflare-nginx', 'date'=>'Mon, 28 Mar 2016 15:30:23 GMT', 'content-type'=>'application/vnd.dwolla.v1.hal+json; charset=UTF-8', 'content-length'=>'150', 'connection'=>'close', 'set-cookie'=>'__cfduid=d9dcd0f586c166d36cbd45b992bdaa11b1459179023; expires=Tue, 28-Mar-17 15:30:23 GMT; path=/; domain=.dwolla.com; HttpOnly', 'x-request-id'=>'69a4e612-5dae-4c52-a6a0-2f921e34a88a', 'cf-ray'=>'28ac1f81875941e3-MSP'} + +res.body['_links']['events']['href'] +# => 'https://api-sandbox.dwolla.com/events' +``` + +## Errors + +If the server returns an error, a `dwollav2.Error` (or one of its subclasses) will be raised. +`dwollav2.Error`s are similar to `Response`s. + +```python +try: + token.get('/not-found') +except dwollav2.NotFoundError as e: + e.status + # => 404 + + e.headers + # => {"server"=>"cloudflare-nginx", "date"=>"Mon, 28 Mar 2016 15:35:32 GMT", "content-type"=>"application/vnd.dwolla.v1.hal+json; profile=\"http://nocarrier.co.uk/profiles/vnd.error/\"; charset=UTF-8", "content-length"=>"69", "connection"=>"close", "set-cookie"=>"__cfduid=da1478bfdf3e56275cd8a6a741866ccce1459179332; expires=Tue, 28-Mar-17 15:35:32 GMT; path=/; domain=.dwolla.com; HttpOnly", "access-control-allow-origin"=>"*", "x-request-id"=>"667fca74-b53d-43db-bddd-50426a011881", "cf-ray"=>"28ac270abca64207-MSP"} + + e.body.code + # => "NotFound" +except dwollav2.Error: + # ... +``` + +### `dwollav2.Error` subclasses: + +_See https://docsv2.dwolla.com/#errors for more info._ + +- `dwollav2.AccessDeniedError` +- `dwollav2.InvalidCredentialsError` +- `dwollav2.NotFoundError` +- `dwollav2.BadRequestError` +- `dwollav2.InvalidGrantError` +- `dwollav2.RequestTimeoutError` +- `dwollav2.ExpiredAccessTokenError` +- `dwollav2.InvalidRequestError` +- `dwollav2.ServerError` +- `dwollav2.ForbiddenError` +- `dwollav2.InvalidResourceStateError` +- `dwollav2.TemporarilyUnavailableError` +- `dwollav2.InvalidAccessTokenError` +- `dwollav2.InvalidScopeError` +- `dwollav2.UnauthorizedClientError` +- `dwollav2.InvalidAccountStatusError` +- `dwollav2.InvalidScopesError` +- `dwollav2.UnsupportedGrantTypeError` +- `dwollav2.InvalidApplicationStatusError` +- `dwollav2.InvalidVersionError` +- `dwollav2.UnsupportedResponseTypeError` +- `dwollav2.InvalidClientError` +- `dwollav2.MethodNotAllowedError` +- `dwollav2.ValidationError` +- `dwollav2.TooManyRequestsError` +- `dwollav2.ConflictError` + +## Development + +After checking out the repo, run `pip install -r requirements.txt` to install dependencies. +Then, run `python setup.py test` to run the tests. + +To install this gem onto your local machine, run `pip install -e .`. + +## Contributing + +Bug reports and pull requests are welcome on GitHub at https://github.com/Dwolla/dwolla-v2-python. + +## License + +The package is available as open source under the terms of the [MIT License](https://github.com/Dwolla/dwolla-v2-python). + +## Changelog + +- **2.2.1** + - Add extra check in URL's to ensure they are clean. [#36](https://github.com/Dwolla/dwolla-v2-python/pull/36). +- **2.2.0** + - Update JSON request bodies to serialize via `simplejson` so datatypes like `Decimal` still + serialize like they did pre `2.0.0` +- **2.1.0** + - Do not share `requests.session()` across instances of `dwollav2.Client` +- **2.0.0** + - JSON request bodies now contain sorted keys to ensure the same request body for a given set of + arguments, no matter the order they are passed to `dwolla.post`. This ensures the + [`Idempotency-Key`][] header will work as intended without additional effort by developers. + - **NOTE**: Because this change alters the formatting of JSON request bodies, we are releasing it + as a major new version. The request body of a request made with `1.6.0` will not match the + request body of the same request made in `2.0.0`. This will nullify the effect of the + [`Idempotency-Key`][] header when upgrading, so please take this into account. + If you have any questions please [reach out to us](https://discuss.dwolla.com/)! + There are no other changes since `1.6.0`. +- **1.6.0** Allow configuration of `requests` options on `dwollav2.Client`. +- **1.5.0** Add integrations auth functionality +- **1.4.0** ~~Pass kwargs from `get`, `post`, and `delete` methods to underlying requests methods.~~ (Removed in v1.6) +- **1.3.0** Change token URLs, update dependencies. +- **1.2.4** Create a new session for each Token. +- **1.2.3** Check if IOBase when checking to see if something is a file. +- **1.2.2** Strip domain from URLs provided to token.\* methods. +- **1.2.1** Update sandbox URLs from uat => sandbox. +- **1.2.0** Refer to Client id as key. +- **1.1.8** Support `verified_account` and `dwolla_landing` auth flags +- **1.1.7** Use session over connections for [performance improvement](http://docs.python-requests.org/en/master/user/advanced/#session-objects) ([#8](https://github.com/Dwolla/dwolla-v2-python/pull/8) - Thanks @bfeeser!) +- **1.1.5** Fix file upload bug when using with Python 2 ([#6](https://github.com/Dwolla/dwolla-v2-python/issues/6)) +- **1.1.2** Add `TooManyRequestsError` and `ConflictError` +- **1.1.1** Add MANIFEST.in +- **1.1.0** Support per-request headers + +[`idempotency-key`]: https://docs.dwolla.com/#idempotency-key + + + + +%package help +Summary: Development documents and examples for dwollav2 +Provides: python3-dwollav2-doc +%description help +# DwollaV2 + +Dwolla V2 Python client. + +[API Documentation](https://docsv2.dwolla.com) + +## Installation + +`dwollav2` is available on [PyPi](https://pypi.python.org/pypi/dwollav2), and therefore can be installed automagically via [pip](https://pip.pypa.io/en/stable/installing/). + +``` +pip install dwollav2 +``` + +## `dwollav2.Client` + +### Basic usage + +Create a client using your application's consumer key and secret found on the applications page +([Sandbox][apsandbox], [Production][approd]). + +[apsandbox]: https://dashboard-sandbox.dwolla.com/applications +[approd]: https://dashboard.dwolla.com/applications + +```python +client = dwollav2.Client( + key = os.environ['DWOLLA_APP_KEY'], + secret = os.environ['DWOLLA_APP_SECRET'], + environment = 'sandbox', # defaults to 'production' + requests = {'timeout': 0.001} +) +``` + +### Configure an `on_grant` callback (optional) + +An `on_grant` callback is useful for storing new tokens when they are granted. The `on_grant` +callback is called with the `Token` that was just granted by the server. + +```python +client = dwollav2.Client( + key = os.environ['DWOLLA_APP_KEY'], + secret = os.environ['DWOLLA_APP_SECRET'], + on_grant = lambda t: save(t) +) +``` + +It is highly recommended that you encrypt any token data you store. + +### Integrations Authorization + +Check out our [Integrations Authorization Guide](https://developers.dwolla.com/integrations/authorization). + +## `Token` + +Tokens can be used to make requests to the Dwolla V2 API. + +### Application tokens + +Application access tokens are used to authenticate against the API on behalf of a consumer application. Application tokens can be used to access resources in the API that either belong to the application itself (`webhooks`, `events`, `webhook-subscriptions`) or the partner Account that owns the consumer application (`accounts`, `customers`, `funding-sources`, etc.). Application tokens are obtained by using the [`client_credentials`][client_credentials] OAuth grant type: + +[client_credentials]: https://tools.ietf.org/html/rfc6749#section-4.4 + +```python +application_token = client.Auth.client() +``` + +_Application tokens do not include a `refresh_token`. When an application token expires, generate +a new one using `client.Auth.client()`._ + +### Initializing pre-existing tokens: + +`Token`s can be initialized with the following attributes: + +```python +client.Token(access_token = '...', + expires_in = 123) +``` + +## Requests + +`Token`s can make requests using the `#get`, `#post`, and `#delete` methods. + +```python +# GET api.dwolla.com/resource?foo=bar +token.get('resource', foo = 'bar') + +# POST api.dwolla.com/resource {"foo":"bar"} +token.post('resource', foo = 'bar') + +# POST api.dwolla.com/resource multipart/form-data foo=... +token.post('resource', foo = ('mclovin.jpg', open('mclovin.jpg', 'rb'), 'image/jpeg')) + +# PUT api.dwolla.com/resource {"foo":"bar"} +token.put('resource', foo = 'bar') + +# DELETE api.dwolla.com/resource +token.delete('resource') +``` + +#### Setting headers + +To set additional headers on a request you can pass a `dict` of headers as the 3rd argument. + +For example: + +```python +token.post('customers', { 'firstName': 'John', 'lastName': 'Doe', 'email': 'jd@doe.com' }, + { 'Idempotency-Key': 'a52fcf63-0730-41c3-96e8-7147b5d1fb01' }) +``` + +## Responses + +Requests return a `Response`. + +```python +res = token.get('/') + +res.status +# => 200 + +res.headers +# => {'server'=>'cloudflare-nginx', 'date'=>'Mon, 28 Mar 2016 15:30:23 GMT', 'content-type'=>'application/vnd.dwolla.v1.hal+json; charset=UTF-8', 'content-length'=>'150', 'connection'=>'close', 'set-cookie'=>'__cfduid=d9dcd0f586c166d36cbd45b992bdaa11b1459179023; expires=Tue, 28-Mar-17 15:30:23 GMT; path=/; domain=.dwolla.com; HttpOnly', 'x-request-id'=>'69a4e612-5dae-4c52-a6a0-2f921e34a88a', 'cf-ray'=>'28ac1f81875941e3-MSP'} + +res.body['_links']['events']['href'] +# => 'https://api-sandbox.dwolla.com/events' +``` + +## Errors + +If the server returns an error, a `dwollav2.Error` (or one of its subclasses) will be raised. +`dwollav2.Error`s are similar to `Response`s. + +```python +try: + token.get('/not-found') +except dwollav2.NotFoundError as e: + e.status + # => 404 + + e.headers + # => {"server"=>"cloudflare-nginx", "date"=>"Mon, 28 Mar 2016 15:35:32 GMT", "content-type"=>"application/vnd.dwolla.v1.hal+json; profile=\"http://nocarrier.co.uk/profiles/vnd.error/\"; charset=UTF-8", "content-length"=>"69", "connection"=>"close", "set-cookie"=>"__cfduid=da1478bfdf3e56275cd8a6a741866ccce1459179332; expires=Tue, 28-Mar-17 15:35:32 GMT; path=/; domain=.dwolla.com; HttpOnly", "access-control-allow-origin"=>"*", "x-request-id"=>"667fca74-b53d-43db-bddd-50426a011881", "cf-ray"=>"28ac270abca64207-MSP"} + + e.body.code + # => "NotFound" +except dwollav2.Error: + # ... +``` + +### `dwollav2.Error` subclasses: + +_See https://docsv2.dwolla.com/#errors for more info._ + +- `dwollav2.AccessDeniedError` +- `dwollav2.InvalidCredentialsError` +- `dwollav2.NotFoundError` +- `dwollav2.BadRequestError` +- `dwollav2.InvalidGrantError` +- `dwollav2.RequestTimeoutError` +- `dwollav2.ExpiredAccessTokenError` +- `dwollav2.InvalidRequestError` +- `dwollav2.ServerError` +- `dwollav2.ForbiddenError` +- `dwollav2.InvalidResourceStateError` +- `dwollav2.TemporarilyUnavailableError` +- `dwollav2.InvalidAccessTokenError` +- `dwollav2.InvalidScopeError` +- `dwollav2.UnauthorizedClientError` +- `dwollav2.InvalidAccountStatusError` +- `dwollav2.InvalidScopesError` +- `dwollav2.UnsupportedGrantTypeError` +- `dwollav2.InvalidApplicationStatusError` +- `dwollav2.InvalidVersionError` +- `dwollav2.UnsupportedResponseTypeError` +- `dwollav2.InvalidClientError` +- `dwollav2.MethodNotAllowedError` +- `dwollav2.ValidationError` +- `dwollav2.TooManyRequestsError` +- `dwollav2.ConflictError` + +## Development + +After checking out the repo, run `pip install -r requirements.txt` to install dependencies. +Then, run `python setup.py test` to run the tests. + +To install this gem onto your local machine, run `pip install -e .`. + +## Contributing + +Bug reports and pull requests are welcome on GitHub at https://github.com/Dwolla/dwolla-v2-python. + +## License + +The package is available as open source under the terms of the [MIT License](https://github.com/Dwolla/dwolla-v2-python). + +## Changelog + +- **2.2.1** + - Add extra check in URL's to ensure they are clean. [#36](https://github.com/Dwolla/dwolla-v2-python/pull/36). +- **2.2.0** + - Update JSON request bodies to serialize via `simplejson` so datatypes like `Decimal` still + serialize like they did pre `2.0.0` +- **2.1.0** + - Do not share `requests.session()` across instances of `dwollav2.Client` +- **2.0.0** + - JSON request bodies now contain sorted keys to ensure the same request body for a given set of + arguments, no matter the order they are passed to `dwolla.post`. This ensures the + [`Idempotency-Key`][] header will work as intended without additional effort by developers. + - **NOTE**: Because this change alters the formatting of JSON request bodies, we are releasing it + as a major new version. The request body of a request made with `1.6.0` will not match the + request body of the same request made in `2.0.0`. This will nullify the effect of the + [`Idempotency-Key`][] header when upgrading, so please take this into account. + If you have any questions please [reach out to us](https://discuss.dwolla.com/)! + There are no other changes since `1.6.0`. +- **1.6.0** Allow configuration of `requests` options on `dwollav2.Client`. +- **1.5.0** Add integrations auth functionality +- **1.4.0** ~~Pass kwargs from `get`, `post`, and `delete` methods to underlying requests methods.~~ (Removed in v1.6) +- **1.3.0** Change token URLs, update dependencies. +- **1.2.4** Create a new session for each Token. +- **1.2.3** Check if IOBase when checking to see if something is a file. +- **1.2.2** Strip domain from URLs provided to token.\* methods. +- **1.2.1** Update sandbox URLs from uat => sandbox. +- **1.2.0** Refer to Client id as key. +- **1.1.8** Support `verified_account` and `dwolla_landing` auth flags +- **1.1.7** Use session over connections for [performance improvement](http://docs.python-requests.org/en/master/user/advanced/#session-objects) ([#8](https://github.com/Dwolla/dwolla-v2-python/pull/8) - Thanks @bfeeser!) +- **1.1.5** Fix file upload bug when using with Python 2 ([#6](https://github.com/Dwolla/dwolla-v2-python/issues/6)) +- **1.1.2** Add `TooManyRequestsError` and `ConflictError` +- **1.1.1** Add MANIFEST.in +- **1.1.0** Support per-request headers + +[`idempotency-key`]: https://docs.dwolla.com/#idempotency-key + + + + +%prep +%autosetup -n dwollav2-2.2.1 + +%build +%py3_build + +%install +%py3_install +install -d -m755 %{buildroot}/%{_pkgdocdir} +if [ -d doc ]; then cp -arf doc %{buildroot}/%{_pkgdocdir}; fi +if [ -d docs ]; then cp -arf docs %{buildroot}/%{_pkgdocdir}; fi +if [ -d example ]; then cp -arf example %{buildroot}/%{_pkgdocdir}; fi +if [ -d examples ]; then cp -arf examples %{buildroot}/%{_pkgdocdir}; fi +pushd %{buildroot} +if [ -d usr/lib ]; then + find usr/lib -type f -printf "/%h/%f\n" >> filelist.lst +fi +if [ -d usr/lib64 ]; then + find usr/lib64 -type f -printf "/%h/%f\n" >> filelist.lst +fi +if [ -d usr/bin ]; then + find usr/bin -type f -printf "/%h/%f\n" >> filelist.lst +fi +if [ -d usr/sbin ]; then + find usr/sbin -type f -printf "/%h/%f\n" >> filelist.lst +fi +touch doclist.lst +if [ -d usr/share/man ]; then + find usr/share/man -type f -printf "/%h/%f.gz\n" >> doclist.lst +fi +popd +mv %{buildroot}/filelist.lst . +mv %{buildroot}/doclist.lst . + +%files -n python3-dwollav2 -f filelist.lst +%dir %{python3_sitelib}/* + +%files help -f doclist.lst +%{_docdir}/* + +%changelog +* Tue Apr 11 2023 Python_Bot - 2.2.1-1 +- Package Spec generated diff --git a/sources b/sources new file mode 100644 index 0000000..bd3514c --- /dev/null +++ b/sources @@ -0,0 +1 @@ +cb7445d0eb3f18285b25c5f55852114d dwollav2-2.2.1.tar.gz -- cgit v1.2.3