def __init__(self): super().__init__() # lazy/conditional loading of needed modules import pyudev import queue DBG('Using pyudev {} and udev {}'.format( pyudev.__version__, pyudev.udev_version())) # create the udev context self.udev = pyudev.Context() # queue + timer to syncronize the udev thread self.queue = queue.Queue() # items: (action, device) self.qtimer = EmcTimer(3.0, self.queue_timer_cb) # start monitoring udev for events monitor = pyudev.Monitor.from_netlink(self.udev) monitor.filter_by(self.managed_subsystems) self.observer = pyudev.MonitorObserver(monitor, self.udev_device_filter) self.observer.start() # search for existing devices for udevice in self.udev.list_devices(subsystem=self.managed_subsystems): self.udev_device_filter('add', udevice, thread=False) self.queue_timer_cb()
def get_id_part_entry_name(dev): # NOTE(pbourke): Old versions of udev have trouble retrieving GPT partition # labels. In this case shell out to sgdisk. try: udev_version = pyudev.udev_version() except (ValueError, EnvironmentError, subprocess.CalledProcessError): udev_version = -1 if udev_version >= 180: dev_name = dev.get('ID_PART_ENTRY_NAME', '') else: part = re.sub(r'.*[^\d]', '', dev.device_node) parent = dev.find_parent('block').device_node # NOTE(Mech422): Need to use -i as -p truncates the partition name # TODO(pbourke): Consider some form of validation to be performed on # part/parent [0] out = subprocess.Popen(['/usr/sbin/sgdisk', '-i', part, # nosec [0] parent], stdout=subprocess.PIPE).communicate() match = re.search(r'Partition name: \'(\w+)\'', out[0]) if match: dev_name = match.group(1) else: dev_name = '' return dev_name
def is_enabled(self): """ Volumes extension is always enabled if available, return always True. """ assert ltrace(self._trace_name, '| is_enabled() → True') logging.info(_(u'{0}: started extension with pyudev v{2} ' u'on top of udev v{1}.').format(stylize(ST_NAME, self.name), stylize(ST_UGID, pyudev.udev_version()), stylize(ST_UGID, pyudev.__version__))) return True
def pytest_configure(config): # these are volatile, frequently changing properties and attributes, # which lead to bogus failures during tests, and therefore they are # masked and shall be ignored for test runs. config.properties_blacklist = frozenset( ['POWER_SUPPLY_CURRENT_NOW', 'POWER_SUPPLY_VOLTAGE_NOW', 'POWER_SUPPLY_CHARGE_NOW']) config.attributes_blacklist = frozenset( ['power_on_acct', 'temp1_input', 'charge_now', 'current_now', 'urbnum']) config.udev_database = _read_udev_database(config.properties_blacklist) config.udev_version = pyudev.udev_version()
def __init__(self): # log.debug('Creating ULOG context') log.debug(log.name) self.netdevices = dict() # ifindex => MyDevice self.udev_version = pyudev.udev_version() log.info('Working against udev version %d', self.udev_version) # TODO: time_since_initialized > 0? self.context = pyudev.Context() self._start_background_udev_monitoring() self._start_interrupt_monitoring() self.rescan_devices()
def __init__(self, PreCB=None, ATCB=None): self.pid = '' self.vid = '' self.product = '' self.com_online = False self.pre_cb = PreCB self.at_cb = ATCB print(' ---------- pyudev version: ' + str(pyudev.__version__) + ' ---------- ') print(' ---------- udev version: ' + str(pyudev.udev_version()) + ' ---------- ') context = pyudev.Context() monitor = pyudev.Monitor.from_netlink(context) self.observer = pyudev.MonitorObserver(monitor, self.event_cb)
def _sys_info(): import pyudev from nepymc import __version__ as emc_version try: from efl import __version__ as efl_version except ImportError: efl_version = _('Not found') try: from PySide2 import __version__ as pyside_version except ImportError: pyside_version = _('Not found') # win_w, win_h = gui.win.size # scr_x, scr_y, scr_w, scr_h = gui.win.screen_size # dpi_x, dpi_y = gui.win.screen_dpi text = '<h3>{}</h3>' \ '<b>{}:</b> {}<br>' \ '<h3>{}</h3>' \ '<b>{}:</b> {}<br>'\ '<b>{}:</b> {}<br>' \ '<b>{}:</b> {}' \ '<h3>{}</h3>' \ '<b>{}:</b> {}<br>' \ '<b>{}:</b> {}<br>' \ '<b>{}:</b> {} <b>{}:</b> {}<br>' \ '<b>{}:</b> {}<br>' \ '<b>{}:</b> {}<br>'.format( _('Core'), _('Theme'), ini.get('general', 'theme'), #gui.theme_file, # TODO # _('Window size'), win_w, win_h, # TODO # _('screen'), scr_w, scr_h, scr_x, scr_y, # TODO # _('dpi'), dpi_x, dpi_y, # TODO _('Paths'), _('Base folder'), utils.emc_base_dir, _('Config folder'), utils.user_conf_dir, _('Cache folder'), utils.user_cache_dir, _('Versions'), _('NepyMC'), emc_version, _('Python'), sys.version, _('Udev'), pyudev.udev_version(), _('pyudev'), pyudev.__version__, _('Python-EFL'), efl_version, _('PySide'), pyside_version, ) EmcDialog(style='panel', title=_('System info'), text=text)
def need_udev_version(version_spec): """ Decorator to check the udev version before a test is run. ``version_spec`` is a string containing a comparison operator and the right hand sight operand of this comparison, like ``'>= 165'``. The left hand side is automatically provided by the current udev version. If the udev version matches the spec, the test is run. Otherwise the test is skipped. """ expr_template = 'not ({0} {1})' actual_version = pyudev.udev_version() expr = expr_template.format(actual_version, version_spec) reason = 'udev version mismatch: {0} required, {1} found'.format( version_spec, actual_version) return pytest.mark.skipif(str(expr), reason=reason)
def _sys_info(): import pyudev from epymc.gui import _theme_generation from epymc import __version__ as emc_version try: from efl import __version__ as efl_version except: efl_version = _('Unknown') downl_avail = ecore.file_download_protocol_available('http://') win_w, win_h = gui.win.size scr_x, scr_y, scr_w, scr_h = gui.win.screen_size dpi_x, dpi_y = gui.win.screen_dpi text = '<title>%s</><br>' \ '<name>%s:</name> %s<br>' \ '<name>%s:</name> %s - %s<br>' \ '<name>%s:</> %dx%d <name>%s:</> %dx%d+%d+%d <name>%s:</> %d %d<br>' \ '<br><title>%s</><br>' \ '<name>%s:</name> %s<br>' \ '<name>%s:</name> %s<br>' \ '<name>%s:</name> %s<br>' \ '<br><title>%s</><br>' \ '<name>%s:</name> %s <name> %s:</name> %s<br>' \ '<name>%s:</name> %s<br>' \ '<name>%s:</name> %s<br>' \ '<name>%s:</name> %s <name> %s:</name> %s<br>' % ( _('Core'), _('Download available'), _('yes') if downl_avail else _('no'), _('Theme'), ini.get('general', 'theme'), gui.theme_file, _('Window size'), win_w, win_h, _('screen'), scr_w, scr_h, scr_x, scr_y, _('dpi'), dpi_x, dpi_y, _('Paths'), _('Base folder'), utils.emc_base_dir, _('Config folder'), utils.user_conf_dir, _('Cache folder'), utils.user_cache_dir, _('Versions'), _('EpyMC'), emc_version, _('EpyMC themes API'), _theme_generation, _('Python'), sys.version, _('Python-EFL'), efl_version, _('Udev'), pyudev.udev_version(), _('pyudev'), pyudev.__version__, ) EmcDialog(style='panel', title=_('System info'), text=text)
def __init__(self): DBG('Using pyudev {} and udev {}'.format( pyudev.__version__, pyudev.udev_version())) # create the udev context self.udev = pyudev.Context() # queue + timer to syncronize the udev thread self.queue = queue.Queue() # items: (action, device) self.qtimer = ecore.Timer(3.0, self.queue_timer_cb) # start monitoring udev for events monitor = pyudev.Monitor.from_netlink(self.udev) monitor.filter_by(self.managed_subsystems) self.observer = pyudev.MonitorObserver(monitor, self.udev_device_filter) self.observer.start() # search for existing devices for udevice in self.udev.list_devices(subsystem=self.managed_subsystems): self.udev_device_filter('add', udevice) self.queue_timer_cb()
def test_udev_version(): assert isinstance(udev_version(), int) # just to make sure, that udev versioning works. pyudev itself should be # compatible with earlier versions of pyudev. However, 150 is currently # the earliest udev release, I'm testing against (using Ubuntu 10.04) assert udev_version() > 150