Hello community,

here is the log from the commit of package python3-pyudev for openSUSE:Factory 
checked in at 2016-06-02 09:38:01
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/python3-pyudev (Old)
 and      /work/SRC/openSUSE:Factory/.python3-pyudev.new (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "python3-pyudev"

Changes:
--------
--- /work/SRC/openSUSE:Factory/python3-pyudev/python3-pyudev.changes    
2016-02-08 09:48:35.000000000 +0100
+++ /work/SRC/openSUSE:Factory/.python3-pyudev.new/python3-pyudev.changes       
2016-06-02 09:38:02.000000000 +0200
@@ -1,0 +2,17 @@
+Mon May 16 15:38:01 UTC 2016 - [email protected]
+
+- update to version 0.20.0:
+  * Remove parsing code added in previous release.
+  * No longer do CI for Python 2.6.
+  * Eliminate all wildcard imports and __all__ statements.
+  * No longer use deprecated Device.from_sys_path() method.
+  * Minor pylint induced changes.
+  * Documentation fixes.
+
+-------------------------------------------------------------------
+Sun May  8 07:05:39 UTC 2016 - [email protected]
+
+- specfile:
+  * updated source url to files.pythonhosted.org
+
+-------------------------------------------------------------------

Old:
----
  pyudev-0.19.0.tar.gz

New:
----
  pyudev-0.20.0.tar.gz

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ python3-pyudev.spec ++++++
--- /var/tmp/diff_new_pack.OI6vNZ/_old  2016-06-02 09:38:03.000000000 +0200
+++ /var/tmp/diff_new_pack.OI6vNZ/_new  2016-06-02 09:38:03.000000000 +0200
@@ -17,13 +17,13 @@
 
 
 Name:           python3-pyudev
-Version:        0.19.0
+Version:        0.20.0
 Release:        0
 Summary:        Udev bindings for Python
 License:        LGPL-2.1+
 Group:          Development/Libraries/Python
 Url:            http://pyudev.readthedocs.org/
-Source0:        
https://pypi.python.org/packages/source/p/pyudev/pyudev-%{version}.tar.gz
+Source0:        
https://files.pythonhosted.org/packages/source/p/pyudev/pyudev-%{version}.tar.gz
 BuildRequires:  libudev-devel
 BuildRequires:  python3-Sphinx
 BuildRequires:  python3-devel

++++++ pyudev-0.19.0.tar.gz -> pyudev-0.20.0.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pyudev-0.19.0/CHANGES.rst 
new/pyudev-0.20.0/CHANGES.rst
--- old/pyudev-0.19.0/CHANGES.rst       2016-02-03 15:36:35.000000000 +0100
+++ new/pyudev-0.20.0/CHANGES.rst       2016-04-29 23:17:02.000000000 +0200
@@ -1,4 +1,14 @@
-0.19.0 (Feb 3, 2015)
+0.20.0 (April 29, 2016)
+=======================
+
+- Remove parsing code added in previous release.
+- No longer do CI for Python 2.6.
+- Eliminate all wildcard imports and __all__ statements.
+- No longer use deprecated Device.from_sys_path() method.
+- Minor pylint induced changes.
+- Documentation fixes.
+
+0.19.0 (Feb 3, 2016)
 ==================
 
 - Restore raising KeyError by Attributes.as* methods when attribute not found.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pyudev-0.19.0/PKG-INFO new/pyudev-0.20.0/PKG-INFO
--- old/pyudev-0.19.0/PKG-INFO  2016-02-03 15:39:22.000000000 +0100
+++ new/pyudev-0.20.0/PKG-INFO  2016-04-29 23:20:42.000000000 +0200
@@ -1,6 +1,6 @@
 Metadata-Version: 1.1
 Name: pyudev
-Version: 0.19.0
+Version: 0.20.0
 Summary: A libudev binding
 Home-page: http://pyudev.readthedocs.org/
 Author: Sebastian Wiesner
@@ -63,7 +63,7 @@
         
         The source code is hosted on GitHub_::
         
-           git clone git://github.com/lunaryorn/pyudev.git
+           git clone git://github.com/pyudev/pyudev.git
         
         Please fork the repository and send pull requests with your fixes or 
new
         features, but respect the following guidelines:
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pyudev-0.19.0/README.rst new/pyudev-0.20.0/README.rst
--- old/pyudev-0.19.0/README.rst        2016-02-02 17:19:29.000000000 +0100
+++ new/pyudev-0.20.0/README.rst        2016-04-29 23:17:02.000000000 +0200
@@ -55,7 +55,7 @@
 
 The source code is hosted on GitHub_::
 
-   git clone git://github.com/lunaryorn/pyudev.git
+   git clone git://github.com/pyudev/pyudev.git
 
 Please fork the repository and send pull requests with your fixes or new
 features, but respect the following guidelines:
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pyudev-0.19.0/doc/guide.rst 
new/pyudev-0.20.0/doc/guide.rst
--- old/pyudev-0.19.0/doc/guide.rst     2016-02-02 17:19:29.000000000 +0100
+++ new/pyudev-0.20.0/doc/guide.rst     2016-04-29 23:17:02.000000000 +0200
@@ -245,7 +245,7 @@
 >>> monitor.filter_by('block')
 >>> for device in iter(monitor.poll, None):
 ...     if 'ID_FS_TYPE' in device:
-...         print('{0} partition {1}'.format(action, 
device.get('ID_FS_LABEL')))
+...         print('{0} partition {1}'.format(device.action, 
device.get('ID_FS_LABEL')))
 ...
 add partition MULTIBOOT
 remove partition MULTIBOOT
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pyudev-0.19.0/src/pyudev/__init__.py 
new/pyudev-0.20.0/src/pyudev/__init__.py
--- old/pyudev-0.19.0/src/pyudev/__init__.py    2016-02-02 17:55:25.000000000 
+0100
+++ new/pyudev-0.20.0/src/pyudev/__init__.py    2016-04-29 23:17:02.000000000 
+0200
@@ -34,16 +34,36 @@
     .. moduleauthor::  Sebastian Wiesner  <[email protected]>
 """
 
-from __future__ import (print_function, division, unicode_literals,
-                        absolute_import)
+from __future__ import absolute_import
+from __future__ import division
+from __future__ import print_function
+from __future__ import unicode_literals
 
 
-__all__ = ['Context', 'Device']
+from pyudev.device import Attributes
+from pyudev.device import Device
+from pyudev.device import Devices
+from pyudev.device import DeviceNotFoundAtPathError
+from pyudev.device import DeviceNotFoundByFileError
+from pyudev.device import DeviceNotFoundByNameError
+from pyudev.device import DeviceNotFoundByNumberError
+from pyudev.device import DeviceNotFoundError
+from pyudev.device import DeviceNotFoundInEnvironmentError
+from pyudev.device import Tags
 
+from pyudev.discover import DeviceFileHypothesis
+from pyudev.discover import DeviceNameHypothesis
+from pyudev.discover import DeviceNumberHypothesis
+from pyudev.discover import DevicePathHypothesis
+from pyudev.discover import Discovery
+
+from pyudev.core import Context
+from pyudev.core import Enumerator
+
+from pyudev.monitor import Monitor
+from pyudev.monitor import MonitorObserver
 
-from pyudev.device import *
-from pyudev.discover import *
-from pyudev.core import *
-from pyudev.monitor import *
 from pyudev.version import __version__
 from pyudev.version import __version_info__
+
+from pyudev._util import udev_version
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/pyudev-0.19.0/src/pyudev/_ctypeslib/_errorcheckers.py 
new/pyudev-0.20.0/src/pyudev/_ctypeslib/_errorcheckers.py
--- old/pyudev-0.19.0/src/pyudev/_ctypeslib/_errorcheckers.py   2016-02-03 
15:36:35.000000000 +0100
+++ new/pyudev-0.20.0/src/pyudev/_ctypeslib/_errorcheckers.py   2016-04-29 
23:17:02.000000000 +0200
@@ -99,6 +99,7 @@
     raised.  Otherwise nothing happens.
 
     """
+    # pylint: disable=invalid-name
     if not result:
         errnum = get_errno()
         if errnum != 0:
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pyudev-0.19.0/src/pyudev/_ctypeslib/libudev.py 
new/pyudev-0.20.0/src/pyudev/_ctypeslib/libudev.py
--- old/pyudev-0.19.0/src/pyudev/_ctypeslib/libudev.py  2016-02-03 
15:36:35.000000000 +0100
+++ new/pyudev-0.20.0/src/pyudev/_ctypeslib/libudev.py  2016-04-29 
23:17:02.000000000 +0200
@@ -47,61 +47,64 @@
 from ._errorcheckers import check_negative_errorcode
 
 
-class udev(Structure):
+class udev(Structure): # pylint: disable=invalid-name
     """
     Dummy for ``udev`` structure.
     """
     # pylint: disable=too-few-public-methods
     pass
 
-udev_p = POINTER(udev)
+udev_p = POINTER(udev) # pylint: disable=invalid-name
 
 
-class udev_enumerate(Structure):
+class udev_enumerate(Structure): # pylint: disable=invalid-name
     """
     Dummy for ``udev_enumerate`` structure.
     """
     # pylint: disable=too-few-public-methods
+    pass
 
-udev_enumerate_p = POINTER(udev_enumerate)
+udev_enumerate_p = POINTER(udev_enumerate) # pylint: disable=invalid-name
 
 
-class udev_list_entry(Structure):
+class udev_list_entry(Structure): # pylint: disable=invalid-name
     """
     Dummy for ``udev_list_entry`` structure.
     """
     # pylint: disable=too-few-public-methods
+    pass
 
-udev_list_entry_p = POINTER(udev_list_entry)
+udev_list_entry_p = POINTER(udev_list_entry) # pylint: disable=invalid-name
 
 
-class udev_device(Structure):
+class udev_device(Structure): # pylint: disable=invalid-name
     """
     Dummy for ``udev_device`` structure.
     """
     # pylint: disable=too-few-public-methods
+    pass
 
-udev_device_p = POINTER(udev_device)
+udev_device_p = POINTER(udev_device) # pylint: disable=invalid-name
 
 
-class udev_monitor(Structure):
+class udev_monitor(Structure): # pylint: disable=invalid-name
     """
     Dummy for ``udev_device`` structure.
     """
     # pylint: disable=too-few-public-methods
 
-udev_monitor_p = POINTER(udev_monitor)
+udev_monitor_p = POINTER(udev_monitor) # pylint: disable=invalid-name
 
-class udev_hwdb(Structure):
+class udev_hwdb(Structure): # pylint: disable=invalid-name
     """
     Dummy for ``udev_hwdb`` structure.
     """
     # pylint: disable=too-few-public-methods
 
-udev_hwdb_p = POINTER(udev_hwdb)
+udev_hwdb_p = POINTER(udev_hwdb) # pylint: disable=invalid-name
 
 
-dev_t = c_ulonglong
+dev_t = c_ulonglong # pylint: disable=invalid-name
 
 
 SIGNATURES = {
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pyudev-0.19.0/src/pyudev/_parsing/__init__.py 
new/pyudev-0.20.0/src/pyudev/_parsing/__init__.py
--- old/pyudev-0.19.0/src/pyudev/_parsing/__init__.py   2016-02-03 
15:36:35.000000000 +0100
+++ new/pyudev-0.20.0/src/pyudev/_parsing/__init__.py   1970-01-01 
01:00:00.000000000 +0100
@@ -1,39 +0,0 @@
-# -*- coding: utf-8 -*-
-# Copyright (C) 2015 mulhern <[email protected]>
-
-# This library is free software; you can redistribute it and/or modify it
-# under the terms of the GNU Lesser General Public License as published by the
-# Free Software Foundation; either version 2.1 of the License, or (at your
-# option) any later version.
-
-# This library is distributed in the hope that it will be useful, but WITHOUT
-# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-# FITNESS FOR A PARTICULAR PURPOSE.  See the GNU Lesser General Public License
-# for more details.
-
-# You should have received a copy of the GNU Lesser General Public License
-# along with this library; if not, write to the Free Software Foundation,
-# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
-
-"""
-    pyudev._parsing
-    ===============
-
-    Parsing various fields extracted by pyudev.
-
-    .. moduleauthor::  mulhern  <[email protected]>
-"""
-
-__all__ = [
-   'Devlink',
-   'IdPathParse',
-   'IdPathParsers',
-   'PCIAddressParse'
-]
-
-from ._devlink import Devlink
-
-from ._id_path import IdPathParse
-from ._id_path import IdPathParsers
-
-from ._pci_address import PCIAddressParse
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pyudev-0.19.0/src/pyudev/_parsing/_devlink.py 
new/pyudev-0.20.0/src/pyudev/_parsing/_devlink.py
--- old/pyudev-0.19.0/src/pyudev/_parsing/_devlink.py   2016-02-03 
15:36:35.000000000 +0100
+++ new/pyudev-0.20.0/src/pyudev/_parsing/_devlink.py   1970-01-01 
01:00:00.000000000 +0100
@@ -1,101 +0,0 @@
-# -*- coding: utf-8 -*-
-# Copyright (C) 2015 Anne Mulhern <[email protected]>
-
-# This library is free software; you can redistribute it and/or modify it
-# under the terms of the GNU Lesser General Public License as published by the
-# Free Software Foundation; either version 2.1 of the License, or (at your
-# option) any later version.
-
-# This library is distributed in the hope that it will be useful, but WITHOUT
-# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-# FITNESS FOR A PARTICULAR PURPOSE.  See the GNU Lesser General Public License
-# for more details.
-
-# You should have received a copy of the GNU Lesser General Public License
-# along with this library; if not, write to the Free Software Foundation,
-# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
-
-
-"""
-    pyudev.device._devlink
-    ======================
-
-    Simple Devlink class.
-
-    .. moduleauthor::  mulhern <[email protected]>
-"""
-
-from __future__ import absolute_import
-from __future__ import division
-from __future__ import print_function
-from __future__ import unicode_literals
-
-import os
-
-
-class Devlink(object):
-    """
-    Represents a device link.
-    """
-
-    def __init__(self, path):
-        """
-        Initializer
-
-        :param str path: the full path of the device link
-        """
-        self._path = path
-
-    def __str__(self):
-        return self._path
-
-    @property
-    def path(self):
-        """
-        The full path of the device link.
-
-        :returns: the full path
-        :rtype: str
-        """
-        return self._path
-
-    @property
-    def has_category(self):
-        """
-        Whether this devlink has a category, like by-id, or by-path.
-
-        :returns: True if the devlink has a category, otherwise False.
-        :rtype: boolean
-
-        This is decided by taking apart the path and looking for the lack
-        of expected distinguishing features.
-        """
-        base = os.path.dirname(self._path)
-        if not os.path.basename(base).startswith("by-"):
-            return False
-
-        return os.path.dirname(os.path.dirname(base)) == "/dev"
-
-    @property
-    def value(self):
-        """
-        The value of the devlink, which is the basename of the path.
-
-        :returns: the basename, or None if this devlink has no category.
-        :rtype: str or NoneType
-        """
-        if not self.has_category:
-            return None
-        return os.path.basename(self._path)
-
-    @property
-    def category(self):
-        """
-        The category of this device link.
-
-        :returns: the category of the device link or None, if no category
-        :rtype: str or NoneType
-        """
-        if not self.has_category:
-            return None
-        return os.path.basename(os.path.dirname(self._path))
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pyudev-0.19.0/src/pyudev/_parsing/_id_path.py 
new/pyudev-0.20.0/src/pyudev/_parsing/_id_path.py
--- old/pyudev-0.19.0/src/pyudev/_parsing/_id_path.py   2016-02-03 
15:36:35.000000000 +0100
+++ new/pyudev-0.20.0/src/pyudev/_parsing/_id_path.py   1970-01-01 
01:00:00.000000000 +0100
@@ -1,171 +0,0 @@
-# -*- coding: utf-8 -*-
-# Copyright (C) 2015 mulhern <[email protected]>
-
-# This library is free software; you can redistribute it and/or modify it
-# under the terms of the GNU Lesser General Public License as published by the
-# Free Software Foundation; either version 2.1 of the License, or (at your
-# option) any later version.
-
-# This library is distributed in the hope that it will be useful, but WITHOUT
-# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-# FITNESS FOR A PARTICULAR PURPOSE.  See the GNU Lesser General Public License
-# for more details.
-
-# You should have received a copy of the GNU Lesser General Public License
-# along with this library; if not, write to the Free Software Foundation,
-# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
-
-
-"""
-    pyudev._parsing._id_path
-    ========================
-
-    Parsing the ID_PATH udev property.
-
-    .. moduleauthor::  mulhern <[email protected]>
-"""
-
-from __future__ import absolute_import
-from __future__ import division
-from __future__ import print_function
-
-from collections import defaultdict
-
-from ._shared import Field
-from ._shared import Parser
-
-
-class IdPathParsers(object):
-    """
-    Aggregate parsers.
-    """
-    # pylint: disable=too-few-public-methods
-
-    PARSERS = [
-       Parser(r'acpi-%s', [Field('sys_name')]),
-       Parser(r'ap-%s', [Field('sys_name')]),
-       Parser(r'ata-%s', [Field('port_no')]),
-       Parser(r'bcma-%s', [Field('core')]),
-       Parser(r'cciss-disk%s', [Field('disk')]),
-       Parser(r'ccw-%s', [Field('sys_name')]),
-       Parser(r'ccwgroup-%s', [Field('sys_name')]),
-       Parser(r'fc-%s-%s', [Field('port_name'), Field('lun')]),
-       Parser(
-          r'ip-%s:%s-iscsi-%s-%s',
-          [
-             Field('persistent_address'),
-             Field('persistent_port'),
-             Field('target_name'),
-             Field('lun')
-          ]
-       ),
-       Parser(r'iucv-%s', [Field('sys_name')]),
-       Parser(r'nst%s', [Field('name')]),
-       Parser(r'pci-%s', [Field('sys_name')]),
-       Parser(r'platform-%s', [Field('sys_name')]),
-       Parser(r'sas-%s-%s', [Field('sas_address'), Field('lun')]),
-       Parser(
-          r'sas-exp%s-phy%s-%s',
-          [
-             Field(
-                'sas_address',
-                r'.*',
-                'sysfs sas_address attribute of expander'
-             ),
-             Field(
-                'phy_identifier',
-                r'.*',
-                'sysfs phy_identifier attribute of target sas device'
-             ),
-             Field('lun', description='sysnum of device (0 if none)')
-          ]
-       ),
-       Parser(
-          r'sas-phy%s-%s',
-          [
-             Field(
-                'phy_identifier',
-                r'.*',
-                'sysfs phy_identifier attribute of target sas device'
-             ),
-             Field('lun', description='sysnum of device (0 if none)')
-          ]
-       ),
-       Parser(r'scm-%s', [Field('sys_name')]),
-       Parser(
-          r'scsi-%s:%s:%s:%s',
-          [
-             Field('host'),
-             Field('bus'),
-             Field('target'),
-             Field('lun')
-          ]
-       ),
-       Parser('serio-%s', [Field('sysnum')]),
-       Parser('st%s', [Field('name')]),
-       Parser('usb-0:%s', [Field('port')]),
-       Parser('vmbus-%s-%s', [Field('guid'), Field('lun')]),
-       Parser('xen-%s', [Field('sys_name')])
-    ]
-
-
-class IdPathParse(object):
-    """
-    Manage the parsing of an ID_PATH value.
-    """
-    # pylint: disable=too-few-public-methods
-
-    def __init__(self, parsers):
-        """
-        Initializer.
-
-        :param parsers: parser objects to parse with
-        :type parsers: list of Parser
-        """
-        self.parsers = parsers
-
-        self._table = defaultdict(list)
-        for parser in self.parsers:
-            self._table[parser.prefix].append(parser)
-
-        self._keys = self._table.keys()
-
-    def _parse_one(self, value):
-        """
-        Parse the first part of the value.
-
-        :param str value: the value to parse
-        :returns: the result of parsing, may be several matches
-        :rtype: list of parser * match pairs
-        """
-        keys = (key for key in self._keys if value.startswith(key))
-        parsers = (p for key in keys for p in self._table[key])
-        matches = ((p, p.regexp.match(value)) for p in parsers)
-        return [(p, m) for (p, m) in matches if m is not None]
-
-    def parse(self, value):
-        """
-        Parse the value.
-
-        :param str value: the value to parse
-        :returns: the result of parsing
-        :rtype: list of list of parser * match pairs
-
-        Returns the empty list if parsing fails.
-
-        If multiple matches, picks the match with the longest matching prefix.
-
-        There should not ever be a tie, because, if there are two equally
-        long matching prefixes, only one can match.
-        """
-        match_list = []
-        while value != '':
-            matches = self._parse_one(value)
-            if matches == []:
-                return []
-
-            (parser, best_match) = max(matches, key=lambda x: len(x[0].prefix))
-            match_list.append((parser, best_match))
-            value = value[len(best_match.group('total')):]
-
-        return match_list
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pyudev-0.19.0/src/pyudev/_parsing/_pci_address.py 
new/pyudev-0.20.0/src/pyudev/_parsing/_pci_address.py
--- old/pyudev-0.19.0/src/pyudev/_parsing/_pci_address.py       2016-02-03 
15:36:35.000000000 +0100
+++ new/pyudev-0.20.0/src/pyudev/_parsing/_pci_address.py       1970-01-01 
01:00:00.000000000 +0100
@@ -1,60 +0,0 @@
-# -*- coding: utf-8 -*-
-# Copyright (C) 2016 mulhern <[email protected]>
-
-# This library is free software; you can redistribute it and/or modify it
-# under the terms of the GNU Lesser General Public License as published by the
-# Free Software Foundation; either version 2.1 of the License, or (at your
-# option) any later version.
-
-# This library is distributed in the hope that it will be useful, but WITHOUT
-# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-# FITNESS FOR A PARTICULAR PURPOSE.  See the GNU Lesser General Public License
-# for more details.
-
-# You should have received a copy of the GNU Lesser General Public License
-# along with this library; if not, write to the Free Software Foundation,
-# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
-
-
-"""
-    pyudev._parsing._pci_address
-    ============================
-
-    Parsing a PCI address.
-
-    .. moduleauthor::  mulhern <[email protected]>
-"""
-
-from __future__ import absolute_import
-from __future__ import division
-from __future__ import print_function
-
-from ._shared import Field
-from ._shared import Parser
-
-
-class PCIAddressParse(object):
-    """
-    Parse a pci address.
-    """
-    # pylint: disable=too-few-public-methods
-
-    _PARSER = Parser(
-       r'%s:%s:%s\.%s',
-       [
-          Field('domain', description='range 256'),
-          Field('bus', description='range 256'),
-          Field('device', description='range 32'),
-          Field('function', description='range 8')
-       ]
-    )
-
-    def parse(self, value):
-        """
-        Parse the value.
-
-        :param str value: the value to parse
-        :returns: the result of parsing
-        :rtype: Parser * (Match or NoneType)
-        """
-        return (self._PARSER, self._PARSER.regexp.match(value))
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pyudev-0.19.0/src/pyudev/_parsing/_shared.py 
new/pyudev-0.20.0/src/pyudev/_parsing/_shared.py
--- old/pyudev-0.19.0/src/pyudev/_parsing/_shared.py    2016-02-03 
15:36:35.000000000 +0100
+++ new/pyudev-0.20.0/src/pyudev/_parsing/_shared.py    1970-01-01 
01:00:00.000000000 +0100
@@ -1,118 +0,0 @@
-# -*- coding: utf-8 -*-
-# Copyright (C) 2016 mulhern <[email protected]>
-
-# This library is free software; you can redistribute it and/or modify it
-# under the terms of the GNU Lesser General Public License as published by the
-# Free Software Foundation; either version 2.1 of the License, or (at your
-# option) any later version.
-
-# This library is distributed in the hope that it will be useful, but WITHOUT
-# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-# FITNESS FOR A PARTICULAR PURPOSE.  See the GNU Lesser General Public License
-# for more details.
-
-# You should have received a copy of the GNU Lesser General Public License
-# along with this library; if not, write to the Free Software Foundation,
-# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
-
-
-"""
-    pyudev._parsing._shared
-    =======================
-
-    Some classes that parsers share.
-
-    .. moduleauthor::  mulhern <[email protected]>
-"""
-
-from __future__ import absolute_import
-from __future__ import division
-from __future__ import print_function
-
-import re
-
-
-class Parser(object):
-    """
-    A parser for udev ID_PATH values.
-    """
-
-    def __init__(self, format_string, fields):
-        """
-        Initializer.
-
-        :param str format_string: string used to format this id by udev
-        :param fields: list of fields that fill the string
-
-        ``format_string`` must content itself with basic C-style format
-        codes, beginning with '%' as '%s', '%d'.
-        """
-        self.format_string = '%s' % format_string
-        self.fields = fields
-        self._prefix = self.format_string.split('%', 1)[0]
-
-        substitution_list = [
-           ('(?P<%s>%s)' % (f.name, f.regexp)) for f in self.fields
-        ]
-        regexp = self.format_string % tuple(substitution_list)
-        self._regexp = re.compile('(?P<total>%s)' % regexp)
-
-    @property
-    def regexp(self):
-        """
-        The regular expression that should match this value.
-
-        :returns: the regular expression that should match this value
-        :rtype: compiled regular expression
-
-        The regular expression uses ?P<name> syntax.
-
-        If there is a match, match.groups('total') matches the entire matched
-        string.
-        """
-        return self._regexp
-
-    @property
-    def prefix(self):
-        """
-        A partially distinguishing prefix.
-
-        Some parsers may use the same prefix.
-
-        :returns: a prefix that distinguishes the parser from other parsers
-        """
-        return self._prefix
-
-    @property
-    def keys(self):
-        """
-        Keys within the regular expression.
-
-        :returns: a list of the keys useful for finding portions of a match
-        :rtype: list of str
-        """
-        return [f.name for f in self.fields]
-
-
-class Field(object):
-    """
-    A field in an id_path.
-    """
-    # pylint: disable=too-few-public-methods
-
-    def __init__(self, name, regexp=r'.*', description=None):
-        """
-        Initializer.
-
-        :param str name: the name of the field
-        :param str regexp: regular expression to match the field
-
-        The best choice of regular expression may generally define a language
-        that is a superset of the actual language of the field.
-        Since the containing regular expression will constrain matches, the
-        regular expression does not need to be the most precise.
-        In general, '.*' may be good enough.
-        """
-        self.name = name
-        self.regexp = regexp
-        self.description = description
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pyudev-0.19.0/src/pyudev/_qt_base.py 
new/pyudev-0.20.0/src/pyudev/_qt_base.py
--- old/pyudev-0.19.0/src/pyudev/_qt_base.py    2016-02-03 15:36:35.000000000 
+0100
+++ new/pyudev-0.20.0/src/pyudev/_qt_base.py    2016-04-29 23:17:02.000000000 
+0200
@@ -32,7 +32,7 @@
 
 import six
 
-from pyudev.core import Device
+from pyudev.device import Device
 
 class MonitorObserverMixin(object):
     """
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pyudev-0.19.0/src/pyudev/_util.py 
new/pyudev-0.20.0/src/pyudev/_util.py
--- old/pyudev-0.19.0/src/pyudev/_util.py       2016-02-03 15:36:35.000000000 
+0100
+++ new/pyudev-0.20.0/src/pyudev/_util.py       2016-04-29 23:17:02.000000000 
+0200
@@ -117,11 +117,6 @@
         entry = libudev.udev_list_entry_get_next(entry)
 
 
-# for the sake of readability
-_is_char_device = stat.S_ISCHR
-_is_block_device = stat.S_ISBLK
-
-
 def get_device_type(filename):
     """
     Get the device type of a device file.
@@ -137,9 +132,9 @@
     .. versionadded:: 0.15
     """
     mode = os.stat(filename).st_mode
-    if _is_char_device(mode):
+    if stat.S_ISCHR(mode):
         return 'char'
-    elif _is_block_device(mode):
+    elif stat.S_ISBLK(mode):
         return 'block'
     else:
         raise ValueError('not a device file: {0!r}'.format(filename))
@@ -166,13 +161,13 @@
     while True:
         try:
             return func(*args, **kwargs)
-        except (OSError, IOError, select.error) as e:
+        except (OSError, IOError, select.error) as err:
             # If this is not an IOError or OSError, it's the old select.error
             # type, which means that the errno is only accessible via subscript
-            if isinstance(e, (OSError, IOError)):
-                error_code = e.errno
+            if isinstance(err, (OSError, IOError)):
+                error_code = err.errno
             else:
-                error_code = e.args[0]
+                error_code = err.args[0]
 
             if error_code == errno.EINTR:
                 continue
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pyudev-0.19.0/src/pyudev/core.py 
new/pyudev-0.20.0/src/pyudev/core.py
--- old/pyudev-0.19.0/src/pyudev/core.py        2016-02-03 15:36:35.000000000 
+0100
+++ new/pyudev-0.20.0/src/pyudev/core.py        2016-04-29 23:17:02.000000000 
+0200
@@ -29,7 +29,7 @@
 from __future__ import (print_function, division, unicode_literals,
                         absolute_import)
 
-from pyudev.device import Device
+from pyudev.device import Devices
 from pyudev.device._errors import DeviceNotFoundAtPathError
 from pyudev._ctypeslib.libudev import load_udev_library
 
@@ -37,9 +37,6 @@
 from pyudev._util import ensure_unicode_string
 from pyudev._util import property_value_to_bytes
 from pyudev._util import udev_list_iterate
-from pyudev._util import udev_version
-
-__all__ = ['udev_version', 'Context', 'Enumerator']
 
 
 class Context(object):
@@ -391,6 +388,6 @@
         entry = self._libudev.udev_enumerate_get_list_entry(self)
         for name, _ in udev_list_iterate(self._libudev, entry):
             try:
-                yield Device.from_sys_path(self.context, name)
+                yield Devices.from_sys_path(self.context, name)
             except DeviceNotFoundAtPathError:
                 continue
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pyudev-0.19.0/src/pyudev/device/__init__.py 
new/pyudev-0.20.0/src/pyudev/device/__init__.py
--- old/pyudev-0.19.0/src/pyudev/device/__init__.py     2016-02-02 
17:19:29.000000000 +0100
+++ new/pyudev-0.20.0/src/pyudev/device/__init__.py     2016-04-29 
23:17:02.000000000 +0200
@@ -24,18 +24,6 @@
     .. moduleauthor::  Sebastian Wiesner  <[email protected]>
 """
 
-__all__ = [
-  'Attributes',
-  'Device',
-  'Devices',
-  'DeviceNotFoundAtPathError',
-  'DeviceNotFoundByFileError',
-  'DeviceNotFoundByNameError',
-  'DeviceNotFoundByNumberError',
-  'DeviceNotFoundError',
-  'DeviceNotFoundInEnvironmentError',
-  'Tags'
-]
 
 from ._device import Attributes
 from ._device import Device
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pyudev-0.19.0/src/pyudev/discover.py 
new/pyudev-0.20.0/src/pyudev/discover.py
--- old/pyudev-0.19.0/src/pyudev/discover.py    2016-02-02 17:19:29.000000000 
+0100
+++ new/pyudev-0.20.0/src/pyudev/discover.py    2016-04-29 23:17:02.000000000 
+0200
@@ -39,13 +39,6 @@
 from pyudev.device import Devices
 from pyudev.device import DeviceNotFoundError
 
-__all__ = [
-   "DeviceFileHypothesis",
-   "DeviceNameHypothesis",
-   "DeviceNumberHypothesis",
-   "DevicePathHypothesis",
-   "Discovery"
-]
 
 def wrap_exception(func):
     """
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pyudev-0.19.0/src/pyudev/glib.py 
new/pyudev-0.20.0/src/pyudev/glib.py
--- old/pyudev-0.19.0/src/pyudev/glib.py        2016-02-02 17:19:29.000000000 
+0100
+++ new/pyudev-0.20.0/src/pyudev/glib.py        2016-04-29 23:17:02.000000000 
+0200
@@ -45,8 +45,10 @@
 
 class _ObserverMixin(object):
     """Mixin to provide observer behavior to the old and the new API."""
+    # pylint: disable=too-few-public-methods
 
     def _setup_observer(self, monitor):
+        # pylint: disable=attribute-defined-outside-init
         self.monitor = monitor
         self.event_source = None
         self.enabled = True
@@ -66,12 +68,14 @@
     @enabled.setter
     def enabled(self, value):
         if value and self.event_source is None:
+            # pylint: disable=attribute-defined-outside-init
             self.event_source = glib.io_add_watch(
                 self.monitor, glib.IO_IN, self._process_udev_event)
         elif not value and self.event_source is not None:
             glib.source_remove(self.event_source)
 
     def _process_udev_event(self, source, condition):
+        # pylint: disable=unused-argument
         if condition == glib.IO_IN:
             device = self.monitor.poll(timeout=0)
             if device:
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pyudev-0.19.0/src/pyudev/monitor.py 
new/pyudev-0.20.0/src/pyudev/monitor.py
--- old/pyudev-0.19.0/src/pyudev/monitor.py     2016-02-03 15:36:35.000000000 
+0100
+++ new/pyudev-0.20.0/src/pyudev/monitor.py     2016-04-29 23:17:02.000000000 
+0200
@@ -34,17 +34,15 @@
 from threading import Thread
 from functools import partial
 
+from pyudev.device import Device
+
 from pyudev._util import eintr_retry_call
 from pyudev._util import ensure_byte_string
-from pyudev.core import Device
 
 from pyudev._os import pipe
 from pyudev._os import poll
 
 
-__all__ = ['Monitor', 'MonitorObserver']
-
-
 class Monitor(object):
     """
     A synchronous device event monitor.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pyudev-0.19.0/src/pyudev/version.py 
new/pyudev-0.20.0/src/pyudev/version.py
--- old/pyudev-0.19.0/src/pyudev/version.py     2016-02-03 15:36:35.000000000 
+0100
+++ new/pyudev-0.20.0/src/pyudev/version.py     2016-04-29 23:17:02.000000000 
+0200
@@ -25,7 +25,7 @@
     .. moduleauthor::  mulhern  <[email protected]>
 """
 
-__version_info__ = (0, 19, 0, '')
+__version_info__ = (0, 20, 0, '')
 __version__ = "%s%s" % \
    (
       ".".join(str(x) for x in __version_info__[:3]),
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pyudev-0.19.0/src/pyudev.egg-info/PKG-INFO 
new/pyudev-0.20.0/src/pyudev.egg-info/PKG-INFO
--- old/pyudev-0.19.0/src/pyudev.egg-info/PKG-INFO      2016-02-03 
15:38:59.000000000 +0100
+++ new/pyudev-0.20.0/src/pyudev.egg-info/PKG-INFO      2016-04-29 
23:20:35.000000000 +0200
@@ -1,6 +1,6 @@
 Metadata-Version: 1.1
 Name: pyudev
-Version: 0.19.0
+Version: 0.20.0
 Summary: A libudev binding
 Home-page: http://pyudev.readthedocs.org/
 Author: Sebastian Wiesner
@@ -63,7 +63,7 @@
         
         The source code is hosted on GitHub_::
         
-           git clone git://github.com/lunaryorn/pyudev.git
+           git clone git://github.com/pyudev/pyudev.git
         
         Please fork the repository and send pull requests with your fixes or 
new
         features, but respect the following guidelines:
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pyudev-0.19.0/src/pyudev.egg-info/SOURCES.txt 
new/pyudev-0.20.0/src/pyudev.egg-info/SOURCES.txt
--- old/pyudev-0.19.0/src/pyudev.egg-info/SOURCES.txt   2016-02-03 
15:38:59.000000000 +0100
+++ new/pyudev-0.20.0/src/pyudev.egg-info/SOURCES.txt   2016-04-29 
23:20:36.000000000 +0200
@@ -60,11 +60,6 @@
 src/pyudev/_os/__init__.py
 src/pyudev/_os/pipe.py
 src/pyudev/_os/poll.py
-src/pyudev/_parsing/__init__.py
-src/pyudev/_parsing/_devlink.py
-src/pyudev/_parsing/_id_path.py
-src/pyudev/_parsing/_pci_address.py
-src/pyudev/_parsing/_shared.py
 src/pyudev/device/__init__.py
 src/pyudev/device/_device.py
 src/pyudev/device/_errors.py
@@ -79,7 +74,6 @@
 tests/test_monitor.py
 tests/test_observer.py
 tests/test_observer_deprecated.py
-tests/test_parsing.py
 tests/test_pypi.py
 tests/test_util.py
 tests/_device_tests/__init__.py
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/pyudev-0.19.0/tests/_device_tests/_attributes_tests.py 
new/pyudev-0.20.0/tests/_device_tests/_attributes_tests.py
--- old/pyudev-0.19.0/tests/_device_tests/_attributes_tests.py  2016-02-03 
15:36:35.000000000 +0100
+++ new/pyudev-0.20.0/tests/_device_tests/_attributes_tests.py  2016-04-29 
23:17:02.000000000 +0200
@@ -55,6 +55,10 @@
     @given(_CONTEXT_STRATEGY, strategies.sampled_from(_DEVICE_DATA))
     @settings(max_examples=5)
     def test_getitem(self, a_context, device_datum):
+        """
+        Test that attribute value is the same as datum attribute value and
+        is instance of bytes.
+        """
         device = Device.from_path(a_context, device_datum.device_path)
         for key, value in non_volatile_attributes(device_datum.attributes):
             raw_value = value.encode(sys.getfilesystemencoding())
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pyudev-0.19.0/tests/_device_tests/_device_tests.py 
new/pyudev-0.20.0/tests/_device_tests/_device_tests.py
--- old/pyudev-0.19.0/tests/_device_tests/_device_tests.py      2016-02-03 
15:36:35.000000000 +0100
+++ new/pyudev-0.20.0/tests/_device_tests/_device_tests.py      2016-04-29 
23:17:02.000000000 +0200
@@ -32,7 +32,6 @@
 import gc
 from datetime import timedelta
 
-from hypothesis import assume
 from hypothesis import given
 from hypothesis import settings
 from hypothesis import strategies
@@ -382,14 +381,14 @@
     @settings(max_examples=5)
     def test_asint(self, a_context, device_datum):
         device = Devices.from_path(a_context, device_datum.device_path)
-        for property, value in device_datum.properties.items():
+        for prop, value in device_datum.properties.items():
             try:
                 value = int(value)
             except ValueError:
                 with pytest.raises(ValueError):
-                    device.asint(property)
+                    device.asint(prop)
             else:
-                assert device.asint(property) == value
+                assert device.asint(prop) == value
 
     @given(_CONTEXT_STRATEGY, strategies.sampled_from(_DEVICE_DATA))
     @settings(max_examples=5)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pyudev-0.19.0/tests/conftest.py 
new/pyudev-0.20.0/tests/conftest.py
--- old/pyudev-0.19.0/tests/conftest.py 2016-02-02 17:19:29.000000000 +0100
+++ new/pyudev-0.20.0/tests/conftest.py 2016-04-29 23:17:02.000000000 +0200
@@ -18,8 +18,6 @@
 from __future__ import (print_function, division, unicode_literals,
                         absolute_import)
 
-import os
-
 import pytest
 
 import pyudev
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pyudev-0.19.0/tests/plugins/fake_monitor.py 
new/pyudev-0.20.0/tests/plugins/fake_monitor.py
--- old/pyudev-0.19.0/tests/plugins/fake_monitor.py     2016-02-02 
17:19:29.000000000 +0100
+++ new/pyudev-0.20.0/tests/plugins/fake_monitor.py     2016-04-29 
23:17:02.000000000 +0200
@@ -34,7 +34,6 @@
 from __future__ import (print_function, division, unicode_literals,
                         absolute_import)
 
-import sys
 import os
 from select import select
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pyudev-0.19.0/tests/test_core.py 
new/pyudev-0.20.0/tests/test_core.py
--- old/pyudev-0.19.0/tests/test_core.py        2016-02-03 15:36:35.000000000 
+0100
+++ new/pyudev-0.20.0/tests/test_core.py        2016-04-29 23:17:02.000000000 
+0200
@@ -22,7 +22,6 @@
 import random
 import syslog
 
-import pytest
 import mock
 
 from pyudev import udev_version
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pyudev-0.19.0/tests/test_enumerate.py 
new/pyudev-0.20.0/tests/test_enumerate.py
--- old/pyudev-0.19.0/tests/test_enumerate.py   2016-02-03 15:36:35.000000000 
+0100
+++ new/pyudev-0.20.0/tests/test_enumerate.py   2016-04-29 23:17:02.000000000 
+0200
@@ -224,8 +224,8 @@
         """
         properties = ('DEVTYPE', 'ID_TYPE')
         devices = context.list_devices()
-        for property in properties:
-            devices.match_property(property, 'disk')
+        for prop in properties:
+            devices.match_property(prop, 'disk')
         for device in devices:
             assert (device.get('DEVTYPE') == 'disk' or
                     device.get('ID_TYPE') == 'disk')
@@ -233,8 +233,8 @@
     def test_combined_matches_of_different_types(self, context):
         properties = ('DEVTYPE', 'ID_TYPE')
         devices = context.list_devices().match_subsystem('input')
-        for property in properties:
-            devices.match_property(property, 'disk')
+        for prop in properties:
+            devices.match_property(prop, 'disk')
         devices = list(devices)
         assert not devices
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pyudev-0.19.0/tests/test_libudev.py 
new/pyudev-0.20.0/tests/test_libudev.py
--- old/pyudev-0.19.0/tests/test_libudev.py     2016-02-03 15:36:35.000000000 
+0100
+++ new/pyudev-0.20.0/tests/test_libudev.py     2016-04-29 23:17:02.000000000 
+0200
@@ -22,8 +22,6 @@
 import re
 import ctypes
 
-import pytest
-
 from pyudev import _ctypeslib
 
 from .utils import is_unicode_string
@@ -66,7 +64,7 @@
         else:
             if pattern.match(function.name):
                 return True
-    else:
+    else: # pylint: disable=useless-else-on-loop
         return False
 
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pyudev-0.19.0/tests/test_monitor.py 
new/pyudev-0.20.0/tests/test_monitor.py
--- old/pyudev-0.19.0/tests/test_monitor.py     2016-02-03 15:36:35.000000000 
+0100
+++ new/pyudev-0.20.0/tests/test_monitor.py     2016-04-29 23:17:02.000000000 
+0200
@@ -19,7 +19,6 @@
 from __future__ import (print_function, division, unicode_literals,
                         absolute_import)
 
-import errno
 from datetime import datetime, timedelta
 from contextlib import contextmanager
 from select import select
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pyudev-0.19.0/tests/test_parsing.py 
new/pyudev-0.20.0/tests/test_parsing.py
--- old/pyudev-0.19.0/tests/test_parsing.py     2016-02-03 15:36:35.000000000 
+0100
+++ new/pyudev-0.20.0/tests/test_parsing.py     1970-01-01 01:00:00.000000000 
+0100
@@ -1,143 +0,0 @@
-# -*- coding: utf-8 -*-
-# Copyright (C) 2015 Anne Mulhern <[email protected]>
-
-# This library is free software; you can redistribute it and/or modify it
-# under the terms of the GNU Lesser General Public License as published by the
-# Free Software Foundation; either version 2.1 of the License, or (at your
-# option) any later version.
-
-# This library is distributed in the hope that it will be useful, but WITHOUT
-# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-# FITNESS FOR A PARTICULAR PURPOSE.  See the GNU Lesser General Public License
-# for more details.
-
-# You should have received a copy of the GNU Lesser General Public License
-# along with this library; if not, write to the Free Software Foundation,
-# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
-
-"""
-    tests.test_parsing
-    ==================
-
-    Test parsing values that happen to be synthesized from other values
-    such that they need to be parsed.
-
-    .. moduleauthor:: mulhern <[email protected]>
-"""
-
-
-from __future__ import absolute_import
-from __future__ import division
-from __future__ import print_function
-from __future__ import unicode_literals
-
-from itertools import groupby
-
-import pyudev
-
-from pyudev import _parsing
-
-import pytest
-
-from hypothesis import given
-from hypothesis import settings
-from hypothesis import strategies
-
-_CONTEXT = pyudev.Context()
-_DEVICES = _CONTEXT.list_devices()
-
-
-class TestIDPATH(object):
-    """
-    Test parsing ID_PATH values.
-    """
-    # pylint: disable=too-few-public-methods
-
-    @given(
-       strategies.sampled_from(_DEVICES).filter(
-          lambda x: x.get('ID_PATH') is not None
-       )
-    )
-    def test_parsing(self, a_device):
-        """
-        Test that parsing is satisfactory on all examples.
-        """
-        id_path = a_device.get('ID_PATH')
-        parser = _parsing.IdPathParse(_parsing.IdPathParsers.PARSERS)
-        result = parser.parse(id_path)
-        assert isinstance(result, list) and result != []
-
-    _devices = [d for d in _DEVICES if d.get('ID_SAS_PATH') is not None]
-    @pytest.mark.skipif(
-       len(_devices) == 0,
-       reason="no devices with ID_SAS_PATH property"
-    )
-    @given(strategies.sampled_from(_devices))
-    @settings(min_satisfying_examples=1)
-    def test_parsing_sas_path(self, a_device):
-        """
-        Test that parsing is satisfactory on all examples.
-        """
-        id_path = a_device.get('ID_SAS_PATH')
-        parser = _parsing.IdPathParse(_parsing.IdPathParsers.PARSERS)
-        result = parser.parse(id_path)
-        assert isinstance(result, list) and result != []
-
-
-class TestDevlinks(object):
-    """
-    Test ``Devlinks`` methods.
-    """
-    # pylint: disable=too-few-public-methods
-
-    _devices = [d for d in _DEVICES if list(d.device_links)]
-    @pytest.mark.skipif(
-       len(_devices) == 0,
-       reason="no devices with device links"
-    )
-    @given(strategies.sampled_from(_devices))
-    @settings(max_examples=5, min_satisfying_examples=1)
-    def test_devlinks(self, a_device):
-        """
-        Verify that device links are in "by-.*" categories or no category.
-        """
-        device_links = (_parsing.Devlink(d) for d in a_device.device_links)
-
-        def sort_func(dl):
-            """
-            :returns: category of device link
-            :rtype: str
-            """
-            key = dl.category
-            return key if key is not None else ""
-
-        devlinks = sorted(device_links, key=sort_func)
-
-        categories = list(k for k, g in groupby(devlinks, sort_func))
-        assert all(c == "" or c.startswith("by-") for c in categories)
-
-        assert all((d.category is None and d.value is None) or \
-           (d.category is not None and d.value is not None) \
-           for d in devlinks)
-
-        assert all(d.path == str(d) for d in devlinks)
-
-
-class TestPCIAddress(object):
-    """
-    Test parsing a PCI address object.
-    """
-    # pylint: disable=too-few-public-methods
-
-    _devices = [d for d in _DEVICES if d.subsystem == 'pci']
-    @pytest.mark.skipif(
-       len(_devices) == 0,
-       reason="no devices with subsystem pci"
-    )
-    @given(strategies.sampled_from(_devices))
-    @settings(min_satisfying_examples=1)
-    def test_parsing_pci(self, a_device):
-        """
-        Test correct parsing of pci-addresses.
-        """
-        assert _parsing.PCIAddressParse().parse(a_device.sys_name) is not None
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pyudev-0.19.0/tests/test_util.py 
new/pyudev-0.20.0/tests/test_util.py
--- old/pyudev-0.19.0/tests/test_util.py        2016-02-03 15:36:35.000000000 
+0100
+++ new/pyudev-0.20.0/tests/test_util.py        2016-04-29 23:17:02.000000000 
+0200
@@ -19,7 +19,6 @@
                         absolute_import)
 
 import sys
-import errno
 
 import pytest
 from mock import Mock
@@ -123,9 +122,9 @@
     raise ValueError('from function')
 
 
-_char_devices = list(_CONTEXT.list_devices(subsystem="tty"))
[email protected](len(_char_devices) == 0, reason='no tty devices')
-@given(strategies.sampled_from(_char_devices))
+_CHAR_DEVICES = list(_CONTEXT.list_devices(subsystem="tty"))
[email protected](len(_CHAR_DEVICES) == 0, reason='no tty devices')
+@given(strategies.sampled_from(_CHAR_DEVICES))
 @settings(min_satisfying_examples=1, max_examples=5)
 def test_get_device_type_character_device(a_device):
     """
@@ -133,9 +132,9 @@
     """
     assert _util.get_device_type(a_device.device_node) == 'char'
 
-_block_devices = list(_CONTEXT.list_devices(subsystem="block"))
[email protected](len(_block_devices) == 0, reason='no block devices')
-@given(strategies.sampled_from(_block_devices))
+_BLOCK_DEVICES = list(_CONTEXT.list_devices(subsystem="block"))
[email protected](len(_BLOCK_DEVICES) == 0, reason='no block devices')
+@given(strategies.sampled_from(_BLOCK_DEVICES))
 @settings(min_satisfying_examples=1, max_examples=5)
 def test_get_device_type_block_device(a_device):
     """
@@ -167,6 +166,7 @@
     import os, signal, select
 
     def handle_alarm(signum, frame):
+        # pylint: disable=unused-argument
         pass
     orig_alarm = signal.getsignal(signal.SIGALRM)
 
@@ -181,7 +181,7 @@
 
         # Ensure that a signal raises EINTR on Python < 3.5
         if sys.version_info < (3, 5):
-            with pytest.raises(select.error) as e:
+            with pytest.raises(select.error):
                 signal.alarm(1)
                 select.select([], [], [fd], 2)
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pyudev-0.19.0/tests/utils/libudev.py 
new/pyudev-0.20.0/tests/utils/libudev.py
--- old/pyudev-0.19.0/tests/utils/libudev.py    2016-02-02 17:19:29.000000000 
+0100
+++ new/pyudev-0.20.0/tests/utils/libudev.py    2016-04-29 23:17:02.000000000 
+0200
@@ -123,25 +123,25 @@
         for symbol in self.tree.getroot():
             self._symbol_table[symbol.get('id')] = symbol
 
-    def _resolve_Function(self, symbol):
+    def _resolve_Function(self, symbol): # pylint: disable=invalid-name
         return_type = self._resolve_symbol(symbol.get('returns'))
         arguments = tuple(self._resolve_symbol(a.get('type'))
                           for a in symbol.findall('./Argument'))
         return Function(symbol.get('name'), arguments, return_type)
 
-    def _resolve_Struct(self, symbol):
+    def _resolve_Struct(self, symbol): # pylint: disable=invalid-name
         return Struct(symbol.get('name'))
 
-    def _resolve_FundamentalType(self, symbol):
+    def _resolve_FundamentalType(self, symbol): # pylint: disable=invalid-name
         return FundamentalType(symbol.get('name'))
 
-    def _resolve_CvQualifiedType(self, symbol):
+    def _resolve_CvQualifiedType(self, symbol): # pylint: disable=invalid-name
         return CvQualifiedType(self._resolve_symbol(symbol.get('type')))
 
-    def _resolve_PointerType(self, symbol):
+    def _resolve_PointerType(self, symbol): # pylint: disable=invalid-name
         return PointerType(self._resolve_symbol(symbol.get('type')))
 
-    def _resolve_Typedef(self, symbol):
+    def _resolve_Typedef(self, symbol): # pylint: disable=invalid-name
         return Typedef(self._resolve_symbol(symbol.get('type')))
 
     def _resolve_symbol(self, symbol):


Reply via email to