-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathutils.py
71 lines (55 loc) · 2.29 KB
/
utils.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
import json
from typing import Optional
from const import (POSTS_PATH,
COMMENTS_PATH)
def _load_json_file(filename: str) -> list[dict]:
""" Загрузить JSON файл """
with open(filename, encoding='utf8') as file:
return json.load(file)
def _save_json_file(filename: str, data: list[dict]) -> None:
""" Сохранить как JSON файл """
with open(filename, 'w', encoding='utf8') as file:
json.dump(data, file, ensure_ascii=False, indent=4)
def get_posts_all() -> list[dict]:
""" Загрузить посты из файла """
return _load_json_file(POSTS_PATH)
def get_comments_all() -> list[dict]:
""" Загрузить комментарии из файла """
return _load_json_file(COMMENTS_PATH)
def get_posts_by_user(posts: list[dict], user_name: str) -> list[dict]:
""" Получить посты по имени пользователя """
is_user_exist = False
user_posts = []
for post in posts:
if user_name.lower() == post["poster_name"].lower():
is_user_exist = True
user_posts.append(post)
if not is_user_exist:
raise ValueError(f'User with name "{user_name}" is not exist')
return user_posts
def get_comments_by_post_id(comments: list[dict], post_id: int) -> list[dict]:
""" Получить комментарии поста по его идентификатору """
is_post_exist = False
post_comments = []
for comment in comments:
if post_id == comment["post_id"]:
is_post_exist = True
post_comments.append(comment)
if not is_post_exist:
raise ValueError(f'Post with id = "{post_id}" is not exist')
return post_comments
def search_for_posts(posts: list[dict], query: str) -> list[dict]:
""" Получить посты содержащие query """
query_posts = []
if not query:
return query_posts
for post in posts:
if query.lower() in post["content"].lower():
query_posts.append(post)
return query_posts
def get_post_by_pk(posts: list[dict], pk: int) -> Optional[dict]:
""" Получить пост по идентификатору """
for post in posts:
if pk == post["pk"]:
return post
return None