server: better iterable logic
This commit is contained in:
parent
0cc8407d76
commit
07267b9737
1 changed files with 12 additions and 6 deletions
|
@ -2,6 +2,7 @@ import hmac
|
||||||
import logging
|
import logging
|
||||||
from collections import namedtuple
|
from collections import namedtuple
|
||||||
from datetime import datetime
|
from datetime import datetime
|
||||||
|
from itertools import tee, chain, islice, izip
|
||||||
from typing import Any, Callable, Dict, List, Optional, Tuple
|
from typing import Any, Callable, Dict, List, Optional, Tuple
|
||||||
|
|
||||||
import sqlalchemy as sa
|
import sqlalchemy as sa
|
||||||
|
@ -96,6 +97,13 @@ FLAG_MAP = {
|
||||||
model.Post.FLAG_SOUND: "sound",
|
model.Post.FLAG_SOUND: "sound",
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# https://stackoverflow.com/a/1012089
|
||||||
|
def _get_nearby_iter(post_list):
|
||||||
|
previous_item, current_item, next_item = tee(post_list, 3)
|
||||||
|
previous_item = chain([None], previous_item)
|
||||||
|
next_item = chain(islice(next_item, 1, None), [None])
|
||||||
|
return izip(previous_item, current_item, next_item)
|
||||||
|
|
||||||
|
|
||||||
def get_post_security_hash(id: int) -> str:
|
def get_post_security_hash(id: int) -> str:
|
||||||
return hmac.new(
|
return hmac.new(
|
||||||
|
@ -982,12 +990,10 @@ def get_pools_nearby(
|
||||||
first_post_id = pool.posts[0].post_id,
|
first_post_id = pool.posts[0].post_id,
|
||||||
last_post_id = pool.posts[-1].post_id,
|
last_post_id = pool.posts[-1].post_id,
|
||||||
|
|
||||||
for idx, pool_post in enumerate(pool.posts):
|
for previous_item, current_item, next_item in _get_nearby_iter(pool.posts):
|
||||||
if post.post_id == pool_post.post_id:
|
if post.post_id == current_item.post_id:
|
||||||
if post.post_id != first_post_id:
|
prev_post_id = previous_item.post_id
|
||||||
prev_post_id = pool.posts[idx-1].post_id
|
next_post_id = next_item.post_id
|
||||||
if post.post_id != last_post_id:
|
|
||||||
next_post_id = pool.posts[idx+1].post_id
|
|
||||||
break
|
break
|
||||||
|
|
||||||
resp_entry = PoolPostsNearby(
|
resp_entry = PoolPostsNearby(
|
||||||
|
|
Loading…
Reference in a new issue