1
0
Fork 0

hardware: new submodule for hardware enumeration and watching

This commit is contained in:
Jan Vcelak 2012-12-06 18:37:45 +01:00
parent 0f912ede9f
commit 31b0128bbc
2 changed files with 49 additions and 0 deletions

View file

@ -0,0 +1 @@
from enumerator import *

View file

@ -0,0 +1,48 @@
import pyudev
import re
__all__ = ["Enumerator"]
class Enumerator(object):
"""
Class for system devices enumeration.
"""
def __init__(self):
self._context = pyudev.Context()
def _device_fulfills_requirements(self, device, requirements):
for attribute, requirement in requirements.items():
if hasattr(device, attribute):
value = getattr(device, attribute)
if requirement is None:
pass
elif isinstance(requirement, str):
if value != requirement:
return False
elif isinstance(requirement, re._pattern_type):
if requirement.match(value) is None:
return False
else:
raise TypeError("Invalid type of a requirement for a device.")
else:
# custom callbacks with non-existing attributes
if callable(requirement):
if not requirement(device):
return False
else:
return False
else:
return True
def get_devices(self, **requirements):
subsystem = requirements.get("subsystem", None)
if subsystem is not None:
del requirements["subsystem"]
devices = self._context.list_devices(subsystem = subsystem)
return [dev for dev in devices if self._device_fulfills_requirements(dev, requirements)]