from __future__ import unicode_literals

class PolicyError(RuntimeError):
    def __init__(self, message, url):
        self.message = message
        self.url = url

    def __str__(self):
        return "{}: {}".format(self.message, self.url)


class RedirectLimitPolicy(object):
    def __init__(self, max_redirects):
        self.max_redirects = max_redirects
        self.redirects = 0

    def __call__(self, url):
        if self.redirects >= self.max_redirects:
            raise PolicyError('too many redirects', url)
        self.redirects += 1


class VersionCheckPolicy(object):
    def __init__(self, os_family, version_string):
        self.version_string = version_string
        self.os_family = os_family
        self.url_version_string = self._version_transform(version_string)

    def _version_transform(self, version):
        if self.os_family == 'centos':
            return version.replace('.', '_')
        return version

    def __call__(self, url):
        if self.os_family == 'centos':
            ver = self.url_version_string
            if ver not in url:
                message = 'version "{}" not found in url'.format(ver)
                raise PolicyError(message, url)

from __future__ import unicode_literals

class PolicyError(RuntimeError):
    def __init__(self, message, url):
        self.message = message
        self.url = url

    def __str__(self):
        return "{}: {}".format(self.message, self.url)


class RedirectLimitPolicy(object):
    def __init__(self, max_redirects):
        self.max_redirects = max_redirects
        self.redirects = 0

    def __call__(self, url):
        if self.redirects >= self.max_redirects:
            raise PolicyError('too many redirects', url)
        self.redirects += 1


class VersionCheckPolicy(object):
    def __init__(self, os_family, version_string):
        self.version_string = version_string
        self.os_family = os_family
        self.url_version_string = self._version_transform(version_string)

    def _version_transform(self, version):
        if self.os_family == 'centos':
            return version[:version.rindex('.')]
        return version

    def __call__(self, url):
        if self.os_family == 'centos':
            ver = self.url_version_string
            if ver not in url:
                message = 'version "{}" not found in url'.format(ver)
                raise PolicyError(message, url)

Check for the first part of the version string
Check for the first part of the version string

Older CentOS Linux images only used the xxxx part of the full xxxx.yy
version string from Atlas.

  from __future__ import unicode_literals
  
  class PolicyError(RuntimeError):
      def __init__(self, message, url):
          self.message = message
          self.url = url
  
      def __str__(self):
          return "{}: {}".format(self.message, self.url)
  
  
  class RedirectLimitPolicy(object):
      def __init__(self, max_redirects):
          self.max_redirects = max_redirects
          self.redirects = 0
  
      def __call__(self, url):
          if self.redirects >= self.max_redirects:
              raise PolicyError('too many redirects', url)
          self.redirects += 1
  
  
  class VersionCheckPolicy(object):
      def __init__(self, os_family, version_string):
          self.version_string = version_string
          self.os_family = os_family
          self.url_version_string = self._version_transform(version_string)
  
      def _version_transform(self, version):
          if self.os_family == 'centos':
-             return version.replace('.', '_')
+             return version[:version.rindex('.')]
          return version
  
      def __call__(self, url):
          if self.os_family == 'centos':
              ver = self.url_version_string
              if ver not in url:
                  message = 'version "{}" not found in url'.format(ver)
                  raise PolicyError(message, url)
  
Check for the first part of the version string
## Code Before:
from __future__ import unicode_literals

class PolicyError(RuntimeError):
    def __init__(self, message, url):
        self.message = message
        self.url = url

    def __str__(self):
        return "{}: {}".format(self.message, self.url)


class RedirectLimitPolicy(object):
    def __init__(self, max_redirects):
        self.max_redirects = max_redirects
        self.redirects = 0

    def __call__(self, url):
        if self.redirects >= self.max_redirects:
            raise PolicyError('too many redirects', url)
        self.redirects += 1


class VersionCheckPolicy(object):
    def __init__(self, os_family, version_string):
        self.version_string = version_string
        self.os_family = os_family
        self.url_version_string = self._version_transform(version_string)

    def _version_transform(self, version):
        if self.os_family == 'centos':
            return version.replace('.', '_')
        return version

    def __call__(self, url):
        if self.os_family == 'centos':
            ver = self.url_version_string
            if ver not in url:
                message = 'version "{}" not found in url'.format(ver)
                raise PolicyError(message, url)

## Instruction:
Check for the first part of the version string
## Code After:
from __future__ import unicode_literals

class PolicyError(RuntimeError):
    def __init__(self, message, url):
        self.message = message
        self.url = url

    def __str__(self):
        return "{}: {}".format(self.message, self.url)


class RedirectLimitPolicy(object):
    def __init__(self, max_redirects):
        self.max_redirects = max_redirects
        self.redirects = 0

    def __call__(self, url):
        if self.redirects >= self.max_redirects:
            raise PolicyError('too many redirects', url)
        self.redirects += 1


class VersionCheckPolicy(object):
    def __init__(self, os_family, version_string):
        self.version_string = version_string
        self.os_family = os_family
        self.url_version_string = self._version_transform(version_string)

    def _version_transform(self, version):
        if self.os_family == 'centos':
            return version[:version.rindex('.')]
        return version

    def __call__(self, url):
        if self.os_family == 'centos':
            ver = self.url_version_string
            if ver not in url:
                message = 'version "{}" not found in url'.format(ver)
                raise PolicyError(message, url)
