Skip to content

Commit

Permalink
fix: Inconsistent 'expires_at' on 'BaseWeChatClient' (#684) (#685)
Browse files Browse the repository at this point in the history
  • Loading branch information
amchii committed Jan 6, 2022
1 parent bfdc6c1 commit 5f693a7
Show file tree
Hide file tree
Showing 2 changed files with 26 additions and 1 deletion.
14 changes: 14 additions & 0 deletions tests/test_client.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
import json
import os
import inspect
import time
import unittest
from datetime import datetime

Expand Down Expand Up @@ -830,3 +831,16 @@ def test_code_to_session(self):
self.assertEqual("D1ZWEygStjuLCnZ9IN2l4Q==", res["session_key"])
self.assertEqual("o16wA0b4AZKzgVJR3MBwoUdTfU_E", res["openid"])
self.assertEqual("or4zX05h_Ykt4ju0TUfx3CQsvfTo", res["unionid"])

def test_client_expires_at_consistency(self):
from redis import Redis
from wechatpy.session.redisstorage import RedisStorage

redis = Redis()
session = RedisStorage(redis)
client1 = WeChatClient(self.app_id, self.secret, session=session)
client2 = WeChatClient(self.app_id, self.secret, session=session)
assert client1.expires_at == client2.expires_at
expires_at = time.time() + 7200
client1.expires_at = expires_at
assert client1.expires_at == client2.expires_at == expires_at
13 changes: 12 additions & 1 deletion wechatpy/client/base.py
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,6 @@ def __new__(cls, *args, **kwargs):
def __init__(self, appid, access_token=None, session=None, timeout=None, auto_retry=True):
self._http = requests.Session()
self.appid = appid
self.expires_at = None
self.session = session or MemoryStorage()
self.timeout = timeout
self.auto_retry = auto_retry
Expand All @@ -46,6 +45,18 @@ def __init__(self, appid, access_token=None, session=None, timeout=None, auto_re
def access_token_key(self):
return f"{self.appid}_access_token"

@property
def access_token_expires_at_key(self):
return f"{self.appid}_access_token_expires_at"

@property
def expires_at(self):
return self.session.get(self.access_token_expires_at_key, None)

@expires_at.setter
def expires_at(self, value):
self.session.set(self.access_token_expires_at_key, value)

def _request(self, method, url_or_endpoint, **kwargs):
if not url_or_endpoint.startswith(("http://", "https://")):
api_base_url = kwargs.pop("api_base_url", self.API_BASE_URL)
Expand Down

0 comments on commit 5f693a7

Please sign in to comment.