Passed
Push — master ( a8a0e7...5f5103 )
by Yohann
01:28
created

drink_list.get_int()   A

Complexity

Conditions 1

Size

Total Lines 2
Code Lines 2

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
eloc 2
dl 0
loc 2
rs 10
c 0
b 0
f 0
cc 1
nop 1
1
import discord
2
3
from app.exceptions import DrinkAlreadyExists, DrinkNotFound
4
from app.utils import word_capitalize, get_int
5
from app.classes.abc.message_manager import MessageManager
6
7
8
class DrinkList(MessageManager):
9
10
    def __init__(self, message):
11
        self.drink_list_message = message
12
        self.drink_list = parse_from_message(message.embeds[0].description)
13
14
    async def update(self):
15
        drink_list_embed = discord.Embed(
16
            title="Liste des boissons",
17
            description=(
18
                get_embed_description() + '\n'
19
                + r'\_' * 32 + '\n\n'
20
                + '\n'.join(
21
                    f"- `{word_capitalize(key)}` **x{val:,}**"
22
                    for key, val in self.drink_list.items()
23
                )
24
            )
25
        )
26
27
        await self.drink_list_message.edit(
28
            content='',
29
            embed=drink_list_embed
30
        )
31
32
    async def create(self, drink_name):
33
        drink_name = word_capitalize(drink_name)
34
35
        if drink_name in self.drink_list:
36
            raise DrinkAlreadyExists(drink_name)
37
38
        self.drink_list[drink_name] = 1
39
        await self.update()
40
41
    async def add(self, drink_name, n=1):
42
        drink_name = word_capitalize(drink_name)
43
44
        if drink_name not in self.drink_list:
45
            raise DrinkNotFound(drink_name)
46
47
        self.drink_list[drink_name] += n
48
        await self.update()
49
50
    async def remove(self, drink_name, n=1):
51
        drink_name = word_capitalize(drink_name)
52
53
        if drink_name not in self.drink_list:
54
            raise DrinkNotFound(drink_name)
55
56
        self.drink_list[drink_name] = max(self.drink_list[drink_name] - n, 0)
57
        await self.update()
58
59
    async def delete(self, drink_name):
60
        drink_name = word_capitalize(drink_name)
61
62
        if drink_name not in self.drink_list:
63
            raise DrinkNotFound(drink_name)
64
65
        self.drink_list.pop(drink_name)
66
        await self.update()
67
68
    def flatten(self):
69
        return '\n'.join(
70
            sorted(f'- `{d}`x `{v:,}`' for d, v in self.drink_list.items())
71
        )
72
73
74
def get_embed_description() -> str:
75
    with open('assets/drinklist_description.txt', encoding='utf-8') as f:
76
        return f.read()
77
78
79
def parse_from_message(content):
80
    lines = content.splitlines()
81
    skip = lines.index(r'\_' * 32)
82
83
    d = {}
84
    for line in lines[skip + 2:]:
85
        line_elements = line.split('`')
86
        d[word_capitalize(line_elements[1])] = get_int(line_elements[2])
0 ignored issues
show
Comprehensibility Best Practice introduced by
The variable word_capitalize does not seem to be defined.
Loading history...
87
88
    return d
89