Coverage for dibbler / models / User.py: 100%

18 statements  

« prev     ^ index     » next       coverage.py v7.13.0, created at 2025-12-12 13:57 +0000

1from __future__ import annotations 

2 

3from typing import Self 

4 

5from sqlalchemy import ( 

6 Integer, 

7 String, 

8) 

9from sqlalchemy.orm import ( 

10 Mapped, 

11 mapped_column, 

12) 

13 

14from .Base import Base 

15 

16 

17class User(Base): 

18 id: Mapped[int] = mapped_column(Integer, primary_key=True) 

19 """Internal database ID""" 

20 

21 name: Mapped[str] = mapped_column(String(20), unique=True) 

22 """The PVV username of the user.""" 

23 

24 card: Mapped[str | None] = mapped_column(String(20)) 

25 """The NTNU card number of the user.""" 

26 

27 rfid: Mapped[str | None] = mapped_column(String(20)) 

28 """The RFID tag of the user (if they have any, rare these days).""" 

29 

30 # name_re = r"[a-z]+" 

31 # card_re = r"(([Nn][Tt][Nn][Uu])?[0-9]+)?" 

32 # rfid_re = r"[0-9a-fA-F]*" 

33 

34 def __init__(self: Self, name: str, card: str | None = None, rfid: str | None = None) -> None: 

35 self.name = name 

36 self.card = card 

37 self.rfid = rfid 

38 

39 # def __str__(self): 

40 # return self.name 

41 

42 # def is_anonymous(self): 

43 # return self.card == "11122233"