Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/ranjanrak/etag-response-cache
Python package for caching HTTP response based on etag.
https://github.com/ranjanrak/etag-response-cache
cache-storage etags
Last synced: 2 days ago
JSON representation
Python package for caching HTTP response based on etag.
- Host: GitHub
- URL: https://github.com/ranjanrak/etag-response-cache
- Owner: ranjanrak
- License: mit
- Created: 2022-01-18T12:59:16.000Z (almost 3 years ago)
- Default Branch: main
- Last Pushed: 2022-01-31T06:16:49.000Z (almost 3 years ago)
- Last Synced: 2024-11-06T12:49:30.975Z (8 days ago)
- Topics: cache-storage, etags
- Language: Python
- Homepage:
- Size: 8.79 KB
- Stars: 2
- Watchers: 1
- Forks: 1
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# etag-response-cache
[![PyPI version](https://badge.fury.io/py/etag-cache.svg)](https://badge.fury.io/py/etag-cache)Etag cache implementation for HTTP requests, to save request bandwidth for a non-modified response. Returns
high-speed accessed dictionary data as cache.## Concept
Store Etag value(as hash key:value pair) in the user's home directory `os.path.join(os.getenv("HOME"), ".pyapp")` into `etag` and successful response data into `cache` DBM files.
Add `If-None-Match` header for all `GET` request.
Update `etag` and `cache` for required request url, when none 304 http status is received i.e if response is modified.
Return `cache` data as dictionary for non-modified response.Sample `GET` request header with `If-None-Match`:
```
{'X-Kite-Version': '3', 'User-Agent': 'Kiteconnect-python/3.9.4',
'If-None-Match': 'W/"i51p01GqP6TRPWsM"',
'Authorization': 'token api_key:access_token'}
```## Installation
```
pip install etag_cache
```## Usage
```python
import requests
from etag_cache import EtagCache# dir_path defaults to $HOME/.pyapp, if not given
cache_object = EtagCache(dir_path='your_defined_cache_directory_path')
url = "https://api.kite.trade/portfolio/holdings"payload = ""
headers = {
'x-kite-version': "3",
'authorization': "token api_key:access_token"
}
# Add etag to request header
headers = cache_object.add_etag("GET", headers, url)response = requests.request("GET", url, data=payload, headers=headers)
# Store etag from response header
cache_object.save_etag(response)
# Store response data as cache
response_dict = cache_object.add_read_cache(response)
print(response_dict)
```
## Response
```
DEBUG:urllib3.connectionpool:https://api.kite.trade:443 "GET /portfolio/holdings HTTP/1.1" 304 0{'tradingsymbol': 'APOLLOPIPE', 'exchange': 'NSE', 'instrument_token': 3676417, 'isin': 'INE126J01016',
'product': 'CNC', 'price': 0, 'quantity': 3, 'used_quantity': 0, 't1_quantity': 0, 'realised_quantity': 3,
'authorised_quantity': 0, 'authorised_date': '2021-12-28 00:00:00', 'opening_quantity': 3, 'short_quantity':
0, 'collateral_quantity': 0, 'collateral_type': '', 'discrepancy': False, 'average_price': 582.666667,
'last_price': 539.8, 'close_price': 539.65, 'pnl': -128.60000100000002, 'day_change': 0.14999999999997726,
'day_change_percentage': 0.027795793569902208} .....
```