Skip to content

Commit 7f54c84

Browse files
authored
/now subject command (#39)
* /now subject command on bot * check if lock is locked before release
1 parent 87f193d commit 7f54c84

File tree

5 files changed

+82
-3
lines changed

5 files changed

+82
-3
lines changed

bot/commands/__init__.py

+3-1
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,12 @@
22
from bot.commands.subscription import config_handlers as subscription_handlers
33
from bot.commands.callback import config_handlers as callback_handlers
44
from bot.commands.exchange import config_handlers as exchange_handlers
5+
from bot.commands.subject import config_handlers as subject_handlers
56

67
handlers = [
78
base_handlers,
89
subscription_handlers,
910
callback_handlers,
10-
exchange_handlers
11+
exchange_handlers,
12+
subject_handlers
1113
]

bot/commands/subject.py

+64
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,64 @@
1+
import logging
2+
3+
from telegram import Update
4+
from telegram.ext import CommandHandler, CallbackContext
5+
from mongoengine.errors import DoesNotExist, MultipleObjectsReturned
6+
7+
from bot.core import BotTelegramCore
8+
from db.subject import Subject
9+
from db.observer import UserObserver
10+
from db.update_message import UpdateMessage
11+
12+
13+
logging.basicConfig(
14+
format='%(asctime)s - %(name)s - %(levelname)s - %(message)s',
15+
level=logging.INFO)
16+
17+
logger = logging.getLogger(__name__)
18+
19+
20+
def now(update: Update, context: CallbackContext):
21+
chat = update.effective_chat
22+
message = update.effective_message
23+
24+
try:
25+
observer = UserObserver.objects.get(chat_id=f"{chat.id}")
26+
except DoesNotExist:
27+
observer = UserObserver(f"{chat.username}",
28+
f"{chat.id}").save()
29+
30+
subject_names = context.args
31+
subjects = []
32+
errors = []
33+
34+
if subject_names:
35+
for name in subject_names:
36+
try:
37+
subject = Subject.objects.get(name__icontains=name)
38+
subjects.append(subject)
39+
except DoesNotExist as e:
40+
errors.append(f"{name}: {e}")
41+
except MultipleObjectsReturned as e:
42+
errors.append(f"{e}\n"
43+
f"The value {name} returned more than "
44+
f"one subject. Please be more specific!")
45+
else:
46+
subjects = Subject.objects.all()
47+
48+
update_messages = []
49+
50+
for subject in subjects:
51+
update_messages.append(UpdateMessage.get_last_by_subject(subject))
52+
53+
if errors:
54+
error_message = "\n".join(errors)
55+
message.reply_text(error_message)
56+
57+
for msg in update_messages:
58+
observer.notify(msg)
59+
60+
61+
def config_handlers(instance: BotTelegramCore):
62+
logger.info('Setting subject commands...')
63+
64+
instance.add_handler(CommandHandler("now", now))

db/observer.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ class ObserverMessage(Document):
2626
meta = {
2727
'ordering': ['datetime'],
2828
'indexes': [
29-
{'fields': ['datetime'], 'expireAfterSeconds': 7*24*60*60}
29+
{'fields': ['datetime'], 'expireAfterSeconds': 31*24*60*60}
3030
]
3131
}
3232

db/ticket.py

+2-1
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,7 @@ def get_last(cls):
6161
last_ticket_price = cls._fetch_new_ticket_price()
6262
finally:
6363
last_ticket_price.save()
64-
cls.lock.release()
64+
if cls.lock.locked():
65+
cls.lock.release()
6566

6667
return last_ticket_price

update_raspberry.py

+12
Original file line numberDiff line numberDiff line change
@@ -1,28 +1,40 @@
1+
import logging
12
import requests
23
import json
34
import tarfile
45
import subprocess
56

7+
8+
logging.basicConfig(
9+
format='%(asctime)s - %(name)s - %(levelname)s - %(message)s',
10+
level=logging.INFO)
11+
12+
logger = logging.getLogger(__name__)
13+
614
releases_url = "https://api.github.com/repos/dcr-guys/JackBot/releases"
715
releases_response = requests.get(releases_url)
816
releases_response.data = json.loads(releases_response.content)
917

1018
latest = releases_response.data[0]
1119
latest_tarball = requests.get(latest.get('tarball_url'))
1220
latest_name = latest.get('name')
21+
logger.info(f"Latest name is {latest_name}!")
1322

1423
base_dir = f"./{latest_name}/"
1524
tarfile_name = f"{base_dir}{latest_name}.tar.gz"
1625

1726
subprocess.run(["mkdir", base_dir])
1827

28+
logger.info("Creating tar file...")
1929
with open(tarfile_name, 'wb') as file:
2030
file.write(latest_tarball.content)
2131

32+
logger.info("Extracting tar file...")
2233
with tarfile.open(tarfile_name) as tar:
2334
subfolder_name = tar.firstmember.name
2435
tar.extractall(base_dir)
2536

37+
logger.info("Rsync files...")
2638
source_dir = f"{base_dir}/{subfolder_name}/"
2739
dest_dir = "./"
2840
subprocess.run(['rsync', '-av', source_dir, dest_dir])

0 commit comments

Comments
 (0)