-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathEtsyAPISession.py
88 lines (79 loc) · 2.85 KB
/
EtsyAPISession.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
from requests_oauthlib import OAuth1Session
# from async_oauthlib import OAuth1Session
from requests_oauthlib.oauth1_session import TokenRequestDenied
from config import ETSY_API_KEY, ETSY_API_SECRET, CALLBACK_URI
def check_keys_and_secrets(*args):
for arg in args:
if len(arg) == 0:
return True
return False
class EtsyAPISession:
def __init__(self,
resource_owner_key: str,
resource_owner_secret: str,
client_key=None,
client_secret=None):
if client_key is None or client_secret is None:
client_key = ETSY_API_KEY
client_secret = ETSY_API_SECRET
self.__client_key = client_key
self.__client_secret = client_secret
self.__resource_owner_key: str = resource_owner_key
self.__resource_owner_secret: str = resource_owner_secret
self.__etsy_api_session: OAuth1Session = self.create_etsy_api_session()
def get_etsy_api_session(self) -> OAuth1Session:
return self.__etsy_api_session
def create_etsy_api_session(self) -> OAuth1Session:
if check_keys_and_secrets((
self.__client_key,
self.__client_secret,
self.__resource_owner_key,
self.__resource_owner_secret
)):
raise ValueError(
"CLIENT_KEY (APP) or CLIENT_SECRET (APP) or RESOURCE_OWNER_KEY (USER) or RESOURCE_OWNER_SECRET (USER) is not found!")
etsy_api_session = OAuth1Session(
client_key=self.__client_key,
client_secret=self.__client_secret,
resource_owner_key=self.__resource_owner_key,
resource_owner_secret=self.__resource_owner_secret
)
return etsy_api_session
@staticmethod
def get_request_token(
client_key=None,
client_secret=None):
if client_key is None or client_secret is None:
client_key = ETSY_API_KEY
client_secret = ETSY_API_SECRET
oauth_session = OAuth1Session(
client_key=client_key,
client_secret=client_secret,
callback_uri=CALLBACK_URI
)
request_token_dict = oauth_session.fetch_request_token(
url="https://openapi.etsy.com/v2/oauth/request_token?scope=email_r%20listings_r%20transactions_r%20profile_r%20address_r%20shops_rw"
)
return request_token_dict
@staticmethod
def get_access_token(resource_owner_key: str, resource_owner_secret: str, verifier: str,
client_key=None,
client_secret=None):
if client_key is None or client_secret is None:
client_key = ETSY_API_KEY
client_secret = ETSY_API_SECRET
oauth_session = OAuth1Session(
client_key=client_key,
client_secret=client_secret,
resource_owner_key=resource_owner_key,
resource_owner_secret=resource_owner_secret
)
try:
access_token_dict = oauth_session.fetch_access_token(
url="https://openapi.etsy.com/v2/oauth/access_token",
verifier=verifier
)
except TokenRequestDenied as e:
return {}
else:
return access_token_dict