Skip to content

Commit

Permalink
Move filter_recent() functionality to the DeviceRepository
Browse files Browse the repository at this point in the history
Signed-off-by: Eduard Kaverinskyi <[email protected]>
  • Loading branch information
EduKav1813 committed Nov 12, 2024
1 parent 1c1cfdc commit ce1ef8e
Show file tree
Hide file tree
Showing 6 changed files with 23 additions and 32 deletions.
15 changes: 6 additions & 9 deletions whois/app.py
Original file line number Diff line number Diff line change
Expand Up @@ -154,9 +154,8 @@ def after_request(self, error):
def index(self):
"""Serve list of people in hs, show panel for logged users"""
self.logger.debug("Called '/'")
devices = self.device_repository.get_all()
recent = self.helpers.filter_recent(
timedelta(**self.app_settings.RECENT_TIME), devices
recent = self.device_repository.get_recent(
timedelta(**self.app_settings.RECENT_TIME)
)
visible_devices = self.helpers.filter_hidden(recent)
users = self.helpers.filter_hidden(
Expand All @@ -174,9 +173,8 @@ def index(self):
@login_required
def devices(self):
self.logger.debug("Called '/devices'")
devices = self.device_repository.get_all()
recent = self.helpers.filter_recent(
timedelta(**self.app_settings.RECENT_TIME), devices
recent = self.device_repository.get_recent(
timedelta(**self.app_settings.RECENT_TIME)
)
visible_devices = self.helpers.filter_hidden(recent)
users = self.helpers.filter_hidden(
Expand Down Expand Up @@ -209,9 +207,8 @@ def now_at_space(self):
if key in request.args:
period[key] = request.args.get(key, default=0, type=int)

devices = self.device_repository.get_all()
recent = self.helpers.filter_recent(
timedelta(**self.app_settings.RECENT_TIME), devices
recent = self.device_repository.get_recent(
timedelta(**self.app_settings.RECENT_TIME)
)
users = self.helpers.filter_hidden(self.helpers.owners_from_devices(recent))

Expand Down
13 changes: 13 additions & 0 deletions whois/data/repository/device_repository.py
Original file line number Diff line number Diff line change
Expand Up @@ -58,3 +58,16 @@ def get_by_user_id(self, user_id: int) -> List[Device]:
return list(map(devicetable_to_device_mapper, devices_orm))
else:
return list()

def get_recent(self, delta: timedelta) -> List[Device]:
with Session(self.database.engine) as session:
recent_time = datetime.now(timezone.utc) - delta
devices_orm = (
session.query(DeviceTable)
.filter(DeviceTable.last_seen > recent_time)
.all()
)
if len(devices_orm) > 0:
return list(map(devicetable_to_device_mapper, devices_orm))
else:
return list()
2 changes: 1 addition & 1 deletion whois/data/table/device.py
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ class DeviceTable(Base):

mac_address = Column(VARCHAR(17), primary_key=True, unique=True)
hostname = Column(String, nullable=True)
last_seen = IsoDateTimeField()
last_seen = Column(IsoDateTimeField)
owner = Column(Integer, ForeignKey("user.id"), nullable=True, name="user_id")
flags = Column(BitField, nullable=True)

Expand Down
8 changes: 0 additions & 8 deletions whois/data/type/iso_date_time_field.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,11 +5,3 @@

class IsoDateTimeField(types.TypeDecorator):
impl = types.DATETIME

def db_value(self, value: datetime) -> str:
if value:
return value.isoformat()

def python_value(self, value: str) -> datetime:
if value:
return datetime.fromisoformat(value)
6 changes: 3 additions & 3 deletions whois/entity/iso_date_time.py
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,6 @@ class IsoDateTimeField:
def db_value(self) -> str:
return self.value.isoformat()

# def python_value(self, value: str) -> datetime:
# if value:
# return datetime.fromisoformat(value)
@property
def python_value(self) -> datetime:
return datetime.fromisoformat(self.value)
11 changes: 0 additions & 11 deletions whois/helpers.py
Original file line number Diff line number Diff line change
Expand Up @@ -79,14 +79,3 @@ def func(*a, **kw):
return func

return decorator(f)

def filter_recent(self, delta: timedelta, devices: List[Device]):
"""
Returns list of last connected devices
:param hours:
:param minutes:
:param seconds:
:return: list of devices
"""
recent_time = datetime.now(timezone.utc) - delta
return list(filter(lambda device: device.recent_time > recent_time, devices))

0 comments on commit ce1ef8e

Please sign in to comment.