bitvavo-api-upgraded 1.15.8__py3-none-any.whl → 1.17.0__py3-none-any.whl
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.
- bitvavo_api_upgraded/__init__.py +3 -0
- bitvavo_api_upgraded/bitvavo.py +271 -184
- bitvavo_api_upgraded/helper_funcs.py +11 -5
- bitvavo_api_upgraded/py.typed +0 -0
- bitvavo_api_upgraded/settings.py +8 -4
- bitvavo_api_upgraded/type_aliases.py +10 -7
- bitvavo_api_upgraded-1.17.0.dist-info/METADATA +319 -0
- bitvavo_api_upgraded-1.17.0.dist-info/RECORD +10 -0
- {bitvavo_api_upgraded-1.15.8.dist-info → bitvavo_api_upgraded-1.17.0.dist-info}/WHEEL +1 -2
- {bitvavo_api_upgraded-1.15.8.dist-info → bitvavo_api_upgraded-1.17.0.dist-info/licenses}/LICENSE.txt +2 -2
- bitvavo_api_upgraded-1.15.8.dist-info/METADATA +0 -77
- bitvavo_api_upgraded-1.15.8.dist-info/RECORD +0 -10
- bitvavo_api_upgraded-1.15.8.dist-info/top_level.txt +0 -1
@@ -1,14 +1,21 @@
|
|
1
1
|
"""
|
2
2
|
Some helper functions that should make my life a lot easier
|
3
3
|
"""
|
4
|
+
|
4
5
|
from logging.config import dictConfig
|
5
6
|
from time import time
|
7
|
+
from typing import TYPE_CHECKING
|
6
8
|
|
7
9
|
import structlog
|
8
10
|
|
9
11
|
from bitvavo_api_upgraded.settings import BITVAVO_API_UPGRADED
|
10
12
|
from bitvavo_api_upgraded.type_aliases import ms, s_f
|
11
13
|
|
14
|
+
if TYPE_CHECKING:
|
15
|
+
from collections.abc import Callable
|
16
|
+
|
17
|
+
from structlog.types import EventDict, WrappedLogger
|
18
|
+
|
12
19
|
|
13
20
|
def time_ms() -> ms:
|
14
21
|
return int(time() * 1000)
|
@@ -19,16 +26,15 @@ def time_to_wait(rateLimitResetAt: ms) -> s_f:
|
|
19
26
|
if curr_time > rateLimitResetAt:
|
20
27
|
# rateLimitRemaining has already reset
|
21
28
|
return 0.0
|
22
|
-
|
23
|
-
return abs(s_f((rateLimitResetAt - curr_time) / 1000))
|
29
|
+
return abs(s_f((rateLimitResetAt - curr_time) / 1000))
|
24
30
|
|
25
31
|
|
26
32
|
def configure_loggers() -> None:
|
27
33
|
"""
|
28
34
|
source: https://docs.python.org/3.9/library/logging.config.html#dictionary-schema-details
|
29
35
|
"""
|
30
|
-
shared_pre_chain = [
|
31
|
-
structlog.threadlocal.merge_threadlocal,
|
36
|
+
shared_pre_chain: list[Callable[[WrappedLogger, str, EventDict], EventDict]] = [
|
37
|
+
# structlog.threadlocal.merge_threadlocal,
|
32
38
|
structlog.stdlib.add_logger_name, # show which named logger made the message!
|
33
39
|
structlog.processors.add_log_level, # info, warning, error, etc
|
34
40
|
structlog.processors.TimeStamper(fmt="%Y-%m-%dT%H:%M:%S", utc=False), # add an ISO formatted string
|
@@ -72,7 +78,7 @@ def configure_loggers() -> None:
|
|
72
78
|
"propagate": True,
|
73
79
|
},
|
74
80
|
},
|
75
|
-
}
|
81
|
+
},
|
76
82
|
)
|
77
83
|
|
78
84
|
structlog.configure(
|
File without changes
|
bitvavo_api_upgraded/settings.py
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
import logging
|
2
|
-
|
3
2
|
from pathlib import Path
|
4
|
-
|
3
|
+
|
4
|
+
from decouple import AutoConfig, Choices
|
5
5
|
|
6
6
|
from bitvavo_api_upgraded.type_aliases import ms
|
7
7
|
|
@@ -13,10 +13,14 @@ config = AutoConfig(search_path=Path.cwd())
|
|
13
13
|
class _BitvavoApiUpgraded:
|
14
14
|
# default LOG_LEVEL is WARNING, so users don't get their ass spammed.
|
15
15
|
LOG_LEVEL: str = config(
|
16
|
-
"BITVAVO_API_UPGRADED_LOG_LEVEL",
|
16
|
+
"BITVAVO_API_UPGRADED_LOG_LEVEL",
|
17
|
+
default="INFO",
|
18
|
+
cast=Choices(list(logging._nameToLevel.keys())), # noqa: SLF001
|
17
19
|
)
|
18
20
|
LOG_EXTERNAL_LEVEL: str = config(
|
19
|
-
"BITVAVO_API_UPGRADED_EXTERNAL_LOG_LEVEL",
|
21
|
+
"BITVAVO_API_UPGRADED_EXTERNAL_LOG_LEVEL",
|
22
|
+
default="WARNING",
|
23
|
+
cast=Choices(list(logging._nameToLevel.keys())), # noqa: SLF001
|
20
24
|
)
|
21
25
|
LAG: ms = config("BITVAVO_API_UPGRADED_LAG", default=ms(50), cast=ms)
|
22
26
|
RATE_LIMITING_BUFFER: int = config("BITVAVO_API_UPGRADED_RATE_LIMITING_BUFFER", default=25, cast=int)
|
@@ -2,16 +2,19 @@
|
|
2
2
|
This file contains all type aliases that I use within the lib,
|
3
3
|
to clearify the intention or semantics/meaning/unit of a variable
|
4
4
|
"""
|
5
|
-
|
5
|
+
|
6
|
+
from typing import Any, Union
|
6
7
|
|
7
8
|
# type simplification
|
8
|
-
anydict =
|
9
|
-
strdict =
|
10
|
-
intdict =
|
11
|
-
|
9
|
+
anydict = dict[str, Any]
|
10
|
+
strdict = dict[str, str]
|
11
|
+
intdict = dict[str, int]
|
12
|
+
# can't use | here, with __future__. Not sure why.
|
13
|
+
strintdict = dict[str, Union[str, int]]
|
14
|
+
errordict = dict[str, Any] # same type as anydict, but the semantics/meaning is different
|
12
15
|
|
13
|
-
# note: You can also use these for type conversion, so instead of int(some_float / 1000), you can just do ms(some_float
|
14
|
-
# units
|
16
|
+
# note: You can also use these for type conversion, so instead of int(some_float / 1000), you can just do ms(some_float
|
17
|
+
# / 1000) units
|
15
18
|
s = int # seconds
|
16
19
|
ms = int # milliseconds
|
17
20
|
us = int # microseconds, normally written as μs, but nobody has the μ (mu) symbol on their keyboard, so `us` it is.
|
@@ -0,0 +1,319 @@
|
|
1
|
+
Metadata-Version: 2.3
|
2
|
+
Name: bitvavo-api-upgraded
|
3
|
+
Version: 1.17.0
|
4
|
+
Summary: A unit-tested fork of the Bitvavo API
|
5
|
+
Project-URL: homepage, https://github.com/Thaumatorium/bitvavo-api-upgraded
|
6
|
+
Project-URL: repository, https://github.com/Thaumatorium/bitvavo-api-upgraded
|
7
|
+
Project-URL: changelog, https://github.com/Thaumatorium/bitvavo-api-upgraded/blob/master/CHANGELOG.md
|
8
|
+
Author: Bitvavo BV (original code)
|
9
|
+
Author-email: NostraDavid <55331731+NostraDavid@users.noreply.github.com>
|
10
|
+
Maintainer-email: NostraDavid <55331731+NostraDavid@users.noreply.github.com>
|
11
|
+
License: ISC License
|
12
|
+
Classifier: Development Status :: 5 - Production/Stable
|
13
|
+
Classifier: Environment :: Console
|
14
|
+
Classifier: Framework :: Pytest
|
15
|
+
Classifier: Framework :: tox
|
16
|
+
Classifier: Intended Audience :: Developers
|
17
|
+
Classifier: Intended Audience :: Financial and Insurance Industry
|
18
|
+
Classifier: License :: OSI Approved :: ISC License (ISCL)
|
19
|
+
Classifier: Operating System :: MacOS :: MacOS X
|
20
|
+
Classifier: Operating System :: Microsoft :: Windows
|
21
|
+
Classifier: Operating System :: POSIX
|
22
|
+
Classifier: Programming Language :: Python
|
23
|
+
Classifier: Programming Language :: Python :: 3.9
|
24
|
+
Classifier: Programming Language :: Python :: 3.10
|
25
|
+
Classifier: Programming Language :: Python :: 3.11
|
26
|
+
Classifier: Programming Language :: Python :: 3.12
|
27
|
+
Classifier: Programming Language :: Python :: 3.13
|
28
|
+
Classifier: Typing :: Typed
|
29
|
+
Requires-Python: >=3.9
|
30
|
+
Requires-Dist: python-decouple==3.*,>=3.5
|
31
|
+
Requires-Dist: requests==2.*,>=2.26
|
32
|
+
Requires-Dist: structlog==24.*,>=21.5
|
33
|
+
Requires-Dist: websocket-client==1.*,>=1.2
|
34
|
+
Description-Content-Type: text/markdown
|
35
|
+
|
36
|
+
# Bitvavo API (upgraded)
|
37
|
+
|
38
|
+
## Userguide
|
39
|
+
|
40
|
+
`pip install bitvavo_api_upgraded`
|
41
|
+
|
42
|
+
Works the same as the official API lib, but I have:
|
43
|
+
|
44
|
+
- typing for _all_ functions and classes
|
45
|
+
- unit tests (I already found three bugs that I fixed, because the original code
|
46
|
+
wasn't tested, at all)
|
47
|
+
- a changelog, so you can track of the changes that I make
|
48
|
+
- compatible with Python 3.7 and newer ([3.6 isn't supported as of
|
49
|
+
2021-12-23](https://endoflife.date/python))
|
50
|
+
|
51
|
+
## Devguide
|
52
|
+
|
53
|
+
```shell
|
54
|
+
echo "install development requirements"
|
55
|
+
uv sync
|
56
|
+
echo "run tox, a program that creates separate environments for different python versions, for testing purposes (among other things)"
|
57
|
+
uv run tox
|
58
|
+
```
|
59
|
+
|
60
|
+
### Semantic Versioning (SemVer)
|
61
|
+
|
62
|
+
I'm using semantic versioning, which means that changes mean this:
|
63
|
+
|
64
|
+
1. MAJOR version when you make incompatible API changes,
|
65
|
+
1. MINOR version when you add functionality in a backwards compatible manner,
|
66
|
+
and
|
67
|
+
1. PATCH version when you make backwards compatible bug fixes.
|
68
|
+
|
69
|
+
### Versioning
|
70
|
+
|
71
|
+
Copy the following block to CHANGELOG.md and add all information since last
|
72
|
+
version bump
|
73
|
+
|
74
|
+
```markdown
|
75
|
+
## $UNRELEASED
|
76
|
+
|
77
|
+
### Added
|
78
|
+
|
79
|
+
...
|
80
|
+
|
81
|
+
### Changed
|
82
|
+
|
83
|
+
...
|
84
|
+
|
85
|
+
### Removed
|
86
|
+
|
87
|
+
...
|
88
|
+
```
|
89
|
+
|
90
|
+
Commit those changes.
|
91
|
+
|
92
|
+
After that, run `bump-my-version bump (major|minor|patch)` to automatically
|
93
|
+
replace `$UNRELEASED` with the new version number, and also automatically tag
|
94
|
+
and commit (with tag) to release a new version via the Github workflow.
|
95
|
+
|
96
|
+
## py.typed
|
97
|
+
|
98
|
+
Perhaps a curious file, but it simply exists to let `mypy` know that the code is
|
99
|
+
typed: [Don't forget `py.typed` for your typed Python package
|
100
|
+
](https://blog.whtsky.me/tech/2021/dont-forget-py.typed-for-your-typed-python-package/)
|
101
|
+
|
102
|
+
## Last note
|
103
|
+
|
104
|
+
_below this line is the old README.md_
|
105
|
+
|
106
|
+
---
|
107
|
+
|
108
|
+
# Bitvavo SDK for Python
|
109
|
+
|
110
|
+
Crypto starts with Bitvavo. You use Bitvavo SDK for Python to buy, sell, and
|
111
|
+
store over 200 digital assets on Bitvavo from inside your app.
|
112
|
+
|
113
|
+
To trade and execute your advanced trading strategies, Bitvavo SDK for Python is
|
114
|
+
a wrapper that enables you to easily call every endpoint in [Bitvavo
|
115
|
+
API](https://docs.bitvavo.com/).
|
116
|
+
|
117
|
+
- [Prerequisites](#prerequisites) - what you need to start developing with
|
118
|
+
Bitvavo SDK for Python
|
119
|
+
- [Get started](#get-started) - rapidly create an app and start trading with
|
120
|
+
Bitvavo
|
121
|
+
- [About the SDK](#about-the-sdk) - general information about Bitvavo SDK for
|
122
|
+
Python
|
123
|
+
- [API reference](https://docs.bitvavo.com/) - information on the specifics of
|
124
|
+
every parameter
|
125
|
+
|
126
|
+
This page shows you how to use Bitvavo SDK for Python with WebSockets. For REST,
|
127
|
+
see the [REST readme](docs/rest.md).
|
128
|
+
|
129
|
+
## Prerequisites
|
130
|
+
|
131
|
+
To start programming with Bitvavo SDK for Python you need:
|
132
|
+
|
133
|
+
- [Python3](https://www.python.org/downloads/) installed on your development
|
134
|
+
environment
|
135
|
+
|
136
|
+
If you are working on macOS, ensure that you have installed SSH certificates:
|
137
|
+
|
138
|
+
```terminal
|
139
|
+
open /Applications/Python\ 3.12/Install\ Certificates.command
|
140
|
+
open /Applications/Python\ 3.12/Update\ Shell\ Profile.command
|
141
|
+
```
|
142
|
+
|
143
|
+
- A Python app. Use your favorite IDE, or run from the command line
|
144
|
+
- An [API key and
|
145
|
+
secret](https://support.bitvavo.com/hc/en-us/articles/4405059841809)
|
146
|
+
associated with your Bitvavo account
|
147
|
+
|
148
|
+
You control the actions your app can do using the rights you assign to the API
|
149
|
+
key. Possible rights are:
|
150
|
+
|
151
|
+
- **View**: retrieve information about your balance, account, deposit and
|
152
|
+
withdrawals
|
153
|
+
- **Trade**: place, update, view and cancel orders
|
154
|
+
- **Withdraw**: withdraw funds
|
155
|
+
|
156
|
+
Best practice is to not grant this privilege, withdrawals using the API do
|
157
|
+
not require 2FA and e-mail confirmation.
|
158
|
+
|
159
|
+
## Get started
|
160
|
+
|
161
|
+
Want to quickly make a trading app? Here you go:
|
162
|
+
|
163
|
+
1. **Install Bitvavo SDK for Python**
|
164
|
+
|
165
|
+
In your Python app, add [Bitvavo SDK for
|
166
|
+
Python](https://github.com/bitvavo/python-bitvavo-api) from
|
167
|
+
[pypi.org](https://pypi.org/project/python-bitvavo-api/):
|
168
|
+
|
169
|
+
```shell
|
170
|
+
python -m pip install python_bitvavo_api
|
171
|
+
```
|
172
|
+
|
173
|
+
If you installed from `test.pypi.com`, update the requests library: `pip
|
174
|
+
install --upgrade requests`.
|
175
|
+
|
176
|
+
1. **Create a simple Bitvavo implementation**
|
177
|
+
|
178
|
+
Add the following code to a new file in your app:
|
179
|
+
|
180
|
+
```python
|
181
|
+
from python_bitvavo_api.bitvavo import Bitvavo
|
182
|
+
import json
|
183
|
+
import time
|
184
|
+
|
185
|
+
# Use this class to connect to Bitvavo and make your first calls.
|
186
|
+
# Add trading strategies to implement your business logic.
|
187
|
+
class BitvavoImplementation:
|
188
|
+
api_key = "<Replace with your your API key from Bitvavo Dashboard>"
|
189
|
+
api_secret = "<Replace with your API secret from Bitvavo Dashboard>"
|
190
|
+
bitvavo_engine = None
|
191
|
+
bitvavo_socket = None
|
192
|
+
|
193
|
+
# Connect securely to Bitvavo, create the WebSocket and error callbacks.
|
194
|
+
def __init__(self):
|
195
|
+
self.bitvavo_engine = Bitvavo({
|
196
|
+
'APIKEY': self.api_key,
|
197
|
+
'APISECRET': self.api_secret
|
198
|
+
})
|
199
|
+
self.bitvavo_socket = self.bitvavo_engine.newWebsocket()
|
200
|
+
self.bitvavo_socket.setErrorCallback(self.error_callback)
|
201
|
+
|
202
|
+
# Handle errors.
|
203
|
+
def error_callback(self, error):
|
204
|
+
print("Add your error message.")
|
205
|
+
#print("Errors:", json.dumps(error, indent=2))
|
206
|
+
|
207
|
+
# Retrieve the data you need from Bitvavo in order to implement your
|
208
|
+
# trading logic. Use multiple workflows to return data to your
|
209
|
+
# callbacks.
|
210
|
+
def a_trading_strategy(self):
|
211
|
+
self.bitvavo_socket.ticker24h({}, self.a_trading_strategy_callback)
|
212
|
+
|
213
|
+
# In your app you analyse data returned by the trading strategy, then make
|
214
|
+
# calls to Bitvavo to respond to market conditions.
|
215
|
+
def a_trading_strategy_callback(self, response):
|
216
|
+
# Iterate through the markets
|
217
|
+
for market in response:
|
218
|
+
|
219
|
+
match market["market"]:
|
220
|
+
case "ZRX-EUR":
|
221
|
+
print("Eureka, the latest bid for ZRX-EUR is: ", market["bid"] )
|
222
|
+
# Implement calculations for your trading logic.
|
223
|
+
# If they are positive, place an order: For example:
|
224
|
+
# self.bitvavo_socket.placeOrder("ZRX-EUR",
|
225
|
+
# 'buy',
|
226
|
+
# 'limit',
|
227
|
+
# { 'amount': '1', 'price': '00001' },
|
228
|
+
# self.order_placed_callback)
|
229
|
+
case "a different market":
|
230
|
+
print("do something else")
|
231
|
+
case _:
|
232
|
+
print("Not this one: ", market["market"])
|
233
|
+
|
234
|
+
|
235
|
+
|
236
|
+
def order_placed_callback(self, response):
|
237
|
+
# The order return parameters explain the quote and the fees for this trade.
|
238
|
+
print("Order placed:", json.dumps(response, indent=2))
|
239
|
+
# Add your business logic.
|
240
|
+
|
241
|
+
|
242
|
+
# Sockets are fast, but asynchronous. Keep the socket open while you are
|
243
|
+
# trading.
|
244
|
+
def wait_and_close(self):
|
245
|
+
# Bitvavo uses a weight based rate limiting system. Your app is limited to 1000 weight points per IP or
|
246
|
+
# API key per minute. The rate weighting for each endpoint is supplied in Bitvavo API documentation.
|
247
|
+
# This call returns the amount of points left. If you make more requests than permitted by the weight limit,
|
248
|
+
# your IP or API key is banned.
|
249
|
+
limit = self.bitvavo_engine.getRemainingLimit()
|
250
|
+
try:
|
251
|
+
while (limit > 0):
|
252
|
+
time.sleep(0.5)
|
253
|
+
limit = self.bitvavo_engine.getRemainingLimit()
|
254
|
+
except KeyboardInterrupt:
|
255
|
+
self.bitvavo_socket.closeSocket()
|
256
|
+
|
257
|
+
|
258
|
+
# Shall I re-explain main? Naaaaaaaaaa.
|
259
|
+
if __name__ == '__main__':
|
260
|
+
bvavo = BitvavoImplementation()
|
261
|
+
bvavo.a_trading_strategy()
|
262
|
+
bvavo.wait_and_close()
|
263
|
+
```
|
264
|
+
|
265
|
+
1. **Add security information**
|
266
|
+
|
267
|
+
You must supply your security information to trade on Bitvavo and see your
|
268
|
+
account information using the authenticate methods. Replace the values of
|
269
|
+
`api_key` and `api_secret` with your credentials from [Bitvavo
|
270
|
+
Dashboard](https://account.bitvavo.com/user/api).
|
271
|
+
|
272
|
+
You can retrieve public information such as available markets, assets and
|
273
|
+
current market without supplying your key and secret. However,
|
274
|
+
unauthenticated calls have lower rate limits based on your IP address, and
|
275
|
+
your account is blocked for longer if you exceed your limit.
|
276
|
+
|
277
|
+
1. **Run your app**
|
278
|
+
|
279
|
+
- Command line warriors: `python3 <filename>`.
|
280
|
+
- IDE heroes: press the big green button.
|
281
|
+
|
282
|
+
Your app connects to Bitvavo and returns a list the latest trade price for each
|
283
|
+
market. You use this data to implement your trading logic.
|
284
|
+
|
285
|
+
## About the SDK
|
286
|
+
|
287
|
+
This section explains global concepts about Bitvavo SDK for Python.
|
288
|
+
|
289
|
+
### Rate limit
|
290
|
+
|
291
|
+
Bitvavo uses a weight based rate limiting system. Your app is limited to 1000
|
292
|
+
weight points per IP or API key per minute. When you make a call to Bitvavo API,
|
293
|
+
your remaining weight points are returned in the header of each REST request.
|
294
|
+
|
295
|
+
Websocket methods do not return your returning weight points, you track your
|
296
|
+
remaining weight points with a call to:
|
297
|
+
|
298
|
+
```python
|
299
|
+
limit = bitvavo.getRemainingLimit()
|
300
|
+
```
|
301
|
+
|
302
|
+
If you make more requests than permitted by the weight limit, your IP or API key
|
303
|
+
is banned.
|
304
|
+
|
305
|
+
The rate weighting for each endpoint is supplied in the [Bitvavo API
|
306
|
+
documentation](https://docs.bitvavo.com/).
|
307
|
+
|
308
|
+
### Requests
|
309
|
+
|
310
|
+
For all methods, required parameters are passed as separate values, optional
|
311
|
+
parameters are passed as a dictionary. Return parameters are in dictionary
|
312
|
+
format: `response['<key>'] = '<value>'`. However, as a limit order requires more
|
313
|
+
information than a market order, some optional parameters are required when you
|
314
|
+
place an order.
|
315
|
+
|
316
|
+
### Security
|
317
|
+
|
318
|
+
You must set your API key and secret for authenticated endpoints, public
|
319
|
+
endpoints do not require authentication.
|
@@ -0,0 +1,10 @@
|
|
1
|
+
bitvavo_api_upgraded/__init__.py,sha256=IS9Ci2orRtYKHyFNXq_9qk9bB6zt4KU4tPbQAxkkCUM,72
|
2
|
+
bitvavo_api_upgraded/bitvavo.py,sha256=-AgVq4hXHEsuQhCLEweyjJ_DhAPwbwtCeCPSNeweisA,125942
|
3
|
+
bitvavo_api_upgraded/helper_funcs.py,sha256=4oBdQ1xB-C2XkQTmN-refzIzWfO-IUowDSWhOSFdCRU,3212
|
4
|
+
bitvavo_api_upgraded/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
5
|
+
bitvavo_api_upgraded/settings.py,sha256=MalcO2buJso4NZktDRGGSZ7poF593ceb66zrmX-8dc4,1903
|
6
|
+
bitvavo_api_upgraded/type_aliases.py,sha256=NAnMSk5n6SaEIvHFeSMKnXOxfOwnbFuEnRKaAXlcmYw,932
|
7
|
+
bitvavo_api_upgraded-1.17.0.dist-info/METADATA,sha256=Csu9ntgiu7tVaEvKXJmBjrFEMAxlVfHhIHRlvYwflIo,11519
|
8
|
+
bitvavo_api_upgraded-1.17.0.dist-info/WHEEL,sha256=C2FUgwZgiLbznR-k0b_5k3Ai_1aASOXDss3lzCUsUug,87
|
9
|
+
bitvavo_api_upgraded-1.17.0.dist-info/licenses/LICENSE.txt,sha256=hiFyor_njVlzVblnb-78mzx1Um3CGvuFxEH3YR735rc,744
|
10
|
+
bitvavo_api_upgraded-1.17.0.dist-info/RECORD,,
|
{bitvavo_api_upgraded-1.15.8.dist-info → bitvavo_api_upgraded-1.17.0.dist-info/licenses}/LICENSE.txt
RENAMED
@@ -1,6 +1,6 @@
|
|
1
1
|
ISC License
|
2
2
|
|
3
|
-
Copyright (c)
|
3
|
+
Copyright (c) 2024, Bitvavo B.V.
|
4
4
|
|
5
5
|
Permission to use, copy, modify, and/or distribute this software for any
|
6
6
|
purpose with or without fee is hereby granted, provided that the above
|
@@ -12,4 +12,4 @@ MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
|
|
12
12
|
ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
|
13
13
|
WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
|
14
14
|
ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
|
15
|
-
OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
15
|
+
OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
@@ -1,77 +0,0 @@
|
|
1
|
-
Metadata-Version: 2.1
|
2
|
-
Name: bitvavo-api-upgraded
|
3
|
-
Version: 1.15.8
|
4
|
-
Summary: A unit-tested fork of the Bitvavo API
|
5
|
-
Home-page: https://github.com/Thaumatorium/python-bitvavo-api
|
6
|
-
Author: Bitvavo BV (original code) and NostraDavid (rebuild)
|
7
|
-
License: ISC License
|
8
|
-
Platform: UNKNOWN
|
9
|
-
Classifier: Development Status :: 5 - Production/Stable
|
10
|
-
Classifier: Environment :: Console
|
11
|
-
Classifier: Framework :: Pytest
|
12
|
-
Classifier: Framework :: tox
|
13
|
-
Classifier: Intended Audience :: Developers
|
14
|
-
Classifier: Intended Audience :: Financial and Insurance Industry
|
15
|
-
Classifier: License :: OSI Approved :: ISC License (ISCL)
|
16
|
-
Classifier: Operating System :: MacOS :: MacOS X
|
17
|
-
Classifier: Operating System :: Microsoft :: Windows
|
18
|
-
Classifier: Operating System :: POSIX
|
19
|
-
Classifier: Programming Language :: Python :: 3.10
|
20
|
-
Classifier: Programming Language :: Python :: 3.7
|
21
|
-
Classifier: Programming Language :: Python :: 3.8
|
22
|
-
Classifier: Programming Language :: Python :: 3.9
|
23
|
-
Classifier: Programming Language :: Python
|
24
|
-
Classifier: Typing :: Typed
|
25
|
-
Requires-Python: >=3.7
|
26
|
-
Description-Content-Type: text/markdown
|
27
|
-
License-File: LICENSE.txt
|
28
|
-
Requires-Dist: python-decouple (==3.*,>=3.5)
|
29
|
-
Requires-Dist: python-semantic-release (==7.*,>=7.23)
|
30
|
-
Requires-Dist: requests (==2.*,>=2.26)
|
31
|
-
Requires-Dist: rich (==11.*,>=11.0)
|
32
|
-
Requires-Dist: structlog (==21.*,>=21.5)
|
33
|
-
Requires-Dist: websocket-client (==1.*,>=1.2)
|
34
|
-
|
35
|
-
# Bitvavo API (upgraded)
|
36
|
-
|
37
|
-
Hi, this is *not* the official API, but this one has:
|
38
|
-
|
39
|
-
- build-in documentation
|
40
|
-
- typing for *all* functions and classes
|
41
|
-
- unit tests (I already found ~~three~~ ~~four~~ ~~five~~ six bugs that I fixed, because the original code wasn't tested, at all)
|
42
|
-
- a changelog, so you can track of the changes that I make
|
43
|
-
- compatible with Python 3.7 and newer ([3.6 isn't supported as of 2021-12-23](https://endoflife.date/python))
|
44
|
-
- a working version of `getRemainingLimit()`
|
45
|
-
- will actually wait until the ban has been lifted (in case you get banned)
|
46
|
-
- more stable api-calls, due to calculating lag between client and server
|
47
|
-
- fancy logging via `structlog`, including external loggers like from the urllib3 and websocket libs!
|
48
|
-
- a working `ACCESSWINDOW` variable that actually times the api calls out - makes failing Bitvavo API calls fail faster!
|
49
|
-
|
50
|
-
Version `1.*` is guaranteed compatible\* with the original API.
|
51
|
-
|
52
|
-
\*: Except for `Bitvavo.candles`. I had to renamed the `symbol` argument to `market`, because the `candles` call actually excpects a `market`. So that's more of a bugfix.
|
53
|
-
|
54
|
-
\*\*: Same goes for `Bitvavo.book`; it had the same problem as `candles`.
|
55
|
-
|
56
|
-
\*\*\*: And I removed the `rateLimitThread` class, but that should've been used internally only anyway
|
57
|
-
|
58
|
-
## Customizable settings
|
59
|
-
|
60
|
-
Through the magic of the python-decouple lib, when you use this lib, you can create a `settings.ini` (Windows [example](https://pypi.org/project/python-decouple/#ini-file)) or a `.env` (Linux [example](https://pypi.org/project/python-decouple/#env-file)) and add some handy settings there.
|
61
|
-
|
62
|
-
Here is an example list of the settings for this lib:
|
63
|
-
|
64
|
-
```ini
|
65
|
-
BITVAVO_API_UPGRADED_LOG_LEVEL=INFO # Set the lib's log level
|
66
|
-
BITVAVO_API_UPGRADED_LOG_EXTERNAL_LEVEL=WARNING # Set the libs that are used by *this* lib's log level
|
67
|
-
BITVAVO_API_UPGRADED_LAG=50 # the time difference between the server and your local time (you'll have to calculate this yourself - tip: use the bitvavo.time() functionality in a separate script)
|
68
|
-
BITVAVO_API_UPGRADED_RATE_LIMITING_BUFFER=25 # default 25, set to 50 if you get "you have been banned" messages (or even higher, if needed)
|
69
|
-
```
|
70
|
-
|
71
|
-
## Links
|
72
|
-
|
73
|
-
- [Official API Documentation](https://docs.bitvavo.com/)
|
74
|
-
- [Official Trading Rules](https://bitvavo.com/en/trading-rules) (recommended read, as it explains a lot of jargon; It's OK to not understand this document if you're just starting out - I don't fully understand the document either)
|
75
|
-
- [Github for this lib](https://github.com/Thaumatorium/bitvavo-api-upgraded)
|
76
|
-
|
77
|
-
|
@@ -1,10 +0,0 @@
|
|
1
|
-
bitvavo_api_upgraded/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
2
|
-
bitvavo_api_upgraded/bitvavo.py,sha256=Q0oOkKPX8lNHZ_3S8TZ9dEOnsXBmOuZRVxz6ZC3dDko,122717
|
3
|
-
bitvavo_api_upgraded/helper_funcs.py,sha256=owtZ11s2IYKEmWnGrQgbvlR8H0QuKNQeRTrqBKpBL2w,3011
|
4
|
-
bitvavo_api_upgraded/settings.py,sha256=cql1NmPbU3V1omEj4zzvcG-YKCFa1u3CsHt7PfgDOJ4,1837
|
5
|
-
bitvavo_api_upgraded/type_aliases.py,sha256=hcs-SotnvBewRpnV644fpbtq3sLKK5jeWPdylv3y_DA,839
|
6
|
-
bitvavo_api_upgraded-1.15.8.dist-info/LICENSE.txt,sha256=FeSYm9RMOo-dfmbSYloapBdRwG_edqJHc1dApkjkfGk,738
|
7
|
-
bitvavo_api_upgraded-1.15.8.dist-info/METADATA,sha256=8aMm4Mb32YlrbjqSHFWu9--817cYVBueB1DRH9dzL9A,3907
|
8
|
-
bitvavo_api_upgraded-1.15.8.dist-info/WHEEL,sha256=G16H4A3IeoQmnOrYV4ueZGKSjhipXx8zc8nu9FGlvMA,92
|
9
|
-
bitvavo_api_upgraded-1.15.8.dist-info/top_level.txt,sha256=jc0cBaIC_2T7T38vNd5yn5qHwi-m8rPf3FdYTvq3eSk,21
|
10
|
-
bitvavo_api_upgraded-1.15.8.dist-info/RECORD,,
|
@@ -1 +0,0 @@
|
|
1
|
-
bitvavo_api_upgraded
|