Source code for versions.packages

import re

from .version import Version
from .errors import Error


class InvalidPackage(Error):
    """Raised when failing to parse a ``package``.
    """
    def __init__(self, package):
        #: The bogus package.
        self.package = package
        message = 'Invalid package: %r' % package
        super(InvalidPackage, self).__init__(message)


[docs]class Package(object): """A package. :param str name: Package name. :param version: Package version. :type version: :class:`Version` """ def __init__(self, name, version): #: Package name self.name = name #: Package version self.version = version def __hash__(self): return hash(self.name) ^ hash(self.version) @classmethod
[docs] def parse(cls, package_string): """Parses a ``package_string``. :param str package_string: Package string expression. :rtype: :class:`Package` """ parts = re.split('\s+', package_string, 1) if len(parts) != 2: raise InvalidPackage(package_string) name, version_str = parts version = Version.parse(version_str) return Package(name, version)