Added peewee_test.py in order to try and tinker with the PeeWee ORM

This commit is contained in:
Cacahuete Lenovo Ubuntu 2018-10-04 00:27:59 +02:00
parent 36ea6a2963
commit 433c35b5b1

99
peewee_test.py Normal file
View file

@ -0,0 +1,99 @@
from peewee import *
db = SqliteDatabase(':memory:')
class BaseModel(Model):
class Meta:
database = db
class Schedule(BaseModel):
name = TextField()
description = TextField(null=True)
priority = IntegerField(default=0)
def add_step(self, s_time, s_target, s_comment=None):
Step(time=s_time,
target=s_target,
comment=s_comment,
schedule=self,
).save()
class Step(BaseModel):
time = TimeField()
target = FloatField()
comment = TextField(null=True)
schedule = ForeignKeyField(Schedule, backref='steps')
class Event(BaseModel):
name = TextField()
description = TextField(null=True)
start_date = DateField()
stop_date = DateField(null=True)
_repeat = SmallIntegerField()
schedule = ForeignKeyField(Schedule, backref='events')
@property
def repeat(self):
bit_list = []
r = self._repeat
for _ in range(7):
r, m = divmod(r, 2)
bit_list.append(True if m else False)
return bit_list
@repeat.setter
def repeat(self, bit_list):
if len(bit_list) != 7:
raise ValueError(f"Given list is of length {len(bit_list)} "
f"instead of 7")
reduced = 0
for i, b in enumerate(bit_list):
reduced += (1 if b else 0) * 2**i
self._repeat = reduced
self.save()
if __name__ == "__main__":
from datetime import datetime, date, time, timedelta
db.create_tables([Schedule, Step, Event])
s1 = Schedule(name='semaine', description='Les jours de semaine')
s1.save()
[s1.add_step(hr, 18.5) for hr in [time(i) for i in range(10)]]
s2 = Schedule(name='weekend', description='Les jours de weekend')
s2.save()
[s2.add_step(hr, 20.0) for hr in [time(i) for i in range(14)]]
schedules = Schedule.select()
for schedule in schedules:
print(f"Schedule '{schedule.name}' has {len(schedule.steps)} step(s).")
schedules[0].steps[0].target = 22.0
schedules[0].steps[0].save()
Event(name='test event',
start_date=datetime.now(),
schedule=s1,
_repeat=127,
).save()
Event(name='test event 2',
start_date=datetime.now(),
stop_date=datetime.now()+timedelta(days=2),
schedule=s2,
_repeat=1,
).save()
events = Event.select()
for event in events:
str_stop = ""
if event.stop_date:
str_stop = f", stops it on {event.stop_date}"
print(f"Event '{event.name}' starts schedule '{event.schedule.name}'",
f"on {event.start_date}{str_stop}")