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.
@@ -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
- else:
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
@@ -1,7 +1,7 @@
1
1
  import logging
2
-
3
2
  from pathlib import Path
4
- from decouple import Choices, AutoConfig
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", default="INFO", cast=Choices(list(logging._nameToLevel.keys()))
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", default="WARNING", cast=Choices(list(logging._nameToLevel.keys()))
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
- from typing import Any, Dict
5
+
6
+ from typing import Any, Union
6
7
 
7
8
  # type simplification
8
- anydict = Dict[str, Any]
9
- strdict = Dict[str, str]
10
- intdict = Dict[str, int]
11
- errordict = Dict[str, Any] # same type as anydict, but the semantics/meaning is different
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 / 1000)
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,,
@@ -1,5 +1,4 @@
1
1
  Wheel-Version: 1.0
2
- Generator: bdist_wheel (0.37.1)
2
+ Generator: hatchling 1.26.3
3
3
  Root-Is-Purelib: true
4
4
  Tag: py3-none-any
5
-
@@ -1,6 +1,6 @@
1
1
  ISC License
2
2
 
3
- Copyright (c) 2018, Bitvavo
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