Added peewee_test.py in order to try and tinker with the PeeWee ORM
This commit is contained in:
parent
36ea6a2963
commit
433c35b5b1
99
peewee_test.py
Normal file
99
peewee_test.py
Normal 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}")
|
||||
Loading…
Reference in a new issue