]>
gitweb.pimeys.fr Git - bots/parrot.git/blob - quotes.py
73f711c08b5dc6de3143f4d84802f24ad403c27e
2 # -*- encoding: utf-8 -*-
4 """ Gestion des quotes """
15 """ Renvoie la date actuelle """
16 return datetime
.datetime(*time
.localtime()[:6])
20 def __init__(self
, author
, content
, timestamp
=None):
23 elif isinstance(timestamp
, basestring
):
24 timestamp
= datetime
.datetime(*time
.strptime(timestamp
, u
"%Y-%m-%d_%H:%M:%S")[:6])
26 self
.content
= content
27 self
.timestamp
= timestamp
30 d
= {"author" : self
.author
, "content" : self
.content
,
31 "timestamp" : self
.timestamp
.strftime(u
"%F_%T")}
34 def __unicode__(self
):
35 """ Retourne la quote affichable """
36 return config
.quote_template
% self
.__dict
__
38 return unicode(self
).encode("utf-8")
40 def __eq__(self
, otherquote
):
41 """ Vérifie si cette phrase n'a pas déjà été dite par la même personne.
42 Indépendamment de la date. """
43 return [self
.author
, self
.content
] == [otherquote
.author
, otherquote
.content
]
45 quote_matcher
= re
.compile(config
.quote_regexp
)
47 def parse(text
, date
=None):
48 """ Parse le ``text`` et renvoie une quote ou None. """
51 get
= quote_matcher
.match(text
)
54 return Quote(d
["author"], d
["content"], date
)
56 def load_file(filename
):
57 """ Récupère les quotes depuis le fichier """
58 with
open(filename
) as f
:
59 jsonquotes
= json
.load(f
)
60 quotes
= [Quote(**q
) for q
in jsonquotes
]
63 def save_file(quotes
, filename
):
64 """ Enregistre les quotes dans le fichier """
65 with
open(filename
, "w") as f
:
66 raws
= [q
.jsonize() for q
in quotes
]
69 class QuoteDB(object):
70 """ Stocke et distribue des quotes. """
75 """ Charge le fichier de quotes dans la DB """
76 self
.quotelist
= load_file(config
.quote_file
)
79 """ Sauvegarde la DB dans le fichier de quotes """
80 save_file(self
.quotelist
, config
.quote_file
)
82 def store(self
, author
, content
, timestamp
=None):
83 """ Enregistre une nouvelle quote, sauf si elle existe déjà.
84 Renvoie ``True`` si elle a été ajoutée, ``False`` si elle existait. """
85 newquote
= Quote(author
, content
, timestamp
)
86 if not newquote
in self
.quotelist
:
87 self
.quotelist
.append(newquote
)
92 return repr(self
.quotelist
)
95 """ Sort une quote aléatoire """
96 return random
.choice(self
.quotelist
)
97 def randomfrom(self
, author
):
98 """ Sort une quote aléatoire de ``author`` """
99 return random
.choice([q
for q
in self
.quotelist
if q
.author
== author
])