class ProgramGroupBonus(Model): "Bonus time for a program group." COLUMNS = { "id": ColumnInteger(autoincrement=True, primary_key=True), "amount_minutes": ColumnInteger(null=False), "created": ColumnDatetime(null=False), "creator": ColumnText(null=False), "effective_date": ColumnDate(null=False), "message": ColumnText(null=False), "program_group": ColumnForeignKey(ProgramGroup), }
class ProgramGroup(Model): "A group of several programs tracked together." COLUMNS = { "id": ColumnInteger(autoincrement=True, primary_key=True), "name": ColumnText(null=False), "minutes_monday": ColumnInteger(null=False), "minutes_tuesday": ColumnInteger(null=False), "minutes_wednesday": ColumnInteger(null=False), "minutes_thursday": ColumnInteger(null=False), "minutes_friday": ColumnInteger(null=False), "minutes_saturday": ColumnInteger(null=False), "minutes_sunday": ColumnInteger(null=False), "minutes_weekly": ColumnInteger(null=False), "minutes_monthly": ColumnInteger(null=False), }
class ProgramProcess(Model): "A process that a program may run on a system." COLUMNS = { "id": ColumnInteger(autoincrement=True, primary_key=True), "name": ColumnText(null=False), "program": ColumnForeignKey(Program), }
class Program(Model): "A program that can run on a computer that we track." COLUMNS = { "id": ColumnInteger(autoincrement=True, primary_key=True), "name": ColumnText(null=False), "program_group": ColumnForeignKey(ProgramGroup), }
class WindowWeekDaySpanOverride(Model): "An override for a single day in a window week." COLUMNS = { "id": ColumnInteger(autoincrement=True, primary_key=True), "created": ColumnDatetime(null=False), "creator": ColumnText(null=False), "effective": ColumnDate(null=False), "message": ColumnText(null=False), }
class WebsiteVisit(Model): "A single visit to a website." COLUMNS = { "id": ColumnInteger(autoincrement=True, primary_key=True), "at": ColumnDatetime(null=False), "hostname": ColumnText(null=False), "incognito": ColumnBoolean(null=False), "url": ColumnText(null=False), "username": ColumnText(null=False), }
class OneTimeMessage(Model): "A message to send once to a given person." COLUMNS = { "id": ColumnInteger(autoincrement=True, primary_key=True), "content": ColumnText(null=False), "hostname": ColumnText(null=True), "created": ColumnDatetime(null=False), "sent": ColumnDatetime(null=True), "username": ColumnText(null=True), }
class WindowWeekDaySpan(Model): "A span of time for a day of a week window." COLUMNS = { "id": ColumnInteger(autoincrement=True, primary_key=True), "day": ColumnInteger(null=False), "end": ColumnDatetime(null=True), "start": ColumnDatetime(null=False), "window_name": ColumnText(null=False), } def minutes_left(self, moment: datetime.time) -> int: """Get the minutes left in the span for a moment. Returns: 0 if the current moment falls outside of the span, or the number of minutes left until the span ends if the current moment is inside the span. """ return max(span.minutes_left(moment) for span in self.spans) @property def value(self) -> str: return "{}-{}".format(self.start, self.end)
class ProgramSession(Model): "A session using a particular program." COLUMNS = { "id": ColumnInteger(autoincrement=True, primary_key=True), "hostname": ColumnText(null=False), "end": ColumnDatetime(null=True), "pids": ColumnText(null=False), "program": ColumnForeignKey(Program), "start": ColumnDatetime(null=False), "username": ColumnText(null=False), } @property def duration(self) -> Optional[datetime.timedelta]: "Get the duration of the session, if possible." if self.start and self.end: return self.end - self.start
class MyTable(Model): COLUMNS = { "id": ColumnInteger(autoincrement=True, primary_key=True), "count": ColumnInteger(), "name": ColumnText(null=True), }