%global _empty_manifest_terminate_build 0 Name: python-coinmetrics-api-client Version: 2023.5.2.20 Release: 1 Summary: Python client for Coin Metrics API v4. License: MIT URL: https://coinmetrics.github.io/api-client-python/site/index.html Source0: https://mirrors.nju.edu.cn/pypi/web/packages/41/0c/2136c231b13d6fc2a9db0c37a6754a669f2b002072980af8b3694ba1cc14/coinmetrics_api_client-2023.5.2.20.tar.gz BuildArch: noarch Requires: python3-orjson Requires: python3-requests Requires: python3-pandas Requires: python3-websocket-client Requires: python3-dateutil Requires: python3-typer %description 0 asset 1 non-null object 1 time 1 non-null datetime64[ns] 2 ReferenceRateUSD 1 non-null float64 dtypes: datetime64[ns](1), float64(1), object(1) memory usage: 152.0+ bytes ``` Note that in order to pass a custom datetime object, setting a dtype_mapper is mandatory. Pandas type conversion tends to be more performant. But if there are custom operations that must be done using numpy datatypes, this option will let you perform them. ### Exporting to csv and json files: You can also easily export timeseries data to csv and json files with builtin functions on the `DataCollection` type. For example this script will export Coinbase btc and eth trades for a date to csv and json files respectively: ```python start_date = datetime.date(year=2022, month=1, day=1) end_date = datetime.datetime(year=2022, month=1, day=1) market_trades_btc = client.get_market_trades(page_size=1000, markets="coinbase-btc-usd-spot", start_time=start_date, end_time=end_date) market_trades_btc.export_to_csv("jan_1_2022_coinbase_btc_trades.csv") market_trades_eth = client.get_market_trades(page_size=1000, markets="coinbase-eth-usd-spot", start_time=start_date, end_time=end_date) market_trades_eth.export_to_json("jan_1_2022_coinbase_eth.json") ``` ### Paging You can make the datapoints to iterate from start (default) or from end. for that you should use a paging_from argument like the following: ``` from coinmetrics.api_client import CoinMetricsClient from coinmetrics.constants import PagingFrom client = CoinMetricsClient() for metric_data in client.get_asset_metrics(assets='btc', metrics=['ReferenceRateUSD'], paging_from=PagingFrom.START): print(metric_data) ``` PagingFrom.END: is available but by default it will page from the start. ### Debugging the API Client There are two additional options for the API Client - `debug_mode` and `verbose`. These two options log network calls to the console, and in the case of `debug_mode` it will generate a log file of all the network requests and the time it takes to call them. These tools can be used to diagnose issues in your code and also to get a better understanding of request times so that users can write more performant code. For example, running the below code: ```python import os from coinmetrics.api_client import CoinMetricsClient api_key = os.environ['CM_API_KEY'] if __name__ == '__main__': client = CoinMetricsClient(api_key=api_key, debug_mode=True) reference_rates_example = client.get_asset_metrics(assets=['btc', 'algo', 'eth'], metrics=['ReferenceRateUSD']) for data in reference_rates_example: continue ``` The console output will look like: ```commandline [DEBUG] 2023-01-09 11:01:02,044 - Starting API Client debugging session. logging to stdout and cm_api_client_debug_2023_01_09_11_01_02.txt [DEBUG] 2023-01-09 11:01:02,044 - Using coinmetrics version 2022.11.14.16 [DEBUG] 2023-01-09 11:01:02,044 - Current state of API Client, excluding API KEY: {'_verify_ssl_certs': True, '_api_base_url': 'https://api.coinmetrics.io/v4', '_ws_api_base_url': 'wss://api.coinmetrics.io/v4', '_http_header': {'Api-Client-Version': '2022.11.14.16'}, '_proxies': {'http': None, 'https': None}, 'debug_mode': True, 'verbose': False} [DEBUG] 2023-01-09 11:01:02,044 - Attempting to call url: timeseries/asset-metrics with params: {'assets': ['btc', 'algo', 'eth'], 'metrics': ['ReferenceRateUSD'], 'frequency': None, 'page_size': None, 'paging_from': 'start', 'start_time': None, 'end_time': None, 'start_height': None, 'end_height': None, 'start_inclusive': None, 'end_inclusive': None, 'timezone': None, 'sort': None, 'limit_per_asset': None} [DEBUG] 2023-01-09 11:01:02,387 - Response status code: 200 for url: https://api.coinmetrics.io/v4/timeseries/asset-metrics?api_key=[REDACTED]&assets=btc%2Calgo%2Ceth&metrics=ReferenceRateUSD&paging_from=start took: 0:00:00.342874 response body size (bytes): 9832 [DEBUG] 2023-01-09 11:01:02,388 - Attempting to call url: timeseries/asset-metrics with params: {'assets': ['btc', 'algo', 'eth'], 'metrics': ['ReferenceRateUSD'], 'frequency': None, 'page_size': None, 'paging_from': 'start', 'start_time': None, 'end_time': None, 'start_height': None, 'end_height': None, 'start_inclusive': None, 'end_inclusive': None, 'timezone': None, 'sort': None, 'limit_per_asset': None, 'next_page_token': '0.MjAxOS0wOS0zMFQwMDowMDowMFo'} [DEBUG] 2023-01-09 11:01:02,559 - Response status code: 200 for url: https://api.coinmetrics.io/v4/timeseries/asset-metrics?api_key=[REDACTED]&assets=btc%2Calgo%2Ceth&metrics=ReferenceRateUSD&paging_from=start&next_page_token=0.MjAxOS0wOS0zMFQwMDowMDowMFo took: 0:00:00.171487 response body size (bytes): 9857 ``` Then it can be easier to understand what network calls the API Client is making, and where any issues may exist. If you wish to dig even deeper, you may consider modifying the `_send_request()` method of the API Client to log additional data about the state of your environment, or anything else that would help diagnose issues. You will notice a log file generated in the format `cm_api_client_debug_2023_01_09_11_01_02.txt`. This log file might be helpful for your own use or to give more context if you are working with Coin Metrics customer success. ### SSL Certs verification Sometimes your organization network have special rules on SSL certs verification and in this case you might face the following error when running the script: ```text SSLError: HTTPSConnectionPool(host='api.coinmetrics.io', port=443): Max retries exceeded with url: (Caused by SSLError(SSLCertVerificationError(1, '[SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: self signed certificate in certificate chain (_ssl.c:1123)'))) ``` In this case, you can pass an option during client initialization to disable ssl verification for requests like this: ```python client = CoinMetricsClient(verify_ssl_certs=False) ``` We don't recommend setting it to False by default and you should make sure you understand the security risks of disabling SSL certs verification. Additionally, you may choose to specify the path to the SSL certificates on your machine. This may cause errors where Python is unable to locate the certificates on your machine, particularly when using Python virtual environments. ```python from coinmetrics.api_client import CoinMetricsClient SSL_CERT_LOCATION = '/Users//Library/Python/3.8/lib/python/site-packages/certifi/cacert.pem' client = CoinMetricsClient(verify_ssl_certs=SSL_CERT_LOCATION) ``` A quick way to find the certs on your machine is: `python3 -c "import requests; print(requests.certs.where())"` And note that this will change based on whether or not you are using a [Python virtual environment or not](https://realpython.com/python-virtual-environments-a-primer/) ### Installing and running coinmetrics package and other python packages behind a secure python network Related to SSL Certs verification, you may have trouble installing and updating PyPi packages to your local environment. So you may need to choose the best solution for your company and environment - either using package managers or installing offline. #### Installing using package managers Full instructions for setting up your environment to use conda, pip, yarn, npm, etc. can be [found here](https://medium.com/@iffi33/dealing-with-ssl-authentication-on-a-secure-corporate-network-pip-conda-git-npm-yarn-bower-73e5b93fd4b2). Additionally, a workaround to disable SSL verification when installing a trusted Python package is this: ```commandline pip install --trusted-host pypi.python.org ``` Although it is important to make sure you understand the risks associated with disabling SSL verification and ensure compliance with company policies. #### Installing Python packages locally/ offline It may be easier to download and install the package locally. Steps: 1. Download the files for the [Coin Metrics API Client from PyPi](https://pypi.org/project/coinmetrics-api-client/#files) 2. [Install it locally](https://packaging.python.org/en/latest/tutorials/installing-packages/#installing-from-local-archives) ### Requests Proxy Sometimes your organization has special rules on making requests to third parties and you have to use proxies in order to comply with the rules. For proxies that don't require auth you can specify them similar to this example: ```python client = CoinMetricsClient(proxy_url=f'http://:') ``` For proxies that require auth, you should be able to specify username and password similar to this example: ```python client = CoinMetricsClient(proxy_url=f'http://:@:') ``` ## Extended documentation For more information about the available methods in the client please reference [API Client Spec](https://coinmetrics.github.io/api-client-python/site/api_client.html) %package -n python3-coinmetrics-api-client Summary: Python client for Coin Metrics API v4. Provides: python-coinmetrics-api-client BuildRequires: python3-devel BuildRequires: python3-setuptools BuildRequires: python3-pip %description -n python3-coinmetrics-api-client 0 asset 1 non-null object 1 time 1 non-null datetime64[ns] 2 ReferenceRateUSD 1 non-null float64 dtypes: datetime64[ns](1), float64(1), object(1) memory usage: 152.0+ bytes ``` Note that in order to pass a custom datetime object, setting a dtype_mapper is mandatory. Pandas type conversion tends to be more performant. But if there are custom operations that must be done using numpy datatypes, this option will let you perform them. ### Exporting to csv and json files: You can also easily export timeseries data to csv and json files with builtin functions on the `DataCollection` type. For example this script will export Coinbase btc and eth trades for a date to csv and json files respectively: ```python start_date = datetime.date(year=2022, month=1, day=1) end_date = datetime.datetime(year=2022, month=1, day=1) market_trades_btc = client.get_market_trades(page_size=1000, markets="coinbase-btc-usd-spot", start_time=start_date, end_time=end_date) market_trades_btc.export_to_csv("jan_1_2022_coinbase_btc_trades.csv") market_trades_eth = client.get_market_trades(page_size=1000, markets="coinbase-eth-usd-spot", start_time=start_date, end_time=end_date) market_trades_eth.export_to_json("jan_1_2022_coinbase_eth.json") ``` ### Paging You can make the datapoints to iterate from start (default) or from end. for that you should use a paging_from argument like the following: ``` from coinmetrics.api_client import CoinMetricsClient from coinmetrics.constants import PagingFrom client = CoinMetricsClient() for metric_data in client.get_asset_metrics(assets='btc', metrics=['ReferenceRateUSD'], paging_from=PagingFrom.START): print(metric_data) ``` PagingFrom.END: is available but by default it will page from the start. ### Debugging the API Client There are two additional options for the API Client - `debug_mode` and `verbose`. These two options log network calls to the console, and in the case of `debug_mode` it will generate a log file of all the network requests and the time it takes to call them. These tools can be used to diagnose issues in your code and also to get a better understanding of request times so that users can write more performant code. For example, running the below code: ```python import os from coinmetrics.api_client import CoinMetricsClient api_key = os.environ['CM_API_KEY'] if __name__ == '__main__': client = CoinMetricsClient(api_key=api_key, debug_mode=True) reference_rates_example = client.get_asset_metrics(assets=['btc', 'algo', 'eth'], metrics=['ReferenceRateUSD']) for data in reference_rates_example: continue ``` The console output will look like: ```commandline [DEBUG] 2023-01-09 11:01:02,044 - Starting API Client debugging session. logging to stdout and cm_api_client_debug_2023_01_09_11_01_02.txt [DEBUG] 2023-01-09 11:01:02,044 - Using coinmetrics version 2022.11.14.16 [DEBUG] 2023-01-09 11:01:02,044 - Current state of API Client, excluding API KEY: {'_verify_ssl_certs': True, '_api_base_url': 'https://api.coinmetrics.io/v4', '_ws_api_base_url': 'wss://api.coinmetrics.io/v4', '_http_header': {'Api-Client-Version': '2022.11.14.16'}, '_proxies': {'http': None, 'https': None}, 'debug_mode': True, 'verbose': False} [DEBUG] 2023-01-09 11:01:02,044 - Attempting to call url: timeseries/asset-metrics with params: {'assets': ['btc', 'algo', 'eth'], 'metrics': ['ReferenceRateUSD'], 'frequency': None, 'page_size': None, 'paging_from': 'start', 'start_time': None, 'end_time': None, 'start_height': None, 'end_height': None, 'start_inclusive': None, 'end_inclusive': None, 'timezone': None, 'sort': None, 'limit_per_asset': None} [DEBUG] 2023-01-09 11:01:02,387 - Response status code: 200 for url: https://api.coinmetrics.io/v4/timeseries/asset-metrics?api_key=[REDACTED]&assets=btc%2Calgo%2Ceth&metrics=ReferenceRateUSD&paging_from=start took: 0:00:00.342874 response body size (bytes): 9832 [DEBUG] 2023-01-09 11:01:02,388 - Attempting to call url: timeseries/asset-metrics with params: {'assets': ['btc', 'algo', 'eth'], 'metrics': ['ReferenceRateUSD'], 'frequency': None, 'page_size': None, 'paging_from': 'start', 'start_time': None, 'end_time': None, 'start_height': None, 'end_height': None, 'start_inclusive': None, 'end_inclusive': None, 'timezone': None, 'sort': None, 'limit_per_asset': None, 'next_page_token': '0.MjAxOS0wOS0zMFQwMDowMDowMFo'} [DEBUG] 2023-01-09 11:01:02,559 - Response status code: 200 for url: https://api.coinmetrics.io/v4/timeseries/asset-metrics?api_key=[REDACTED]&assets=btc%2Calgo%2Ceth&metrics=ReferenceRateUSD&paging_from=start&next_page_token=0.MjAxOS0wOS0zMFQwMDowMDowMFo took: 0:00:00.171487 response body size (bytes): 9857 ``` Then it can be easier to understand what network calls the API Client is making, and where any issues may exist. If you wish to dig even deeper, you may consider modifying the `_send_request()` method of the API Client to log additional data about the state of your environment, or anything else that would help diagnose issues. You will notice a log file generated in the format `cm_api_client_debug_2023_01_09_11_01_02.txt`. This log file might be helpful for your own use or to give more context if you are working with Coin Metrics customer success. ### SSL Certs verification Sometimes your organization network have special rules on SSL certs verification and in this case you might face the following error when running the script: ```text SSLError: HTTPSConnectionPool(host='api.coinmetrics.io', port=443): Max retries exceeded with url: (Caused by SSLError(SSLCertVerificationError(1, '[SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: self signed certificate in certificate chain (_ssl.c:1123)'))) ``` In this case, you can pass an option during client initialization to disable ssl verification for requests like this: ```python client = CoinMetricsClient(verify_ssl_certs=False) ``` We don't recommend setting it to False by default and you should make sure you understand the security risks of disabling SSL certs verification. Additionally, you may choose to specify the path to the SSL certificates on your machine. This may cause errors where Python is unable to locate the certificates on your machine, particularly when using Python virtual environments. ```python from coinmetrics.api_client import CoinMetricsClient SSL_CERT_LOCATION = '/Users//Library/Python/3.8/lib/python/site-packages/certifi/cacert.pem' client = CoinMetricsClient(verify_ssl_certs=SSL_CERT_LOCATION) ``` A quick way to find the certs on your machine is: `python3 -c "import requests; print(requests.certs.where())"` And note that this will change based on whether or not you are using a [Python virtual environment or not](https://realpython.com/python-virtual-environments-a-primer/) ### Installing and running coinmetrics package and other python packages behind a secure python network Related to SSL Certs verification, you may have trouble installing and updating PyPi packages to your local environment. So you may need to choose the best solution for your company and environment - either using package managers or installing offline. #### Installing using package managers Full instructions for setting up your environment to use conda, pip, yarn, npm, etc. can be [found here](https://medium.com/@iffi33/dealing-with-ssl-authentication-on-a-secure-corporate-network-pip-conda-git-npm-yarn-bower-73e5b93fd4b2). Additionally, a workaround to disable SSL verification when installing a trusted Python package is this: ```commandline pip install --trusted-host pypi.python.org ``` Although it is important to make sure you understand the risks associated with disabling SSL verification and ensure compliance with company policies. #### Installing Python packages locally/ offline It may be easier to download and install the package locally. Steps: 1. Download the files for the [Coin Metrics API Client from PyPi](https://pypi.org/project/coinmetrics-api-client/#files) 2. [Install it locally](https://packaging.python.org/en/latest/tutorials/installing-packages/#installing-from-local-archives) ### Requests Proxy Sometimes your organization has special rules on making requests to third parties and you have to use proxies in order to comply with the rules. For proxies that don't require auth you can specify them similar to this example: ```python client = CoinMetricsClient(proxy_url=f'http://:') ``` For proxies that require auth, you should be able to specify username and password similar to this example: ```python client = CoinMetricsClient(proxy_url=f'http://:@:') ``` ## Extended documentation For more information about the available methods in the client please reference [API Client Spec](https://coinmetrics.github.io/api-client-python/site/api_client.html) %package help Summary: Development documents and examples for coinmetrics-api-client Provides: python3-coinmetrics-api-client-doc %description help 0 asset 1 non-null object 1 time 1 non-null datetime64[ns] 2 ReferenceRateUSD 1 non-null float64 dtypes: datetime64[ns](1), float64(1), object(1) memory usage: 152.0+ bytes ``` Note that in order to pass a custom datetime object, setting a dtype_mapper is mandatory. Pandas type conversion tends to be more performant. But if there are custom operations that must be done using numpy datatypes, this option will let you perform them. ### Exporting to csv and json files: You can also easily export timeseries data to csv and json files with builtin functions on the `DataCollection` type. For example this script will export Coinbase btc and eth trades for a date to csv and json files respectively: ```python start_date = datetime.date(year=2022, month=1, day=1) end_date = datetime.datetime(year=2022, month=1, day=1) market_trades_btc = client.get_market_trades(page_size=1000, markets="coinbase-btc-usd-spot", start_time=start_date, end_time=end_date) market_trades_btc.export_to_csv("jan_1_2022_coinbase_btc_trades.csv") market_trades_eth = client.get_market_trades(page_size=1000, markets="coinbase-eth-usd-spot", start_time=start_date, end_time=end_date) market_trades_eth.export_to_json("jan_1_2022_coinbase_eth.json") ``` ### Paging You can make the datapoints to iterate from start (default) or from end. for that you should use a paging_from argument like the following: ``` from coinmetrics.api_client import CoinMetricsClient from coinmetrics.constants import PagingFrom client = CoinMetricsClient() for metric_data in client.get_asset_metrics(assets='btc', metrics=['ReferenceRateUSD'], paging_from=PagingFrom.START): print(metric_data) ``` PagingFrom.END: is available but by default it will page from the start. ### Debugging the API Client There are two additional options for the API Client - `debug_mode` and `verbose`. These two options log network calls to the console, and in the case of `debug_mode` it will generate a log file of all the network requests and the time it takes to call them. These tools can be used to diagnose issues in your code and also to get a better understanding of request times so that users can write more performant code. For example, running the below code: ```python import os from coinmetrics.api_client import CoinMetricsClient api_key = os.environ['CM_API_KEY'] if __name__ == '__main__': client = CoinMetricsClient(api_key=api_key, debug_mode=True) reference_rates_example = client.get_asset_metrics(assets=['btc', 'algo', 'eth'], metrics=['ReferenceRateUSD']) for data in reference_rates_example: continue ``` The console output will look like: ```commandline [DEBUG] 2023-01-09 11:01:02,044 - Starting API Client debugging session. logging to stdout and cm_api_client_debug_2023_01_09_11_01_02.txt [DEBUG] 2023-01-09 11:01:02,044 - Using coinmetrics version 2022.11.14.16 [DEBUG] 2023-01-09 11:01:02,044 - Current state of API Client, excluding API KEY: {'_verify_ssl_certs': True, '_api_base_url': 'https://api.coinmetrics.io/v4', '_ws_api_base_url': 'wss://api.coinmetrics.io/v4', '_http_header': {'Api-Client-Version': '2022.11.14.16'}, '_proxies': {'http': None, 'https': None}, 'debug_mode': True, 'verbose': False} [DEBUG] 2023-01-09 11:01:02,044 - Attempting to call url: timeseries/asset-metrics with params: {'assets': ['btc', 'algo', 'eth'], 'metrics': ['ReferenceRateUSD'], 'frequency': None, 'page_size': None, 'paging_from': 'start', 'start_time': None, 'end_time': None, 'start_height': None, 'end_height': None, 'start_inclusive': None, 'end_inclusive': None, 'timezone': None, 'sort': None, 'limit_per_asset': None} [DEBUG] 2023-01-09 11:01:02,387 - Response status code: 200 for url: https://api.coinmetrics.io/v4/timeseries/asset-metrics?api_key=[REDACTED]&assets=btc%2Calgo%2Ceth&metrics=ReferenceRateUSD&paging_from=start took: 0:00:00.342874 response body size (bytes): 9832 [DEBUG] 2023-01-09 11:01:02,388 - Attempting to call url: timeseries/asset-metrics with params: {'assets': ['btc', 'algo', 'eth'], 'metrics': ['ReferenceRateUSD'], 'frequency': None, 'page_size': None, 'paging_from': 'start', 'start_time': None, 'end_time': None, 'start_height': None, 'end_height': None, 'start_inclusive': None, 'end_inclusive': None, 'timezone': None, 'sort': None, 'limit_per_asset': None, 'next_page_token': '0.MjAxOS0wOS0zMFQwMDowMDowMFo'} [DEBUG] 2023-01-09 11:01:02,559 - Response status code: 200 for url: https://api.coinmetrics.io/v4/timeseries/asset-metrics?api_key=[REDACTED]&assets=btc%2Calgo%2Ceth&metrics=ReferenceRateUSD&paging_from=start&next_page_token=0.MjAxOS0wOS0zMFQwMDowMDowMFo took: 0:00:00.171487 response body size (bytes): 9857 ``` Then it can be easier to understand what network calls the API Client is making, and where any issues may exist. If you wish to dig even deeper, you may consider modifying the `_send_request()` method of the API Client to log additional data about the state of your environment, or anything else that would help diagnose issues. You will notice a log file generated in the format `cm_api_client_debug_2023_01_09_11_01_02.txt`. This log file might be helpful for your own use or to give more context if you are working with Coin Metrics customer success. ### SSL Certs verification Sometimes your organization network have special rules on SSL certs verification and in this case you might face the following error when running the script: ```text SSLError: HTTPSConnectionPool(host='api.coinmetrics.io', port=443): Max retries exceeded with url: (Caused by SSLError(SSLCertVerificationError(1, '[SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: self signed certificate in certificate chain (_ssl.c:1123)'))) ``` In this case, you can pass an option during client initialization to disable ssl verification for requests like this: ```python client = CoinMetricsClient(verify_ssl_certs=False) ``` We don't recommend setting it to False by default and you should make sure you understand the security risks of disabling SSL certs verification. Additionally, you may choose to specify the path to the SSL certificates on your machine. This may cause errors where Python is unable to locate the certificates on your machine, particularly when using Python virtual environments. ```python from coinmetrics.api_client import CoinMetricsClient SSL_CERT_LOCATION = '/Users//Library/Python/3.8/lib/python/site-packages/certifi/cacert.pem' client = CoinMetricsClient(verify_ssl_certs=SSL_CERT_LOCATION) ``` A quick way to find the certs on your machine is: `python3 -c "import requests; print(requests.certs.where())"` And note that this will change based on whether or not you are using a [Python virtual environment or not](https://realpython.com/python-virtual-environments-a-primer/) ### Installing and running coinmetrics package and other python packages behind a secure python network Related to SSL Certs verification, you may have trouble installing and updating PyPi packages to your local environment. So you may need to choose the best solution for your company and environment - either using package managers or installing offline. #### Installing using package managers Full instructions for setting up your environment to use conda, pip, yarn, npm, etc. can be [found here](https://medium.com/@iffi33/dealing-with-ssl-authentication-on-a-secure-corporate-network-pip-conda-git-npm-yarn-bower-73e5b93fd4b2). Additionally, a workaround to disable SSL verification when installing a trusted Python package is this: ```commandline pip install --trusted-host pypi.python.org ``` Although it is important to make sure you understand the risks associated with disabling SSL verification and ensure compliance with company policies. #### Installing Python packages locally/ offline It may be easier to download and install the package locally. Steps: 1. Download the files for the [Coin Metrics API Client from PyPi](https://pypi.org/project/coinmetrics-api-client/#files) 2. [Install it locally](https://packaging.python.org/en/latest/tutorials/installing-packages/#installing-from-local-archives) ### Requests Proxy Sometimes your organization has special rules on making requests to third parties and you have to use proxies in order to comply with the rules. For proxies that don't require auth you can specify them similar to this example: ```python client = CoinMetricsClient(proxy_url=f'http://:') ``` For proxies that require auth, you should be able to specify username and password similar to this example: ```python client = CoinMetricsClient(proxy_url=f'http://:@:') ``` ## Extended documentation For more information about the available methods in the client please reference [API Client Spec](https://coinmetrics.github.io/api-client-python/site/api_client.html) %prep %autosetup -n coinmetrics-api-client-2023.5.2.20 %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-coinmetrics-api-client -f filelist.lst %dir %{python3_sitelib}/* %files help -f doclist.lst %{_docdir}/* %changelog * Fri May 05 2023 Python_Bot - 2023.5.2.20-1 - Package Spec generated