-
Notifications
You must be signed in to change notification settings - Fork 0
/
explore_images.py
133 lines (119 loc) · 4.34 KB
/
explore_images.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
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
import random
import click
from datetime import datetime
from sqlalchemy.sql import text
from db import DBSession, ImageDB
def get_first_image_in_album(album_id: int) -> int:
with DBSession() as session:
return session.execute(
text('''
SELECT
id
FROM
images i
WHERE
album_id = :album_id
ORDER BY
album_position
LIMIT 1
'''),
{'album_id': album_id}
).scalar()
def next_image_in_album(id: int) -> int:
'Returns next image ID (returns first after last)'
with DBSession() as session:
return session.execute(
text('''
SELECT
next_id
FROM (
SELECT
id as id,
COALESCE(
LEAD(id) OVER (PARTITION BY album_id ORDER BY album_position),
FIRST_VALUE(id) OVER (PARTITION BY album_id ORDER BY album_position)
) AS next_id,
album_id AS album_id
FROM
images i
) s
WHERE
id = :id
'''),
{'id': id}
).scalar()
def question_generator():
yield 'Как вам данная картинка?'
options = [
'Как вам данная картинка?',
'Как вам данная картинка?',
'Как вам данная картинка?',
'Как вам данная картинка?',
'Как вам данная картинка?',
'Как вам данная картинка?',
'А как вам данная картинка?',
'А как вам данная картинка?',
'А как вам данная картинка?',
'А как вам данная картинка?',
'А как вам данная картинка?',
'А эта?',
'А эта?',
'А эта?',
'А вот эта?',
'Мне кажется, что эта картинка вам понравится...',
'Вам нравится данное изображение?',
'Эта точно в вашем вкусе!',
'Смейся или бан.',
]
while True:
yield random.choice(options)
@click.command()
@click.option("--album-id", default=281940823, show_default=True, help="ID альбома")
def main(album_id: int):
'Script that explores images in album and allow to like/skip images'
input_choices = click.Choice(['like', 'skip', 'quit'])
first_image_id = get_first_image_in_album(album_id)
image_id = first_image_id
questions = question_generator()
with DBSession() as session:
while True:
image: ImageDB = session.query(
ImageDB
).where(
ImageDB.id == image_id
).first()
image_id = next_image_in_album(image_id)
command = click.prompt(
text=(
'\n'
f'{next(questions)}\n'
f'Ссылка: {image.url}\n'
f'Автор: {image.author_name}\n'
f'Число лайков: {image.likes_count}\n'
f'Вы решаете:'
),
default='skip',
type=input_choices,
show_choices=True,
show_default=True,
)
match command:
case 'like':
image.likes_count += 1
image.last_update = datetime.now()
session.flush()
session.commit()
case 'skip':
pass
case 'quit':
click.echo('\nСпасибо за участие!')
return
if image_id == first_image_id:
if not click.confirm(
'\nВы просмотрели все изображения в альбоме, хотите продолжить?',
default=True,
):
click.echo('\nСпасибо за участие!')
return
if __name__ == '__main__':
main()