|
1 | 1 | import requests |
| 2 | +from requests.auth import HTTPBasicAuth |
2 | 3 | import hashlib |
3 | 4 | import logging |
4 | 5 | import confuse |
5 | | -from python_paypal_api.base import BaseClient |
6 | | -from python_paypal_api.base.enum import EndPoint |
7 | | -from .credentials import Credentials |
8 | | -from .access_token_response import AccessTokenResponse |
9 | | -from .exceptions import AuthorizationError |
10 | 6 | import os |
11 | 7 | import logging |
12 | 8 | import json |
13 | | - |
14 | 9 | from datetime import datetime, timedelta |
15 | | - |
16 | | -from requests.auth import HTTPBasicAuth |
17 | | - |
| 10 | +from cachetools import TTLCache |
| 11 | +from python_paypal_api.base import BaseClient |
| 12 | +from python_paypal_api.base.enum import EndPoint |
| 13 | +from python_paypal_api.auth.credentials import Credentials |
| 14 | +from python_paypal_api.auth.access_token_response import AccessTokenResponse |
| 15 | +from python_paypal_api.auth.exceptions import AuthorizationError |
18 | 16 |
|
19 | 17 | logging.basicConfig( |
20 | 18 | level=logging.INFO, |
21 | 19 | format="%(asctime)s:%(levelname)s:%(message)s" |
22 | 20 | ) |
23 | 21 |
|
| 22 | +cache = TTLCache(maxsize=10, ttl=timedelta(seconds=32400), timer=datetime.now) |
24 | 23 |
|
25 | 24 | class AccessTokenClient(BaseClient): |
26 | 25 |
|
27 | 26 | grant_type = 'client_credentials' |
28 | 27 | path = '/v1/oauth2/token' |
29 | 28 |
|
30 | | - def __init__(self, account='default', credentials=None, proxies=None, verify=True, timeout=None): |
| 29 | + def __init__(self, account='default', credentials=None, store_credentials=True, proxies=None, verify=True, timeout=None): |
31 | 30 |
|
32 | 31 | self.cred = Credentials(credentials) |
| 32 | + self.store_credentials = store_credentials |
33 | 33 | self.host = EndPoint[self.cred.client_mode].value if self.cred.client_mode is not None else EndPoint["SANDBOX"].value |
34 | 34 | self.timeout = timeout |
35 | 35 | self.proxies = proxies |
@@ -77,32 +77,56 @@ def create_cache_token(self, file:str): |
77 | 77 | fout.write(json_object) |
78 | 78 | return access_token |
79 | 79 |
|
80 | | - |
81 | 80 | def get_auth(self) -> AccessTokenResponse: |
82 | 81 |
|
83 | | - now_datetime = datetime.now() |
84 | 82 |
|
85 | | - config = confuse.Configuration('python-paypal-api') |
86 | | - file = os.path.join(config.config_dir(), self._get_cache_key()) |
87 | | - try: |
88 | | - |
89 | | - openfile = open(file, 'r') |
90 | | - access_token = json.load(openfile) |
91 | | - future_datetime = datetime.fromisoformat(access_token["expire_time"]) |
92 | | - # openfile.close() |
93 | | - |
94 | | - except FileNotFoundError: |
95 | | - |
96 | | - access_token = self.create_cache_token(file) |
97 | | - future_datetime = now_datetime + timedelta(seconds=access_token["expires_in"]) |
98 | | - |
99 | | - if now_datetime > future_datetime: |
100 | | - if(os.path.isfile(file)): |
101 | | - os.remove(file) |
102 | | - access_token = self.create_cache_token(file) |
| 83 | + # logging.info("self.store_credentials") |
| 84 | + # logging.info(self.store_credentials) |
| 85 | + # logging.info(self.get_file_auth()) |
| 86 | + |
| 87 | + if self.store_credentials: |
| 88 | + |
| 89 | + |
| 90 | + now_datetime = datetime.now() |
| 91 | + |
| 92 | + config = confuse.Configuration('python-paypal-api') |
| 93 | + file = os.path.join(config.config_dir(), self._get_cache_key()) |
| 94 | + try: |
| 95 | + |
| 96 | + openfile = open(file, 'r') |
| 97 | + access_token = json.load(openfile) |
| 98 | + future_datetime = datetime.fromisoformat(access_token["expire_time"]) |
| 99 | + openfile.close() |
| 100 | + |
| 101 | + except FileNotFoundError: |
| 102 | + |
| 103 | + access_token = self.create_cache_token(file) |
| 104 | + future_datetime = now_datetime + timedelta(seconds=access_token["expires_in"]) |
| 105 | + |
| 106 | + if now_datetime > future_datetime: |
| 107 | + if (os.path.isfile(file)): |
| 108 | + os.remove(file) |
| 109 | + access_token = self.create_cache_token(file) |
| 110 | + |
| 111 | + else: |
| 112 | + pass |
| 113 | + |
103 | 114 |
|
104 | 115 | else: |
105 | | - pass |
| 116 | + |
| 117 | + |
| 118 | + cache_key = self._get_cache_key() |
| 119 | + try: |
| 120 | + # logging.info("cache") |
| 121 | + access_token = cache[cache_key] |
| 122 | + except KeyError: |
| 123 | + # logging.info("request") |
| 124 | + request_url = self.scheme + self.host + self.path |
| 125 | + access_token = self._request(request_url, self.data, self.headers) |
| 126 | + cache[cache_key] = access_token |
| 127 | + # return AccessTokenResponse(**access_token) |
| 128 | + |
| 129 | + |
106 | 130 |
|
107 | 131 | return AccessTokenResponse(**access_token) |
108 | 132 |
|
|
0 commit comments