| #!/usr/bin/python |
| # Copyright 2016 Google Inc. All Rights Reserved. |
| # |
| # Licensed under the Apache License, Version 2.0 (the "License"); |
| # you may not use this file except in compliance with the License. |
| # You may obtain a copy of the License at |
| # |
| # http://www.apache.org/licenses/LICENSE-2.0 |
| # |
| # Unless required by applicable law or agreed to in writing, software |
| # distributed under the License is distributed on an "AS IS" BASIS, |
| # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| # See the License for the specific language governing permissions and |
| # limitations under the License. |
| |
| """A module for resolving compatibility issues between Python 2 and Python 3.""" |
| |
| import logging |
| import subprocess |
| import sys |
| |
| if sys.version_info >= (3, 7): |
| import distro |
| else: |
| import platform as distro |
| |
| if 'freebsd' in sys.platform: |
| # Note: Do not use .version() method which is from either platform or distro. |
| # platform.version() and distro.version() return different values. |
| # platform.version() returns 'FreeBSD 11.2-RELEASE-p9.....'. |
| # distro.version() returns '11.2'. |
| distro_name = 'freebsd' |
| # distro_version is not used for FreeBSD later in this code. |
| distro_version = None |
| else: |
| distribution = distro.linux_distribution() |
| distro_name = distribution[0].lower() |
| distro_version = distribution[1].split('.')[0] |
| distro_utils = None |
| |
| if 'centos' in distro_name and distro_version == '6': |
| import google_compute_engine.distro_lib.el_6.utils as distro_utils |
| elif 'centos' in distro_name: |
| import google_compute_engine.distro_lib.el_7.utils as distro_utils |
| elif 'red hat enterprise linux' in distro_name and distro_version == '6': |
| import google_compute_engine.distro_lib.el_6.utils as distro_utils |
| elif 'red hat enterprise linux' in distro_name: |
| import google_compute_engine.distro_lib.el_7.utils as distro_utils |
| elif 'fedora' in distro_name: |
| import google_compute_engine.distro_lib.el_7.utils as distro_utils |
| elif 'debian' in distro_name: |
| import google_compute_engine.distro_lib.debian_9.utils as distro_utils |
| elif 'suse' in distro_name: |
| import google_compute_engine.distro_lib.sles_12.utils as distro_utils |
| elif 'freebsd' in distro_name: |
| import google_compute_engine.distro_lib.freebsd_11.utils as distro_utils |
| else: |
| # Default to Debian 9. |
| import google_compute_engine.distro_lib.debian_9.utils as distro_utils |
| |
| RETRY_LIMIT = 3 |
| TIMEOUT = 10 |
| |
| if sys.version_info >= (3, 0): |
| # Python 3 imports. |
| import configparser as parser |
| import http.client as httpclient |
| import io as stringio |
| import urllib.error as urlerror |
| import urllib.parse as urlparse |
| import urllib.request as urlrequest |
| import urllib.request as urlretrieve |
| else: |
| # Python 2 imports. |
| import ConfigParser as parser |
| import httplib as httpclient |
| import StringIO as stringio |
| import urllib as urlparse |
| import urllib as urlretrieve |
| import urllib2 as urlrequest |
| import urllib2 as urlerror |
| |
| if sys.version_info < (2, 7): |
| |
| class NullHandler(logging.Handler): |
| |
| def emit(self, record): |
| pass |
| |
| def handle(self, record): |
| pass |
| |
| def createLock(self): |
| pass |
| |
| logging.NullHandler = NullHandler |
| |
| if sys.version_info < (2, 7, 9): |
| |
| # Native Python libraries do not check SSL certificates. |
| def curlretrieve(url, filename=None, *args, **kwargs): |
| command = ['curl', '--max-time', str(TIMEOUT), '--retry', str(RETRY_LIMIT)] |
| if filename: |
| command += ['-o', filename] |
| command += ['--', url] |
| subprocess.check_call(command) |
| |
| urlretrieve.urlretrieve = curlretrieve |
| |
| if sys.version_info < (3, 2): |
| parser.SafeConfigParser.read_file = parser.SafeConfigParser.readfp |
| parser.Parser = parser.SafeConfigParser |
| else: |
| parser.Parser = parser.ConfigParser |