following-fix
This commit is contained in:
parent
6c5ce12b7e
commit
5548d6d1f7
|
@ -18,23 +18,28 @@ class Following:
|
||||||
|
|
||||||
class FollowingManager:
|
class FollowingManager:
|
||||||
lock = asyncio.Lock()
|
lock = asyncio.Lock()
|
||||||
|
followers_by_kind = {}
|
||||||
data = {"author": [], "topic": [], "shout": [], "community": []}
|
data = {"author": [], "topic": [], "shout": [], "community": []}
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
async def register(kind, uid):
|
async def register(kind, uid):
|
||||||
async with FollowingManager.lock:
|
async with FollowingManager.lock:
|
||||||
FollowingManager[kind].append(uid)
|
FollowingManager.followers_by_kind[kind] = FollowingManager.followers_by_kind.get(kind, [])
|
||||||
|
FollowingManager.followers_by_kind[kind].append(uid)
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
async def remove(kind, uid):
|
async def remove(kind, uid):
|
||||||
async with FollowingManager.lock:
|
async with FollowingManager.lock:
|
||||||
FollowingManager[kind].remove(uid)
|
followings = FollowingManager.followers_by_kind.get(kind)
|
||||||
|
if followings:
|
||||||
|
followings.remove(uid)
|
||||||
|
FollowingManager.followers_by_kind[kind] = followings
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
async def push(kind, payload):
|
async def push(kind, payload):
|
||||||
try:
|
try:
|
||||||
async with FollowingManager.lock:
|
async with FollowingManager.lock:
|
||||||
for entity in FollowingManager[kind]:
|
for entity in FollowingManager.followers_by_kind.get(kind, []):
|
||||||
if payload.shout["created_by"] == entity.uid:
|
if payload.shout["created_by"] == entity.uid:
|
||||||
entity.queue.put_nowait(payload)
|
entity.queue.put_nowait(payload)
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
|
|
Loading…
Reference in New Issue
Block a user