Skip to content

Commit 9501f0d

Browse files
committed
✨ add leancloud.InboxQuery
1 parent f1da046 commit 9501f0d

3 files changed

Lines changed: 61 additions & 3 deletions

File tree

leancloud/__init__.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,7 @@
3939
from .query import Query
4040
from .relation import Relation
4141
from .role import Role
42+
from .status import InboxQuery
4243
from .status import Status
4344
from .sys_message import SysMessage
4445
from .user import User
@@ -55,6 +56,7 @@
5556
'FriendshipQuery',
5657
'GeoPoint',
5758
'HttpsRedirectMiddleware',
59+
'InboxQuery',
5860
'Installation',
5961
'LeanCloudError',
6062
'LeanEngineError',

leancloud/status.py

Lines changed: 47 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,13 +17,14 @@
1717
__author__ = 'asaka'
1818

1919

20-
2120
StatusesCount = namedtuple('StatusesCount', ['total', 'unread'])
2221

22+
2323
class Status(object):
2424
def __init__(self, **data):
2525
self.id = None # type: str
2626
self.created_at = None # type: datetime
27+
self.updated_at = None # type: datetime
2728
self._data = data
2829
self.inbox_type = 'default'
2930

@@ -76,6 +77,12 @@ def destroy(self):
7677
raise ValueError('This status is not saved')
7778
client.delete('/statuses/' + self.id)
7879

80+
def _update_data(self, server_data):
81+
self.id = server_data.pop('objectId')
82+
self.created_at = utils.decode('createdAt', server_data.pop('createdAt'))
83+
self.updated_at = utils.decode('updatedAt', server_data.pop('updatedAt'))
84+
self._data = utils.decode(None, server_data)
85+
7986
@staticmethod
8087
def count_unread_statuses(owner, inbox_type='default'):
8188
params = {
@@ -84,3 +91,42 @@ def count_unread_statuses(owner, inbox_type='default'):
8491
}
8592
content = client.get('/subscribe/statuses/count', params).json()
8693
return StatusesCount(total=content['total'], unread=content['unread'])
94+
95+
96+
class InboxQuery(Query):
97+
def __init__(self):
98+
super(InboxQuery, self).__init__('_Status')
99+
self._since_id = 0
100+
self._max_id = 0
101+
self._inbox_type = 'default'
102+
self._owner = None
103+
104+
def since_id(self, value):
105+
self._since_id = value
106+
return self
107+
108+
def max_id(self, value):
109+
self._max_id = value
110+
return self
111+
112+
def owner(self, value):
113+
self._owner = value
114+
return self
115+
116+
def inbox_type(self, value):
117+
self._inbox_type = value
118+
return self
119+
120+
def _new_object(self):
121+
return Status()
122+
123+
def _do_request(self, params):
124+
return client.get('/subscribe/statuses', params).json()
125+
126+
def dump(self):
127+
result = super(InboxQuery, self).dump()
128+
result['owner'] = utils.encode(self._owner)
129+
result['inboxType'] = self._inbox_type
130+
result['sinceId'] = self._since_id
131+
result['maxId'] = self._max_id
132+
return result

tests/test_status.py

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,10 +9,10 @@
99
import time
1010

1111
from nose.tools import assert_equal
12-
from nose.tools import assert_true
1312

1413
import leancloud
1514
from leancloud import Status
15+
from leancloud import InboxQuery
1616

1717

1818
def setup():
@@ -59,10 +59,20 @@ def test_send_private_status():
5959
status.destroy()
6060

6161

62-
def test_count_():
62+
def test_statuses_count():
6363
status = Status(image='http://www.example.com', message='hello world!')
6464
status.send_private_status(leancloud.User.get_current())
65+
time.sleep(1) # wait server to sync
6566
result = Status.count_unread_statuses(leancloud.User.get_current(), 'private')
6667
assert_equal(result.total, 1)
6768
assert_equal(result.unread, 1)
6869
status.destroy()
70+
71+
72+
def test_inbox_query():
73+
status = Status(image='http://www.example.com', message='hello world!')
74+
status.send_private_status(leancloud.User.get_current())
75+
time.sleep(1) # wait server to sync
76+
saved = InboxQuery().inbox_type('private').owner(leancloud.User.get_current()).first()
77+
assert_equal(saved.get('image'), status.get('image'))
78+
assert_equal(saved.id, status.id)

0 commit comments

Comments
 (0)